[elektro] STM32F100 Reset probléma. Programblokk törlődik.
hg12345
hg12345 at freemail.hu
Thu Sep 24 09:45:16 CEST 2015
Szia, nézd meg az virtuális EEPROM kezelési példákat, azok pont ezzel foglalkoznak.
Írtad, áttérsz F4-re tudtommal ott nem egyformák a FLASH szegmens méretek, pont adattárolás miatt.
A felső, a program végéhez közelebbi szegmensek kisebb méretűek, azokat érdemes használni.
A linkerben használj, definiálj egy független adat szegmenst (ez most még nem azonos a FLASH szegmenssel!, csak majd lesz amikor scriptben beállítod) Azokat az adatokat amiket átszeretnél írni (módosítani) azokat erre a szegmensre helyezd a C programban.
A linker scriptben ezt a szegmenst tetszőleges helyre tudod helyezni, ebből a program nem lát, nem érzékel semmit. Így a kód hordozható lesz, a linker srciptet meg minden uC-hez egyszer be kell állítani, még ha nem is Te csinálod! (Persze most kénytelen leszel)
Annyi még lehetséges, ha ezt a segmenst FLASH-re állítod a linkerben, és írással is hívatkozol rá, a linker jelezheti, hogy ez nem lehetséges. Ezért célszerű ezeket csak olvasni. az írást egy független területen megcsinálni, és a FLLASH írás innen veszi az új adatokat.
elight <elight at gmail.hu> írta:
>Mégegyszer köszi!
>
>Ténylegesen addig módosítgattam, míg elértem ,
> átlógott a első 64k-n a program és ráfedett
>a második 64k elején található Flash-nak konfigolt területre..
> Az írásakor meg kilőtt egy kis programdarabkát pechemre.
>Onnan már részemről követhetetlen a dolog..
>
>Szóval ,
>azt írja a szakirodalom, ha lehet ne használjunk fix címeket
>mert nem lesz könnyen portolható a program más környezetben.
>Kényszerű leszek szabályozni a program és adatterületeket,
>mert ezek szerint nem minden bízható a fordítóra.
>Legalábbis ebben az esetben nem volt utaló varning.
>
>Szórom is a hamukát a fejemre! ;-)
>
>Egyébként létezik olyan , hogy a fordítót utasítom hogy keressen
>és foglaljon fordítás végén egy szabad címtartományt
>egy adott memória változó részére és azt adja át a Flash terület
>kezelésnek? Ez megoldaná véglegesen a dolgot.
>
>Üdv István
>
>
>
>
>
>2015-09-22 12:46 keltezéssel, hg12345 írta:
>> Szia,
>>
>> - a legegyszerűbb megoldás, ha blokkolod írásra azt FLASH szegmenst ( 1K lépésekben lehet állítani az írásvédelmet!) Ha magad is írod a flash-t akkor célszerű azokat szegmenseket védetté tenni amit nem fogsz használni, sok kellemetlenségtől szabadíthatod meg magad! Ha írod a flash írás után ellenőrződ az írást?
>>
>> Ha kiakarod kapcsolni debug-t azt a legelején célszerű tenni, még a C_INIT után vagy elött.
>>
>> Reset után induláskor lehet más probléma, a két BOOT (RB1:-) láb felhasználásával, főleg ha sikerül RAM-ból vagy BOOTROM-ból indítani az eszközt, akkor kicsit más lesz a memória kiosztás, Ezt is érdemes ellenőrizni.
>>
>>
>> elight <elight at gmail.hu> í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]
>
>-----------------------------------------
> elektro[-flame|-etc]
More information about the Elektro
mailing list