MCU 89C4051 a používání přerušení

Jan Waclawek konfera na efton.sk
Pondělí Únor 20 13:59:09 CET 2012


Pretekajuci stack by bolo moje prve podozrenie.

Nepisali ste, aky prekladac pouzivate, ale pokial viem, ziadny (okrem "omniscient" HiTech-u, ktory sa vsak pre '51 nedostal dalej ako po betu predtym ako ho zhltol Microchip) stack neskuma.

Ak pouzivate Keil v beznych standardnych nastaveniach, tak by malo byt pomerne lahke urobit hrubu analyzu stacku, kedze lokalne premenne sa neukladaju na stack - je potrebne spocitat maximalne vnorenie funkcii, spocitat si, kolko to zhltne stacku, k tomu pripocitat stack spotrebovany v preruseni (a ak mate prerusenia roznych priorit, tak aj tam najhorsiu variantu vnoreni). To sa pripocita k hodnote stack pointra nastaveneho v startup kode (malo by to byt niekde v mapfile - Keil nepouzivam tak to takto z fleku neviem). U '51 vzhladom na rastuci stack nehrozi, ze by stack nenapadne prepisal premenne, ale ked pretecie, tak to ma obvykle dost dramaticke nasledky. Naviac '4051 ma len 128 byte RAM, takze je dost lahke z neho vybehnut...

wek



On Sun, 19 Feb 2012 11:09:38 +0100
Jaroslav Rychtařík <jardarik at gmail.com> wrote:

> Mám ještě podezření na přetékající zásobník, neb program přerostl do 
> neplánovaných rozměrů a obsahuje spoustu globálních proměnných  + 
> jednotlivé funkce mají další svoje lokální proměnné + vyvolané funkce 
> přerušením také něco spolknou.  Nevím překladač žádnou chybu nehlásí. Je 
> otázkou jestli je schopnej  rozpoznat potenciální nebezpečí, když neví 
> kdy přerušení bude vyvoláno, respektive jestli si hlídá nejhorší možný 
> případ.
> J.


Další informace o konferenci Hw-list