Dobry den,<br><br><div class="gmail_quote">2013/6/19 Jan Smrz <span dir="ltr">&lt;<a href="mailto:jan.smrz@email.cz" target="_blank">jan.smrz@email.cz</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Dne 19.6.2013 19:36, Jan Waclawek napsal(a):<div class="im"><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
const unsigned char pdata1[]= { 0x01,0x01,0x00,0x00,0x00,0xDA,<u></u>0x08, ... atd,<br>
Pri trasovani vidim, ze vyraz<br>
(uint32_t)pdata1 casto obsahuje 0 misto adresy promenne.<br>
</blockquote>
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 &quot;miesto&quot; (register? pamat?), kde sa odovzdavaju parametre. No a samozrejme by som pozrel v disasemblerovanom binare, ako sa pred volaniami tej funkcia to inkriminovane &quot;miesto&quot; plni.<br>

<br>
wek<br>
<br>
</blockquote></div>
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<br>
mem_read((uint32_t)pdata1,<u></u>sizeof(format_version),&amp;<u></u>format_version);<br>
mem_read((uint32_t)pdata1 + 2,sizeof(length),(uint8_t*)&amp;<u></u>length);<br>
<br>
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é.<br>
<br></blockquote><div><br>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.<br>
<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
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ě .<br>
<br>
On ten linker vůbec funguje prapodivně. Např. pokud napíši<br>
<br>
const unsigned char pdata1[1000]= { .. zde jen 50 inicializačních dat<br>
<br>
Pak rezervuje pro proměnnou 1000 bytů. Pokud ale napíši<br>
<br>
const unsigned char pdata1[1000] @0x3000= { .. zde jen 50 inicializačních dat<br>
<br>
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.<span class="HOEnZb"><font color="#888888"><br></font></span></blockquote><div><br>Aku verziu pouzivate LITE, STD alebo PRO? Pretoze podla verzie tam je povolena inteligencia a optimalizacie.<br>
<br>A.<br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="HOEnZb"><font color="#888888">
<br>
<br>
J.S.</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
<br>
  <br>
______________________________<u></u>_________________<br>
HW-list mailing list  -  sponsored by <a href="http://www.HW.cz" target="_blank">www.HW.cz</a><br>
<a href="mailto:Hw-list@list.hw.cz" target="_blank">Hw-list@list.hw.cz</a><br>
<a href="http://list.hw.cz/mailman/listinfo/hw-list" target="_blank">http://list.hw.cz/mailman/<u></u>listinfo/hw-list</a><br>
</div></div></blockquote></div><br>