问题:
我发现下面的函数不能生成正确的CRC16结果,调试发现,
虽然进行了强制类型转换unsigned char *code = (unsigned char *)data;
但是对code++;仍旧对指针移动的4字节。
是由于SHARC的架构支持的最小寻址单位是32bit??
还是CCES生成的代码问题?如果使用汇编做基址变址寻址是否可以寻址到字节呢?
unsigned short int CRC16_Table(void *data,unsigned char len)
{
unsigned char *code = (unsigned char *)data;
unsigned short int crc16 = 0xFFFF;
unsigned char crcregister;
unsigned char data0;
for( ; len > 0; len--)
{
crcregister = (crc16 >> 8) & 0x000000FF;
crc16 = (crc16 << 8) & 0x0000FF00;
data0 = (*(unsigned char *)code)&0x000000FF;
crc16 = (crc16 ^ crc16_tab[(crcregister ^ ((*code)&0x000000FF)) & 0x000000FF]) & 0x0000FFFF;
(unsigned char *)code++;
}
return(crc16);
}
答:
SHARC 支持的数据类型CHAR,SHORT INT, INT 都是32位的。
具体你可以参看SHARC 的compiler手册。