XC8 a data ver Flash

Andrej Jancura aj.hwlist na gmail.com
Čtvrtek Červen 20 08:53:16 CEST 2013


Dobry den,

2013/6/19 Jan Smrz <jan.smrz na email.cz>

> Dne 19.6.2013 19:36, Jan Waclawek napsal(a):
>
>  const unsigned char pdata1[]= { 0x01,0x01,0x00,0x00,0x00,0xDA,**0x08,
>>> ... atd,
>>> Pri trasovani vidim, ze vyraz
>>> (uint32_t)pdata1 casto obsahuje 0 misto adresy promenne.
>>>
>> No, nechcem krivdit Microchipu a samozrejme o PICoidoch nic neviem, ale
>> rozne tie ladiace prostriedky castokrat ukazuju kraviny. Ved pdata1 je
>> predsa konstanta, nie? Skor by som dal breakpoint niekde na zaciatok tej
>> funkcie a pozeral na "miesto" (register? pamat?), kde sa odovzdavaju
>> parametre. No a samozrejme by som pozrel v disasemblerovanom binare, ako sa
>> pred volaniami tej funkcia to inkriminovane "miesto" plni.
>>
>> wek
>>
>>  Ano, pdata1 je konstanta, jen mám podezření, že ji asi ne vždy přiřadí
> správnou hodnotu. V kódu mám dvoje čtení hned za sebou
> mem_read((uint32_t)pdata1,**sizeof(format_version),&**format_version);
> mem_read((uint32_t)pdata1 + 2,sizeof(length),(uint8_t*)&**length);
>
> První čtení je špatné (opravdu čte data z adresy 0), druhé je již správné.
> Pokud pořadí čtení prohodím (první čtu length), je opět první špatné, druhé
> správné.
>
>
Ja by som skusil pretypovanie na uint32_t v tom mem read vynechat. Skuste
si pozriet zdrojaky kniznicnych funkcii strcpy a podobne. Tam to maju
robene ako to potrebujete. Ono const unsigned char pdata1 a unsigned char
pdata1 je ta ista adresa, rozdiel je len v tom, ze to prve je iba na
citanie. Mam este take tusenie, ze pri tom const je nastaveny najvyssi bit,
aby vedela pomocna rutina ci citat z ram alebo flash, ale to sa da tiez
zistit z kodu.

Asi to bude bug v linkeru, zkusil jsem teď nahradit (uint32_t)pdata1
> konstantou rovnou adrese proměnné a kód s tím funguje správně .
>
> On ten linker vůbec funguje prapodivně. Např. pokud napíši
>
> const unsigned char pdata1[1000]= { .. zde jen 50 inicializačních dat
>
> Pak rezervuje pro proměnnou 1000 bytů. Pokud ale napíši
>
> const unsigned char pdata1[1000] @0x3000= { .. zde jen 50 inicializačních
> dat
>
> Tak proměnná je sice umístěna na adresu 0x3000, ale velikost má již jen 50
> bytů a zbytek je obsazen jinými proměnnými/programem.
>

Aku verziu pouzivate LITE, STD alebo PRO? Pretoze podla verzie tam je
povolena inteligencia a optimalizacie.

A.


>
>
> J.S.
>
>
>
>
> ______________________________**_________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/**listinfo/hw-list<http://list.hw.cz/mailman/listinfo/hw-list>
>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20130620/e2cacbd8/attachment.htm>


Další informace o konferenci Hw-list