TMS320VC33字长问题

TMS320VC33是TI经典的浮点运算DSP,是从c3x中演变而来的,具有低功耗,大RAM(与c3x相比),在2000年的设计中使用较多,目前已经停产。就这么个片子把我搞惨了。

首先是原本的程序用C编程,使用File级的优化-03,优化级别最高了,对于代码的分析就有困难了,但原本的程序经过使用验证是没有问题的。现在的工作是需要加入一个CRC校验函数。首先通过VC2005编写一个可以在windows下正确运行的crc c程序,用cc编译后下载到片子上运行,从串口看数据crc校验错,程序有问题。开始怀疑编译器优化有问题,将此文件的优化去掉,还是不对。又怀疑是crc算法效率太低,采用bit移位法计算,改变crc算法,采用查表法,但是不对。

由于完整程序太大,不能在线仿真,所以调试起来很麻烦。最后没有办法,单单将crc函数挂上仿真器单独跑,结果crc错。这么就好找原因了,将每次crc查表的结果printf出来,很快就找到原因了。在程序中查表的位置号用unsigned char变量,crc结果用unsigned short,从中间结果看unsigned char型变量可以达到0×400值,unsigned short可以达到0×1287D0,这crc能校验对才有问题呢?printf sizeof 各种数据类型发现,在VC33中unsigned char、unsigned short、unsigned int、unsigned long int的长度都是1,位长度都是32bit,也就是说在VC33定义的变量类型只是个符号,与内存的分配无关,通常情况在cc下将float赋给int,连个warning都没有。在软件仿真和硬件仿真下都可以验证,这是编译器决定的。找到了原因,在每次运算完之后,根据理想的数据类型,取有效的位数即可(铵位与运算)。

另外VC33的地址空间也是与1字(int)对应的,就是一个地址对应一个存储空间,只是这个存储空间是32bit长。

最早使用ADI的BF系列芯片也没有这样的,到后期使用TI的C6000系列数据类型也是与存储空间严格对应的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值