[elektro] STM32F100 Reset probléma. Programblokk törlődik.

elight elight at gmail.hu
Tue Sep 22 11:00:02 CEST 2015


Szia ,

itt többminden eset  lehet Flash ügyben is ..
    a memóriából van kihasítva ha jól  néztem.
Nem úgy mint pl.  a PIC-eknél , ahol egy külön
kis EEPROM chipterület, és nem része a programmemóriának.

De a programom tulajdonképpen csak a legelején használja a Flash memóriát.
Ez egy önálló , tesztelt és akár kiköthető rutin
( konstansokkal helyettesíthető rész, és csak init adatokat tárol).

A gyanus ügy ,
hogy programban sehol máshol nem használok Flash műveletet.
mégis olyan mintha egy blokk időnként kapna Flash_Erase-t.
Leginkább gyanum ez. Főleg egy   kommunikáció lezajlása után
már tutira jelentkezik.

Magának  a flash műveletnek minden csínját még nem teljesem értem.
Tehát,  hogy ugyanaz a terület , mint a program mmeória, csak másik cím?
És, hogy simán egy eltévedt ponterrel pl.  ártírható e így a program 
memória?
És vannak persze  írásvédelmek is az ARM-ban, azok védik e ezt a felülírást?

De tudom ez nem meggoldás! A hiba ( elírás ) tényleges okát
meg  kell keresnem, különben a váratlan helyzetekben bármikor fetámadhat
akár  egyéb jelenségekkel kísérve!
    ( pl most éppen tör némi grafikát is  az Init képernyőn. ;)

Üdv István


2015-09-22 10:33 keltezéssel, Steve írta:
> Mezei avr-ben csináltam olyasmit, hogy a program írhatja a saját
> flash-ét, ARM-ban nem vagyok járatos.
> A leírtak alapján feltételezem, hogy van a programodban valahol egy
> flash író process. Ide kellene valami break-et tenni.
> Ha a normál futása alatt is van flash írás, akkorsincs baj, az író
> rutinba beszúrod, hogy ellenőrizze, milyen címre akar írni. Ha a
> kririkus területre írna, akkor break és lehet debuggolni, ha nem
> kritikus terület a célja, akkor meg hadd fusson.
>
>
> 2015-09-22 10:09 keltezéssel, elight írta:
>> Sziasztok.
>>
>>
>> ARM C programozásnál akadt egy olyan
>> kellemetlen  jelenség  amit jelenleg  nézegetek..
>>
>>
>> Maga a program Main része szokásos..
>>
>> Van egy Init és egy Int_Init rész , uart  , systick interrupt-al.
>> Flash  területről 12 word  init változó olvasás,
>> és ha nincs ott még adat akkor
>> létrehozza , letárolja , ismét olvassa.
>> Grafika initelés , nyitóképernyő
>> SWD debug kikapcsolás. ( kellene a plusz lábak )
>> Main képernyő
>> while(1)  {  működö rész }
>>
>>
>> Bele javítottam egy már tesztel működő program
>> bizonyos részeibe..  és nem jövök rá hogy a javított ,
>> vagy esetleg egy régóta bennemaradó hiba szívat?
>>
>> A jelenség az , ha beégetem a programot
>> akkor minden hibátlanu fut , jól kommunikál
>> jók az adatok a képernyőn, a kimenetek megfelelőek stb..
>> Ha először le-resetelem már akkor SWD visszakapcsolódása
>> és a program visszaolvasása után azt látom hogy a
>> 0x8000000 - 0x800003FF  program terület kitörlődött
>> és 0xFFFFFFFF  az értéke.
>> Hatására az ismételt RESET-ek hatástalanok...  !!!
>> Ismételten felülírom a programterületet , akkor a
>> következő reset-ig megint jól működik.
>>
>> Maga a program már eléggé meghízott hogy egy az egyben
>> végigdebugolhassam..   Szétszedegetni lassú.
>> Valami gyorsabb tesztelési ötlet lenne jó előtte.
>> Mit is bontsak ki, és nézegessek.
>>
>> Először  arra gondoltam hogy talán a FLASH init okozná. Megtéved.
>> Ha tologatok a Main_Init  részben egy while(1); Stopp gyanánt:
>> - Nyitóképernyőig is  jól fut le és vár... Bárhányszor resetelhető.
>> Utána arra  gondoltam hogy az SWD  debug kikapcsolás okozza,
>> de ha kiveszem ( ennek hatására 3-4 port inputban marad ,
>> nem lesz Alternatív IO, de ez nem gond  )
>>        a RESET probléma akkor is fennáll.
>>
>> Egyenlőre a hozzáírt részekben még nem igen találtam meg az igazi okát.
>>
>> Üdv István
>>
>>
>>
>>
>> -----------------------------------------
>>             elektro[-flame|-etc]
>>
>>
> -----------------------------------------
>            elektro[-flame|-etc]
>



More information about the Elektro mailing list