1685|0

2015

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

DSP中unsigned long的发现以及对各种变量类型的总结 [复制链接]

在调试DSP上的进程通信时,出现了一个比较怪诞的现象,我把原来一个DWORD,也就是unsigned int型的变量改成unsigned long以后,程序出错了,常识告诉我们,32位机器上long和int都是4个字节,DEBUG以后我发现,那个unsigned long变量居然占了8个字节,收方int型变量和发方long型变量,在字节数不同的情况下相减,结果出现了错误。我比较好奇,于是做了一个实验,将工程里添加了几个打印信息:
 printf("sizeof short is %d\n",sizeof(short));
 printf("sizeof int is %d\n",sizeof(int));
 printf("sizeof long is %d\n",sizeof(signed long)); 
 printf("sizeof unsigned long is %d\n",sizeof(unsigned long));
 printf("sizeof long long is %d\n",sizeof(long long));
然后load到仿真器运行,打印的结果如下:
sizeof short is 2
sizeof int is 4
sizeof long is 8
sizeof unsigned long is 8
sizeof long long is 8
所以得出的结论是:ti开发平台上,long和int是不一样的!切记切记啊!
 
再补充一点,在一个指针被申明为某一类型时,它在被强制转换后为一次性用品,下次使用还需再次强制转换,系统没有提供记忆功能,这样也好,免得转来转去,不知道转成什么类型了。如:
int ALM_Pack_Commands(char  * buf)
 CmdType= *(ICOMCmd *)buf;
 CameraControlProtocol((IpcReport *)(buf + (sizeof(ICOMCmd))));
ICOMCmd 为四个字节,但是如果将第三句话写成
CameraControlProtocol((IpcReport *)(buf + 1)));
就错了,因为buf虽然做过一次强制转换,但转换完后系统仍然认为buf为char *型。写为buf + 4可以的。所以以后要小心了。

点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表