Zkoušíš to krokováním v debuggeru? Je-li zapnuta optimalizace, mohou nesouhlasit čísla řádků a vede Tě to po jiných řádcích než se provádí, či spíš přesněji kód se při optimalizaci vykonává v jiném pořadí než ve zdrojáku a některé části může překladač vypustit když zjistí že se dají udělat jednodušeji.
Měl bys ladit nejdříve s vypnutou optimalizací a až po odladění ji zapnout a jen zkontrolovat funkčnost kódu (už bez debuggeru - nebo sice krokovat, ale v assembleru).
Jo, tak to je kvůli optimalizaci, debugger nemá pro kód rozumný řádek. Ve skutečnosti to j=0 neprovádí, jen neví co má pro dané místo programu ukázat - dá se to zkontrolovat v assembleru. Při optimalizaci často ani obsahy proměnných nesouhlasí, protože procesor má proměnné např. v registrech a ty používá vícenásobně a tak debugger neví co má zobrazovat.
jde o to, ze jj urcuje radek pameti a kdyz se po kazdem pruchodu forem jj vynukuje, tak se mi nevysle dalsi hodnota z pameti…zkusil jsem to ted naprogramovat a na displej mi to vypisuje stale jednu hodnotu, tu prvni, protoze jj je stale 0
juraw spíš uveď větší kus kódu, zřejmě bude chyba někde jinde, protože kód co jsi uvedl vypadá být v pořádku a neměl by jj nulovat. (volatile by zde nemělo být nutné použít) Zkusil jsi to bez optimalizace? Možná si jen myslíš že jj se nuluje a nefunguje Ti kód z nějakého jiného důvodu.
Výstup na displej je moc rychle, pak tam může být viditelná jen jedna z hodnot. Když odkomentuješ to _delay_ms(250) nemění se to ani tak? Na zkoušku bys mohl na displeji namísto output_data zobrazovat hodnotu ii, tím bys viděl zda je chyba v zobrazování (ii se musí měnit - pokud ne tak např. program zamrzá v nějaké funkci např. sprintf) nebo v přípravě dat.
Wow! Diky moc, opravdu, kdyz jsem zvetsil buffer tak se to chova spravne… malloc jsem pouzival, protoze jsem potreboval alokovat vetsi pamet na vzorky, testovat, jsem ho testoval, jen jsem to asi nezkopiroval