在我的一个项目中有一些表,当我使用这个Tab蕾时,在WrreReGiStEnter()中看到错误的数据;函数。当我添加一些虚拟数据(从来没有使用过)时,它是正确的。在模拟器中,当我跟踪时,错误的数字
以上来自于百度翻译
以下为原文
In one of the my project there is some table
const u8 const RegistersCfg[] = {10, 20, 50};
and when I use this table
WriteRegister(i, RegistersCfg
);
I see wrong data inside the WriteRegister(); function.
It is works correct when I add some dummy data (that never used) before
const char const Data[] = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD";
The difference in listing are
Correct code
...
6 psect mediumconst,global,reloc=2,class=MEDIUMCONST,delta=1,noexec
...
2050 ;sx1212driver.c: 109: if (i < 0x14) WriteRegister(i, RegistersCfg);
2051 000766 0E14 movlw 20
2052 000768 600A cpfslt InitRFChip@i,c
2053 00076A D00D goto l2128
2054 00076C 0EDF movlw low _RegistersCfg
2055 00076E 240A addwf InitRFChip@i,w,c
2056 000770 6EF6 movwf tblptrl,c
2057 000772 6AF7 clrf tblptrh,c
2058 000774 0E3F movlw high _RegistersCfg
2059 000776 22F7 addwfc tblptrh,f,c
2060 000778 if 0 ;There are less than 3 active tblptr bytes
2061 000778 endif
2062 000778 0008 tblrd *
2063 00077A CFF5 F004 movff tablat,WriteRegister@value
2064 00077E 500A movf InitRFChip@i,w,c
2065 000780 EC65 F004 call _WriteRegister
2066 000784 D00C goto l2130
2067 000786 l2128:
Wrong code
...
6 psect smallconst,global,reloc=2,class=SMALLCONST,delta=1,noexec
...
2097 ;sx1212driver.c: 109: if (i < 0x14) WriteRegister(i, RegistersCfg);
2098 000BBC 0E14 movlw 20
2099 000BBE 600A cpfslt InitRFChip@i,c
2100 000BC0 D00D goto l2126
2101 000BC2 500A movf InitRFChip@i,w,c
2102 000BC4 0F01 addlw low _RegistersCfg
2103 000BC6 6E08 movwf ??_InitRFChip& (0+255),c
2104 000BC8 C008 FFF6 movff ??_InitRFChip,tblptrl
2111 000BCC 0008 tblrd *
2112 000BCE FFFF dw 65535 ; errata NOP
2113 000BD0 CFF5 F004 movff tablat,WriteRegister@value
2114 000BD4 500A movf InitRFChip@i,w,c
2115 000BD6 ECB7 F006 call _WriteRegister
2116 000BDA D00D goto l2128
2117 000BDC l2126:
2118 000BDC FFFF dw 65535 ; assembler added errata NOP
All errata, that I try to apply are not helps
I see even in the simulator wrong numbers when I trace the
WriteRegister(i, RegistersCfg);