Zaslal: ne listopad 23 2008, 21:24 Předmět: Soft reset PIC
Je možné spraviť softwarový reset PIC - jedná sa o to, aby som počas prerušenia dokázal spraviť reset PICčka - aby mi po návrate z prerušenia nepokračoval odkiaľ tam skočil, ale išiel od adr. 00. Ďakujem
PIC řady 16FXX a nižší nemají přístupný StackPointer, tutíž ho nejde nulovat a ani to není třeba. Zásobník je totiž cyklický. Stačí opravdu skok na inicializační adresu - obvykle 0x00. Ovšem je vhodné ještě před tímto skokem smazat příznak aktivního přerušení.
Vďaka, príznak prerušenia je zmazaný po aktivácii rutiny prerušenia. Len sa bojím, ak nepoužijem return, retfie aby pretečenie Stack nerobilo haluze, nakoľko prerušenie buď prepína dva výstupy (krátke stlačenie tlačítka) alebo spôsobí "vypnutie" činnosti PICčka (dlhé stlačenie tlačítka). V tomto prípade program beží v prerušovacej rutine, na krátke stlačenie nereaguje, pri dlhom by mal program bežať od začiatku. Procík je trvalo napájaný, takže k pretečeniu Stack časom určite príde - simulátor pri pretečení vyhadzoval chybu.
Nenapsal jsi, o jaký PIC se jedná. Jak jsem ale řekl, u řady 16FXX a nižší je osmiúrovňový cyklický stack, který po přetečení začíná od začátku. Přetečení není nijak kontrolováno ani signalizováno. Nemusíš to tedy hlídat jinak, než že za standardního běhu programu nesmí být vnoření větší než 8x. Ty nemůžeš ovlivnit na jakou pozici zásobníku tvůj call uloží návratovou adresu a nezajímá tě to. Pokud simulátor hlásí přetečení stacku, tak to nejspíš není chyba, ale pouze varování. Reálný procesor se o této nastalé situaci ani nedozví a to přetečení znamená, že se ukazatel zásobníku nastaví zase na počátek.
Naposledy upravil jankop dne po listopad 24 2008, 11:18, celkově upraveno 2 krát.
a co treba nejaky output pin privest na tranzistor, kterym se bude davat na log0 MCLR pin (na kterem bude samozrejme pullup z Vcc)? Nebo pouzit Watchdog (ale to v tvem pripade okamziteho resetu nelze pouzit)?
Kazdopadne u PIC18 se da pouzit RESET instrukce.
jankop> Ide o 16F627. Práve o to vnorenie 8x ide - vždy po resete skokom na 00 by ostala jedna úroveň visieť, preto chcem robiť ten reset.
Ako som písal, program bude bežať stále a je reálny predpoklad, že k tomu 8násobnému vnoreniu príde.
Skúsim to prepísať a otestovať na reál procíku.
Nad Watchdog som rozmýšľal, nakoniec to možno spravím tak, len sa mi nechcelo zbytočne komplikovať program.
Kolikrát ještě potřebuješ zopakovat, že nic nezůstane viset. Ukazatel zásobníku se ani při resetu nenuluje. Jeho stav může být po resetu naprosto náhodný. S ohledem na cykličnost je naprosto jedno, v jaké počáteční hodnotě se nachází. Opravdu nerozumíš tomu, že zásobník prostě ošetřovat nemusíš? Co pořád vymýšlíš nesmysly? Když chceš skočit ven z přerušení, tak to prostě udělej. Stack ti v tom naprosto nebrání.
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.