Takze pokracovanie c.2<br><br><div class="gmail_quote">2013/6/20 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">

  
    
  
  <div text="#000000" bgcolor="#FFFFFF">
    <div>On 06/20/2013 08:53 AM, Andrej Jancura
      wrote:<br>
    </div><div class="im">
    <blockquote type="cite">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>
      <div class="gmail_quote">
        <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
          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,sizeof(format_version),&amp;format_version);<br>
          mem_read((uint32_t)pdata1 + 2,sizeof(length),(uint8_t*)&amp;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>
      </div>
    </blockquote>
    <br></div>
    Pokud by byla chyba v pretypovani, tak by ale nemelo fungovat ani
    jedno cteni, ne jen to prvni? V obou pripadech pouzivam stejne
    (uint32_t)pdata1. <br>
    <br>
    Zde je listing pro dva pripady. S PIC assemblerem jsem se jeste moc
    neszil, tak z prvniho pripadu moc moudry nejsem.<br>
    <br>
    <br>
    <tt>   mem_read((uint32_t)poidata,                  
      mem_read(0x4000LU,</tt><tt><br>
    </tt><tt>        sizeof(format_version),                     
      sizeof(format_version),</tt><tt><br>
    </tt><tt>        &amp;format_version);                           
      &amp;format_version);</tt><tt><br>
    </tt><tt><br>
    </tt><tt> movlw    low(16384)                               movlw   
      low(04000h)<br>
       movwf    (??_pdt_init+0+0)&amp;0ffh                   movwf   
      ((c:?_mem_read)),c<br>
       movlw    high(16384)                              movlw   
      high(04000h)<br>
       movwf    (??_pdt_init+0+0+1)&amp;0ffh                 movwf   
      ((c:?_mem_read+1)),c<br>
       movlw    low highword(16384)                      movlw    low
      highword(04000h)<br>
       movwf    (??_pdt_init+0+0+2)&amp;0ffh                 movwf   
      ((c:?_mem_read+2)),c<br>
       movlb    0    ; () banked                         movlw    high
      highword(04000h)<br>
       movf    (??_pdt_init+0+0)&amp;0ffh,w                  movwf   
      ((c:?_mem_read+3)),c<br>
       movwf    ((c:?_mem_read)),c                       movlb    0    ;
      () banked<br>
       movlb    0    ; () banked                         movwf   
      (??_pdt_init+0+0)&amp;0ffh<br>
       movf    (??_pdt_init+0+1)&amp;0ffh,w                 <br>
       movwf    1+((c:?_mem_read)),c                     <br>
       movf    (??_pdt_init+0+2)&amp;0ffh,w                 <br>
       movwf    2+((c:?_mem_read)),c                     <br>
       clrf     3+((c:?_mem_read)),c                     <br>
       movlb    0    ; () banked                      <br>
       movwf    (??_pdt_init+3+0)&amp;0ffh                   <br>
       movlw    low(01h)                                 movlw   
      low(01h)<br>
       movwf    (0+((c:?_mem_read)+04h)),c               movwf   
      (0+((c:?_mem_read)+04h)),c<br>
       movlb    0    ; () banked                         movlb    0    ;
      () banked<br>
       movf    (??_pdt_init+3+0)&amp;0ffh,w                  movf   
      (??_pdt_init+0+0)&amp;0ffh,w<br>
       movlb    0    ; () banked                         movlb    0    ;
      () banked<br>
       movlw    high(pdt_init@format_version)            movlw   
      high(pdt_init@format_version)<br>
       movwf    (1+((c:?_mem_read)+05h)),c               movwf   
      (1+((c:?_mem_read)+05h)),c<br>
       movlb    0    ; () banked                         movlb    0    ;
      () banked<br>
       movlw    low(pdt_init@format_version)             movlw   
      low(pdt_init@format_version)<br>
       movwf    (0+((c:?_mem_read)+05h)),c               movwf   
      (0+((c:?_mem_read)+05h)),c<br>
       call    _mem_read    ;wreg free                   call   
      _mem_read    ;wreg free    <br>
    </tt><div class="im"><tt><br>
    </tt><tt><br></tt></div></div></blockquote><div><br>Ten asm listing je sice pekny ale prakticky nepouzitelny. Teraz si nepamatam ci v .lst alebo .asm je pri Vasej funkcii _mem_read taka velka komentovana tabulka s popisom, kde sa ktory parameter uklada a ako sa uklada. Takto mozeme urcit akurat tolko, ze Vasa adresa sa ulozi do 3 bytov, a skopiruje do banky 0, pricom si myslim, pokial je PointerDataTable skutocne adresa tabulky, ze najvyssi bit v 4 byte je nula a teda ide pouzivat asi ram... to by mohlo vysvetlovat tie Vase adresy 0. Ked pouzijete pointer, tak ten najvyssi bit si kompilator osetri sam. <br>
 </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div text="#000000" bgcolor="#FFFFFF"><div class="im"><tt>
    </tt><br>
    <blockquote type="cite">
      <div class="gmail_quote"><br>
        <div>Aku verziu pouzivate LITE, STD alebo PRO? Pretoze podla
          verzie tam je povolena inteligencia a optimalizacie.<br>
          <br>
        </div>
      </div>
    </blockquote></div>
    Verzi Lite<br>
    <br></div></blockquote><div><br>Tak potom niektore moje poznamky su pre Vas asi bezvyznamne.<br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div text="#000000" bgcolor="#FFFFFF">

    <br>
    btw. Vite nekdo odpoved na muj druhy dotaz, t.j. proc je v v
    defaultnim nastaveni linkeru oblast pro ulozeni promennych
    definovana takto: -AMEDIUMCONST=0D00h-0FFFFh,010D00h-017FFFh? Je
    nejaky duvod pro to, aby oblast nebyla v jednom kuse, t.j.
    0D00h-017FFFh?
    <br><span class="HOEnZb"><font color="#888888">
    <br></font></span></div></blockquote><div><br>Neviem to isto, mozno tam je bootblock, nejaka hardwarova chyba cipu alebo len pomocne asemblerovske rutiny... Neviem. Trebalo by lepsie pozriet datasheet, errata pripadne .lst file.<br>
<br>A.<br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div text="#000000" bgcolor="#FFFFFF"><span class="HOEnZb"><font color="#888888">
    <br>
    J.S.<br>
  </font></span></div>

<br>_______________________________________________<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">Hw-list@list.hw.cz</a><br>
<a href="http://list.hw.cz/mailman/listinfo/hw-list" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
<br></blockquote></div><br>