CC2530 算术计算溢出

2019-07-25 16:44发布

大家好:



最近在做CC2530裸机开发,没有涉及协议栈,只是当做普通的射频芯片来用,但是配置文件(xcl后缀的文件)用的是TI 的配置文件,这些配置文件主要是一些Flash空间的分配,另外工程的配置和TI的TI_MAC协议栈配置是一样的,现在发现一个很诡异的问题:



比如:

void a(uint32 x)

{

uint32 b = 1;

b += x*(uint32)3000;

}


当调用这个函数 a(1)的时候,计算值正确的情况应该是3001,但是CC2530计算的却是一个很大的数,明显的是计算溢出……这种情况怎么会溢出呢?



但是在TI的官方协议栈里面却又是正常的…… 详细对比了两个工程的配置,没什么区别……



希望遇到这样问题的朋友能给个解决方法!



但是如果修改下图黄 {MOD}区域中的配置后(把ROM mapped as data 选项改成RAM memory),就又能计算正确……(TI的配置是ROM mapped as data)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
小葱521
1楼-- · 2019-07-26 17:10
拿到不清楚了啊!
是不是包含什么特殊的编译库了?
或者包含了armmath之类的库?
dirtwillfly
2楼-- · 2019-07-26 22:26
seanwaye 发表于 2015-8-6 17:03
强转没用……而且是同样的代码在不同的项目工程里面计算的结果还不一样,在我的工程里面计算是错误的,在 ...

方便的话把两个工程传上来,大家看看
seanwaye
3楼-- · 2019-07-27 01:14
dirtwillfly 发表于 2015-8-7 08:14
方便的话把两个工程传上来,大家看看

附件是我的工程还有TI的官方例程,配置是一样的,只是工程内容不一样。
bargage
4楼-- · 2019-07-27 04:00
不太明白呀
lefeng
5楼-- · 2019-07-27 06:41
 精彩回答 2  元偷偷看……
seanwaye
6楼-- · 2019-07-27 09:48
lefeng 发表于 2015-8-8 21:38
会不会是内存不够啊

没报错呀,debug也没报错……警告都没有……程序也没死,一切都很正常啊。

一周热门 更多>