打印

CC2530 算术计算溢出

[复制链接]
1206|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
seanwaye|  楼主 | 2015-8-5 16:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好:



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



比如:

void a(uint32 x)

{

uint32 b = 1;

b += x*(uint32)3000;

}


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



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



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



但是如果修改下图黄色区域中的配置后(把ROM mapped as data 选项改成RAM memory),就又能计算正确……(TI的配置是ROM mapped as data)

捕获.JPG (117.13 KB )

捕获.JPG

相关帖子

沙发
小葱521| | 2015-8-5 21:16 | 只看该作者
void a(uint32 x)

{

uint32 b = 1;

b += x*(uint32)3000;

}
改为:
void a(uint32 x)

{

uint32 b = 1;

b += (uint32)(x*3000);

}

使用特权

评论回复
板凳
dirtwillfly| | 2015-8-5 21:28 | 只看该作者
小葱521 发表于 2015-8-5 21:16
void a(uint32 x)

{

赞一个

使用特权

评论回复
地板
seanwaye|  楼主 | 2015-8-6 09:22 | 只看该作者
小葱521 发表于 2015-8-5 21:16
void a(uint32 x)

{

没有效果……我的那个例子在TI官方工程里面可以正常计算,我的工程里面不能正常计算,但是自己对比了配置文件和工程配置,没有什么不一样……

使用特权

评论回复
5
seanwaye|  楼主 | 2015-8-6 09:22 | 只看该作者

没效果……

使用特权

评论回复
6
小葱521| | 2015-8-6 09:32 | 只看该作者
没效果?
那这样,对常量可以进行强转吗?你试试吧。实在不行,对指针里面的数据进行强转。

使用特权

评论回复
7
seanwaye|  楼主 | 2015-8-6 17:03 | 只看该作者
小葱521 发表于 2015-8-6 09:32
没效果?
那这样,对常量可以进行强转吗?你试试吧。实在不行,对指针里面的数据进行强转。 ...

强转没用……而且是同样的代码在不同的项目工程里面计算的结果还不一样,在我的工程里面计算是错误的,在ti官方的工程里却是正确的……对比了工程配置是一样的呀……这代码也没有问题呀,怎么就会出这样诡异的问题……

使用特权

评论回复
8
小葱521| | 2015-8-6 22:11 | 只看该作者
拿到不清楚了啊!
是不是包含什么特殊的编译库了?
或者包含了armmath之类的库?

使用特权

评论回复
9
dirtwillfly| | 2015-8-7 08:14 | 只看该作者
seanwaye 发表于 2015-8-6 17:03
强转没用……而且是同样的代码在不同的项目工程里面计算的结果还不一样,在我的工程里面计算是错误的,在 ...

方便的话把两个工程传上来,大家看看

使用特权

评论回复
10
seanwaye|  楼主 | 2015-8-7 10:55 | 只看该作者
dirtwillfly 发表于 2015-8-7 08:14
方便的话把两个工程传上来,大家看看

附件是我的工程还有TI的官方例程,配置是一样的,只是工程内容不一样。

CC2530ColdChain_x - 副本.zip

1.35 MB

TIMAC-1_5_0.zip

4.68 MB

使用特权

评论回复
11
bargage| | 2015-8-7 12:42 | 只看该作者
不太明白呀

使用特权

评论回复
12
lefeng| | 2015-8-8 21:38 | 只看该作者
在我的工程里面计算是错误的,在ti官方的工程里却是正确的

会不会是内存不够啊

使用特权

评论回复
13
seanwaye|  楼主 | 2015-8-10 23:49 | 只看该作者
lefeng 发表于 2015-8-8 21:38
会不会是内存不够啊

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

使用特权

评论回复
14
lefeng| | 2015-8-23 15:43 | 只看该作者
楼主问题解决了吗,到底是什么原因

使用特权

评论回复
15
angerbird| | 2015-8-25 13:58 | 只看该作者
算法比较重要的,需要掌握。

使用特权

评论回复
16
zhangbo1985| | 2015-8-27 18:51 | 只看该作者
算数计算的溢出不外乎你的缓存空间不够的,加大就是的。

使用特权

评论回复
17
pmp| | 2015-8-27 22:05 | 只看该作者
可以么

使用特权

评论回复
18
dirtwillfly| | 2015-8-30 21:44 | 只看该作者
楼主问题解决了吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

135

帖子

1

粉丝