XC8 a data ver Flash

Jan Smrz jan.smrz na email.cz
Čtvrtek Červen 20 22:37:44 CEST 2013


Děkuji všem za snahu, rozšířilo mi to znalosti pointerů.  Další zkoumání 
však ukázalo, že souvislost s operátorem @ je spíše nepřímá.

Zkušební kód (použity operátory @)

void pdt_init(void)
{
    volatile uint32_t address;

    pdt_userpt_num |= ee_read(EE_USER_POINT_NUM_H) << 8;
    address = (uint32_t)pdata1;    // zde se přiřadí 0x0000
    address = (uint32_t)pdata1;    // zde se přiřadí správná adresa
}

A jeho překlad

!   pdt_userpt_num |= ee_read(EE_USER_POINT_NUM_H) << 8;
0x7822: MOVLW 0x0
0x7824: MOVWF quotient, ACCESS
0x7826: MOVLW 0x19
0x7828: MOVWF arg, ACCESS
0x782A: CALL 0xB7A2, 0
0x782C: NOP
0x782E: MOVLB 0x0
0x7830: MOVWF f1, BANKED
0x7832: MOVLB 0x0
0x7834: MOVF f1, W, BANKED
0x7836: MOVLB 0x0
0x7838: MOVWF f3, BANKED
0x783A: CLRF cntr, BANKED
0x783C: MOVLB 0x0
0x783E: MOVF cntr, W, BANKED
0x7840: MOVLB 0x1
0x7842: MOVLB 0x1
0x7844: IORWF f1, F, BANKED
0x7846: MOVLB 0x0
0x7848: MOVF f3, W, BANKED
0x784A: MOVLB 0x1
*0x784C: MOVLB 0x1**    // bank 1*
0x784E: IORWF crc, F, BANKED

!   address = (uint32_t)pdata1;
0x7850: MOVLW 0x20
0x7852: MOVWF f1, BANKED
0x7854: MOVLW 0xD4
0x7856: MOVWF cntr, BANKED
0x7858: MOVLW 0x0
0x785A: MOVWF f3, BANKED
0x785C: MOVLB 0x0
0x785E: MOVF f1, W, BANKED
0x7860: MOVLB 0x0
0x7862: MOVLB 0x0
0x7864: MOVWF ff2, BANKED
0x7866: MOVLB 0x0
0x7868: MOVF cntr, W, BANKED
0x786A: MOVLB 0x0
0x786C: MOVWF f1, BANKED
0x786E: MOVF f3, W, BANKED
0x7870: MOVLB 0x0
0x7872: MOVWF a, BANKED
*0x7874: MOVLB 0x0****// bank 0*
0x7876: CLRF f2, BANKED

!   address = (uint32_t)pdata1;
0x7878: MOVLW 0x20
0x787A: MOVWF f1, BANKED
0x787C: MOVLW 0xD4
0x787E: MOVWF cntr, BANKED
0x7880: MOVLW 0x0
0x7882: MOVWF f3, BANKED
0x7884: MOVLB 0x0
0x7886: MOVF f1, W, BANKED
0x7888: MOVLB 0x0
0x788A: MOVLB 0x0
0x788C: MOVWF ff2, BANKED
0x788E: MOVLB 0x0
0x7890: MOVF cntr, W, BANKED
0x7892: MOVLB 0x0
0x7894: MOVWF f1, BANKED
0x7896: MOVF f3, W, BANKED
0x7898: MOVLB 0x0
0x789A: MOVWF a, BANKED
0x789C: MOVLB 0x0
0x789E: CLRF f2, BANKED

První přiřazení je s počáteční bankou 1 a nefunguje. Druhé je identické, 
ale s počáteční bankou 0 a již funguje. Při vynechání operátoru @ je kód 
přiřazení mírně odlišný a funguje správně.


J.S.


------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20130620/32b72342/attachment.htm>


Další informace o konferenci Hw-list