C8051F,在xdata中放CRC的常量数组数据会丢失,modbus CRC表数....

2020-01-25 15:14发布

static const UCHAR aucCRCHi[] = {
    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
    0x00, 0xC1, 0x81,
    0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81,
    0x40, 0x01, 0xC0,
    0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1,
    0x81, 0x40, 0x01,
    0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01,
    0xC0, 0x80, 0x41,
    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
    0x00, 0xC1,
static const UCHAR aucCRCLo[] = {
    0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7,
    0x05, 0xC5, 0xC4,
    0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB,
    0x0B, 0xC9, 0x09,
    0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE,
    0xDF, 0x1F, 0xDD,
    0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2,
    0x12, 0x13, 0xD3,
    0x11, 0xD1, 0xD0, 0x10, 0xF0,
USHORT
usMBCRC16( UCHAR * pucFrame, USHORT usLen )
{
    UCHAR           ucCRCHi = 0xFF;
    UCHAR           ucCRCLo = 0xFF;
    int             iIndex;

    while( usLen-- )
    {
        iIndex = ucCRCLo ^ *( pucFrame++ );
        ucCRCLo = ucCRCHi ^ pgm_read_byte( &aucCRCHi[iIndex] );
        ucCRCHi = pgm_read_byte( &aucCRCLo[iIndex] );;
    }
    return ucCRCHi << 8 | ucCRCLo;
}

我用的C8051F041,把上面两个常量数组表放在的xdata存储区。

但我发现,程序运行一段时间后,发现CRC校验出错,最终确认是aucCRCHi这个数组中的内容无缘无故被改变了,这个时候全局中断是关的啊,整个程序就在这里读一下,又没写的地方,数据怎么会改变了呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
KongQuan
1楼-- · 2020-01-25 15:50
 精彩回答 2  元偷偷看……
yelang1124
2楼-- · 2020-01-25 21:16
KongQuan 发表于 2014-2-12 23:06
既然是表格,为何不放在code中?

请问C8051f 可以像51那样使用 uchar code aa[],这样的方式来把数组放在 flash中吗? 我这样定义了一下,发现还是在XDATA中,我用的large模式,我看C8051f 存在对FLASH的读写函数,难道必须用读写flash函数实现?
咖啡可乐
3楼-- · 2020-01-25 23:22
keil c51 对const处理还是放到ram里
放到rom里需要使用code  
mhw
4楼-- · 2020-01-25 23:53
有些模块如USB,会自动占用XDATA空间……你查找确认一下。
逐个模块屏蔽,直到只保留一个main和计算CRC的函数,反复计算……
lnskngdc
5楼-- · 2020-01-26 02:00
有没有溢出?有没有数组越界?
yelang1124
6楼-- · 2020-01-26 04:51
 精彩回答 2  元偷偷看……

一周热门 更多>