Zdravim, pokousel jsem se napsat kod pro maticovou klavesnici 4x4, problem nastal se switch casem, do jednoho z 16 casu to skoci bez problemu, za jednotlivymi “casy” mam if, kdyz se nesplni, tak to skoci az na posledni else z 16. Cast kodu je zde
Nemělo by se projevit, na závorky to bylo v pořádku (pokud překladač funguje správně).
Nevím jaký to je MCU - nepřeteče zásobník, že by to pak skočilo kam nemá?
Nebo chyba úvahy - protože jsou všechny else stejné. Jestli to zjišťuješ v debuggeru, tak pak je pravděpodobné, že to takto optimalizuje překladač a spojí stejné větve.
z funkce klavesnice_cteni se Ti to nikdy nevrátí, ty příkazy “break” platí jen pro přerušení větví switche
Voláš s nekonečnou rekurzí funkce posun_radku/zakmit s klavesnice_cteni, takže po pár průchodech se Ti zahltí stack a program se zblázní
“osetreno” nemá vlastně žádný význam, to nemáš dobře promyšlené. V jednom okamžiku přečteš a zobrazíš klávesu, hned to zas smažeš, počkáš 20 ms a znovu testuješ - to není ošetření zákmitů, díky tomu vidíš trvale že nic nebylo stisknuto
Možná jsi zvyklý z BASICu nebo assembleru že se skáče na labely. Ale funkce v C jsou podprogramy do kterých se vleze (uloží se návratová adresa do zásobníku) a ze kterých se to po ukončení vrátí (obnoví se ze zásobníku původní adresa programu).