从PC上向ADI DSP平台移植时,经常会出现一些问题,其中很多问题和字节对齐有关。这类问题往往在PC上测试成功,在DSP上也能成功编译链接,但是运行却会出错,导致这类问题很难查出并解决。
问题成因:
我使用的是ADI的Blackfin系列DSP,不知道其他平台是否有这个规定。就是char型数据类型地址可以任意,short型数据类型地址必须被2整除,int型数据类型地址必须被4整除,依此类推,即基础数据类型的地址必须被这种数据类型的大小整除。
而一般PC上是没有这个规定的。于是问题来了,比如下面的取数据函数,在PC上没有问题,在ADI DSP上运行肯定会出错的。
| void get_data(unsigned char *inbuf) { char data1; short data2; int data3; data2 = *(((short *)inbuf)++); //1 |

在从PC移植到ADI DSP平台时,由于字节对齐的差异,可能导致程序运行错误。例如,short型数据地址必须为偶数,int型为4的倍数。解决方法包括分解长数据类型为char读取或使用结构体进行对齐转换。建议尝试不同方法,根据实际效果选择最佳方案。

99

被折叠的 条评论
为什么被折叠?



