在调试dsp的时候遇到一件离奇的事情,在校验接收到的数据时,一半对一半错,并且校验程序是根据官方例程直接用的。
在debug过程中发现,unsigned long的变量显示的位数和预想的不太一样,是40位。果断将原程序改为unsigned int 数据完全正确了。
问题的原因就在于TMS320C6000系列的unsigned long是5个字节40位,和int的4字节32位不同;每次使用unsigned long进行强制转换时,最高的两位在00和FF之间变化,从而导致了校验会出现错误。
随后进一步进行了测试,发现sizeof(long)的结果是8,sizeof(int)的结果是4,sizeof(long long)的结果是8,和手册提供的long是40位不同,这里暂时还有疑问,以后再去深究。