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

elight elight at gmail.hu
Thu Sep 24 09:52:42 CEST 2015


Rendben .
Majd utána nézek ennek is.

Üdv István

2015-09-24 09:45 keltezéssel, hg12345 írta:
> 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]
> -----------------------------------------
>            elektro[-flame|-etc]



More information about the Elektro mailing list