Stránka 3 z 3
Napsal: 30 čer 2019, 18:38
od ZdenekHQ
Teď jsem řešil nějakej HW problém, ale ty výpadky tam pořád jsou. Oscilátor je OK.
Napsal: 07 črc 2019, 01:37
od RayeR
Na skok na libovolnou adresu neni potreba sahat po inline assembleru, staci si nadefinovat pointer na funkci s hodnotou 0 nebo jinou adresou, kam se ma skocit. Pouzivam to pri exitu z bootloaderu, kdyz chci spustit hlavni program.
void (*start_app)(void)=0;
start_app(); // predej rizeni hlavnimu programu (std. reset vektor)
Nasledne probehne start-up kod, ktery vymaze pamet a nastavi zasobnik a zavola main() ale zustane zachovano nastaveni registru periferii, na to je treba myslet, ze nekdy muze zustat naka periferie viset v divnym stavu a po takovem to resetu se jeji funkce neobnovi. Pokud chci ze SW skutecne resetovat cely MCU, tak pres watchdog. Je mozne si nadefinovat v linker skriptu sekci pameti typu no init, do ktere si lze schovat promenne, ktere se nemaji pri restartu smazat.