rutina za reset

Rasprava o PIC mikrokontrolerima, PIC projekti i drugo vezano za PIC-eve...

Moderators: pedja089, stojke369, [eDo], trax

_heX
Napredujem
Napredujem
Posts: 136
Joined: 29-10-2009, 20:09
Location: Republika Zagorje

Re: rutina za reset

Post by _heX »

@InTheStillOfTheNight
Ne znam, mislim da mi promaklo nesto usljed brisanja. Ali vezano, za post o booloader-u. Nisam upucen, tako da neznam jel to kod atmelovog bl-a bila greska ili je jednostavno bio tako koncipiran. Ako je bio tako koncipiran onda je greska jedino u tome sto atmel nije upozorio da je wdt omogucen i da cucka treba udarati u korisnickom softveru ili ga onemoguciti ako je to moguce (kod PIC16 ne, kod PIC18 da, AVR ?).

Mislim da spomenuti atmel kontroler ima drugcije koncipiran bl od onog sto smo ja/mi navikli na PIC-u: bl pocinje na adresi 0x000 i od tamo obicno skace na kraj memorije. Znaci, po resetu uvijek u bl, pa u user app. Bulk Erase kontrolera brise i bl naravno. Imam dojam da za atmelov kontroler to radi na malo drugcijem principu, ali ovo je za drugu raspravu u nekom drugom podforumu (AVR mi pada na pamet).

Tvorci bl-a isticu da neki registri po ulasku u user app nece imati defaultno stanje nakon reseta (skroz jasno). U tom slucaju 100% posto se slazem s tobom/vama, incicijalizacija je obavezna.

Drago mi je da si spomenuo bl, jer on definitivno dovodi u pitanje "nepostojecu rutinu". Jer sada uz to sto ne mozes skociti na adresu 0x000 od bilo kuda (PIC16), ne mozes i bilo kuda. Obazlozenje: Na to nekoj adresi se mogu nalaziti ostaci neke predhodne "overvrajtane" aplikacije. Kod PIC-a bl brise samo "sektor" koji namjerava reprogramirati.
Samo me pitao razlog zbog kojeg na adesi 0 postoji rušenje HEX-a i preživljavanje HEX-a...
Nisi me ulovio. To je bilo retoricko pitanje, a fraza "Il' si mrtav il' si nisi mrtav." je trebala docarati moj sarkazam. Ispricavat se ne mislim.

Ali evo jedno normalno pitanje.

HARD RESET termin, na sto se tocno odnosi? Zanima me cisto radi povlacenja paralela s PIC-om. Kod njega reset na pin, por, bor, wdt reset, (instrukcijski, stack overflow/underflow kod PIC18 serije) imaju isti efekt ne racunajuci eventulana kasnjenja (PowerUp Timer kod POR-a za primjer).
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: rutina za reset

Post by InTheStillOfTheNight »

Nepostojeća rutina AVR-a sa bootloaderom postoji samo iza samog bootloader-a tj, iza njegovog zadnjeg assemblerskog operacijskog koda. Ne bi postojala samo u situaciji da je na zadnjoj instrukciji bootloadera naredba koja prilikom izvršavanja ne radi PC+1
To je u situaciji kada je FLASH bootloadera iskorišten 100%, a na zadnjoj adresi FLASH-a se ne nalazi 0xFFFF

Kod AVR-a postoji FUSE koji određuje start MCU-a i može biti podešen ili na početak bootloadera ili na adresu 0x0000 tako da AVR ne mora nužno startati sa adrese bootloader-a ali se programski uvijek može skočiti na adresu bootloadera te ga pozvati.

Svaki reset AVR-a skače na reset vector koji može biti ili bootloader ili adresa 0x0000. U bilo kojoj takvoj situaciji neće ti svi registri biti na default stanju i potebno je napraviti init.

HARD reset je fizičko isključivanje napona sa mikrokontrolera i tek na prvom startu MCU-a svi su registri sigurno postavljeni u default stanje.

Stack overflow za računalo ne postoji, ono će jednostavno prepisati content RAM-a. SP ne može znati koju ti adresu rama koristiš za varijablu tako da će ti SP gaziti sve ispred sebe ako ga puniš. To je više stvar compilera, a ne računala...

Mislim da postoji način da znaš kada ti SP krene pisati po registrima, moram provjeriti. No siguran sam da SP može pregaziti čitav RAM i sigurno te nikako ne može upozoriti da gazi po tvojim varijablama.
InTheStillOfTheNight
djanib
Posts: 16
Joined: 14-12-2011, 21:41

Re: rutina za reset

Post by djanib »

A sto ljudi iskomplikovase situaciju to je cudo. :D :D :D :D
Al uzivam citajuci vas.

Jednostavan savjet bi bio da uzme i koristi 18F4520 koji je pin kompatibilan sa 16F877(A) i posjeduje reset funkciju u svom assembleru. Drugo rjesenje je kao sto je vec dato koristenje WDT i ponistavanje, kad zatreba reset, postavi procesor u loop petlju, a watchdog timer ce odraditi ostalo. WDT vrijedi za sve pomenute PIC kontrolere.

A neznam ni u cemu bi bio problem postaviti registre u toku programa na zeljeno stanje i nastaviti izvrsavanje i bez reseta.

Svaka od vec pomenutih opcija ovih mozgova ovdje sa foruma je rjesenje koje se trazilo.
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: rutina za reset

Post by InTheStillOfTheNight »

Nismo mi nista iskomplicirali :) To su opcije :)

Da bi uopce resetirao MCU moraš znati što treba resetirati... Assember i dio programa koji je skriven iza prevodilca neće se sam od sebe resetirati... Po tome moraš znati točno što će prevodilac napraviti od tvog code-a ako ne pišeš u asm...

Vjerojatno se ne želiš upuštati u to što se događa u toj mašini pa ti je najbolje while(1) i WDT, bio on externi ili interni... Evo jedan externi koji ja koristim: MAX1232, i on će ti u while(1) sigurno resetirati program, no ova rasprava je otišla i u neke dublje stvari u kojima postoji mogućnost da ti stvari neće raditi nakon externog reseta, no ta mogućnost je u praksi vrlo mala... Ovisi jedino o programeru koda, i ako je on zejebao takvu stvar onda ti neće pomoći WDT reset...
InTheStillOfTheNight
Post Reply