Restart programu

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
ZdenekHQ
Významný člen
Příspěvky: 25519
Registrován: 21 črc 2006, 00:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#31 Příspěvek od ZdenekHQ »

Teď jsem řešil nějakej HW problém, ale ty výpadky tam pořád jsou. Oscilátor je OK.
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Uživatelský avatar
RayeR
Příspěvky: 1850
Registrován: 02 srp 2009, 00:00
Bydliště: Praha
Kontaktovat uživatele:

#32 Příspěvek 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.
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“