社区导航

 

搜索
查看: 1642|回复: 7

[求助] CC2530 常量计算出问题

[复制链接]

92

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2015-8-5 16:49 | 显示全部楼层 |阅读模式
大家好:



最近在做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


回复

使用道具 举报

2351

TA的帖子

3

TA的资源

五彩晶圆(中级)

Rank: 8Rank: 8

发表于 2015-8-5 17:51 | 显示全部楼层
上面选项的含义是常量和什么的位置,两种选择仅仅是一个在ROM另外一个在RAM中
8051 core的东西总是这么麻烦

你尝试写一个测试程序看看吧

uint32 MUL_CONST = 3000;

void a(uint32 x)

{

uint32 b = 1;

b += x*(uint32)MUL_CONST;

}


点评

用变量操作可以正确,用我那种方法不能正常计算……  详情 回复 发表于 2015-8-5 18:17
电工


回复

使用道具 举报

92

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-8-5 18:17 | 显示全部楼层
lyzhangxiang 发表于 2015-8-5 17:51
上面选项的含义是常量和什么的位置,两种选择仅仅是一个在ROM另外一个在RAM中
8051 core的东西总是这么麻 ...

用变量操作可以正确,用我那种方法不能正常计算……


回复

使用道具 举报

92

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-8-5 18:17 | 显示全部楼层
lyzhangxiang 发表于 2015-8-5 17:51
上面选项的含义是常量和什么的位置,两种选择仅仅是一个在ROM另外一个在RAM中
8051 core的东西总是这么麻 ...

用变量操作可以正确,用我那种方法不能正常计算……

点评

那个选项啊, 上面选项的含义是常量和什么的位置,两种选择仅仅是一个在ROM另外一个在RAM中 不要纠结别人的project怎么样 慢慢来,是什么原理就是什么原理,问题能定位,知道原因就好了 官方的project很有学问  详情 回复 发表于 2015-8-6 08:50


回复

使用道具 举报

2351

TA的帖子

3

TA的资源

五彩晶圆(中级)

Rank: 8Rank: 8

发表于 2015-8-6 08:50 | 显示全部楼层
seanwaye 发表于 2015-8-5 18:17
用变量操作可以正确,用我那种方法不能正常计算……

那个选项啊,
上面选项的含义是常量和什么的位置,两种选择仅仅是一个在ROM另外一个在RAM中

不要纠结别人的project怎么样
慢慢来,是什么原理就是什么原理,问题能定位,知道原因就好了
官方的project很有学问,得慢慢来,当然8051 core也蛮特别的,如果你之前玩别的core的话

点评

总感觉哪里不对劲,还不知道后面等工程功能扩增了还会遇到什么莫名其妙的问题,都不敢再继续了……很想知道为什么会这样啊!因为我看TI 用的rom空间是flash映射过去的,如果我现在把变量和常量都存在ram里面,不知道  详情 回复 发表于 2015-8-6 17:07
电工


回复

使用道具 举报

92

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-8-6 17:07 | 显示全部楼层
lyzhangxiang 发表于 2015-8-6 08:50
那个选项啊,
上面选项的含义是常量和什么的位置,两种选择仅仅是一个在ROM另外一个在RAM中

不要纠结 ...

总感觉哪里不对劲,还不知道后面等工程功能扩增了还会遇到什么莫名其妙的问题,都不敢再继续了……很想知道为什么会这样啊!因为我看TI 用的rom空间是flash映射过去的,如果我现在把变量和常量都存在ram里面,不知道我以后做串口升级或者程序数据处理多了会不会影响我的程序稳定性。


回复

使用道具 举报

2351

TA的帖子

3

TA的资源

五彩晶圆(中级)

Rank: 8Rank: 8

发表于 2015-8-6 17:15 | 显示全部楼层
两个工程的差异仅仅是那个常量位置的选项吗,这个你又不能肯定,怎么说呢
不好继续讨论了

很明显,我已经告诉你测试方法了,定义一个变量自然不会出现你说的错误了,因为避开了常量,
如果你想搞清楚为什么这样,只好再找两个工程的差异了
我手边上没有这种环境,仅仅是理论分析,需要提供一些信息才好

点评

有空把我的工程完全拷到官方里面试试,看看效果会如何  详情 回复 发表于 2015-8-6 18:31
电工


回复

使用道具 举报

92

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-8-6 18:31 | 显示全部楼层
lyzhangxiang 发表于 2015-8-6 17:15
两个工程的差异仅仅是那个常量位置的选项吗,这个你又不能肯定,怎么说呢
不好继续讨论了

很明显,我已 ...

有空把我的工程完全拷到官方里面试试,看看效果会如何


回复

使用道具 举报

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

关闭

站长推荐上一条 1/4 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-6-6 09:38 , Processed in 0.271673 second(s), 30 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表