• 鸟瞰“中国围屋之乡” 造型独特如城堡 2019-04-16
  • 先想好如何处理可能的危害,要有经济“卫国战争”的准备,要将困难多设想一点,想到了就不会很被动。 2019-04-16
  • 实现中华民族伟大复兴是近代以来中华民族最伟大的梦想(认真学习宣传贯彻党的十九大精神) 2019-04-13
  • 报道新闻记录历史 70载人民日报见证中国发展大事 2019-04-13
  • 新华网评:凝聚打赢脱贫攻坚战的强大合力 2019-04-02
  • 打造历史文化名城 “安宁记忆”项目启幕 2019-04-02
  • 打开设计图纸的说明。 2019-03-30
  • 一语惊坛(5月15日):川航备降,是临危不惧的中国智慧的中国奇迹。 2019-03-25
  • 社长手记造车奇人尹同跃并非只为奇瑞而来 2019-03-17
  • 三代航天人做客人民网 共话中国航天创建60年 2019-03-01
  • 回复@寻找失落的真理:跟你的铁环玩去!咱真的没兴趣碾压你也。 2019-03-01
  • 有人踢球踢进了手术室 有人看球看到脖子扳牢了 2019-02-23
  • 朋友圈买过这些东西吗?原来都是不靠谱的! 2019-02-05
  • 为宣传奇绝秀美旅游风光 鹰潭市委书记自拍上央视(图) 2019-02-05
  • 统一监管缺位容易出现监管套利 2018-11-22
  • 12选5万能7码复式号码:社区导航

     

    广东十一选五开奖图

    搜索
    查看: 728|回复: 7
    打印 上一主题 下一主题

    [求助] 求教一下MSP430的RAM分配问题。

    [复制链接]

    广东十一选五开奖图 www.guu6.com 17

    TA的帖子

    0

    TA的资源

    一粒金砂(中级)

    Rank: 2

    跳转到指定楼层
    楼主
    发表于 2019-3-16 09:11 | 只看该作者 |倒序浏览 |阅读模式
      单片机:msp430fr2111    编译器:CCS v8.3.0      因为我最近在写一个关于msp430fr2111单片机的程序,写着写着,系统就提示我爆了FRAM内存。最后检查出来是因为一串有小数的计算公式捣的鬼:get = get/65535.0*4.096*10000;  可能因为是小数占的位数太多了,就提示了爆内存。之后我想了其他方式解决??墒窍低骋恢被嵩谖艺庖恍兴惴ㄌ崾疽恍行畔ⅲ簉ecommend moving them to RAM during run time or not using as there are processing/power intensive.


      因为以前都是单纯地写程序,没考虑过内存的分配问题。求大佬指点一下。



    74

    TA的帖子

    0

    TA的资源

    宇宙尘埃

    沙发
    发表于 2019-3-16 09:48 | 只看该作者
    跟着等答案!


    5584

    TA的帖子

    207

    TA的资源

    版主

    Rank: 6Rank: 6

    板凳
    发表于 2019-3-16 11:30 | 只看该作者
    浮点数运算比较消耗cpu和内存
    所以说,能用整数的尽量别用小数,如果要求精度不高,可以把小数部分作为整数的末几位。
    另外就是考虑优化你的公式了,因为我对你的需求不了解,所以也不能假定太多,
    第一个疑问,明显是整数的数值为啥显式加.0作为浮点数?
    第二个,4.096*10000明显是个整数,为啥不直接写40960
    第三个,get是什么类型?如果是浮点数,后面的数值为啥显式写成浮点数;如果是整数,那么为什么不写成统一的整数运算?
    我觉得get = get/65535.0*4.096*10000;经过优化后至少可以写成这样:
    get = get * (40960L) / 65535;
    EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,虽然在群里买不到板子,但是可以学会开车;虽然学不到技术,但是可以学会开车;商家勿入!加群暗号:喵


    17

    TA的帖子

    0

    TA的资源

    一粒金砂(中级)

    Rank: 2

    4
     楼主| 发表于 2019-3-16 15:45 | 只看该作者
    本帖最后由 yg776 于 2019-3-16 16:02 编辑

    谢谢你回答我的问题。我上面的问题的确问得很不好,没把问题写清楚。且变量的类型都没给出来。
    1.这个算式是16位ADC的处理程序。所以get是unsigned int型,但是因为尽量不用小数,所以我改成了unsigned long,但是仔细想想430是16位的,我还是有点担心直接用32位的unsigned long。
    2.要把小数再乘以10000是因为我发现我使用的ccs在我使用sprintf(val,"%d",get);的时候,对于get的类型。编译器只让我使用%d,我如果换成%u或者%f它都会报错。如果不报错我就直接输出不会再去乘以10000了。

    对于会超出FRAM的问题,我得出的结论是我芯片选型的错误。这程序是老师给的一个课题里面的。我随便选了一个430单片机。结果这款单片机只要一些浮点数的计算都会爆内存。但是我除了这个ADC的处理程序,后序还有开2次方根。所以这款单片机满足不了我的需求。我已经把单片机换成了F5529。

    再次感谢你能回答我的问题
    如果可以的话,大神能不能分享一些关于430单片机在CCS编译器下的内存分配的经验。以前一直写程序,但是我发现解决内存分配也是非常重要的。

    点评

    你的所谓“内存分配"问题比较笼统和难以回答。这个是编程常规问题,与编译器也并无大的关联。 单片机的存储空间大概就分为两类,ROM(FLASH)类和RAM类,FRAM虽然比较特殊根据配置既可做ROM也可以做RAM,但是不影响  详情 回复 发表于 2019-3-16 18:46


    5584

    TA的帖子

    207

    TA的资源

    版主

    Rank: 6Rank: 6

    5
    发表于 2019-3-16 18:46 | 只看该作者
    yg776 发表于 2019-3-16 15:45
    谢谢你回答我的问题。我上面的问题的确问得很不好,没把问题写清楚。且变量的类型都没给出来。
    1.这个算式 ...

    你的所谓“内存分配"问题比较笼统和难以回答。这个是编程常规问题,与编译器也并无大的关联。
    单片机的存储空间大概就分为两类,ROM(FLASH)类和RAM类,FRAM虽然比较特殊根据配置既可做ROM也可以做RAM,但是不影响讨论。
    ROM用来存放指令、常量数据、变量的初始化值等内容。
    RAM用来存放变量,函数调用时寄存器内容的临时保存。变量还分为全局变量和静态变量,一直存在于RAM中,自动变量在函数调用时分配,函数结束后就释放了。手动申请内存malloc一般在小容量单片机中很少用。

    现在你的问题是,貌似ROM和RAM有点分不清,在单片机领域一般内存就是指RAM,但是你的描述,应该是ROM不够的问题。另外
    recommend moving them to RAM during run time or not using as there are processing/power intensive.
    这句提示,其实跟内存够不够并无关系,这个只是低功耗一些建议。
    所以你要清晰脑海里的内存是指什么,通常C语言的语句和字面量是占用ROM的,变量占用RAM,但是变量的非0初始化值也会存放在ROM中。函数的嵌套调用会消耗RAM,但是函数调用消耗内存的问题在编译时一般检测不出来,在程序运行的时候才能出现。调用库函数肯定会占用ROM,同时浮点数的操作,对于单片机来讲,会比占用存储空间,因此小容量单片机尽量不要有浮点数的运算和(尤其)打印(printf类函数的%f格式符)。
    EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,虽然在群里买不到板子,但是可以学会开车;虽然学不到技术,但是可以学会开车;商家勿入!加群暗号:喵


    17

    TA的帖子

    0

    TA的资源

    一粒金砂(中级)

    Rank: 2

    6
     楼主| 发表于 2019-3-17 15:09 | 只看该作者
    谢谢你的回答!


    7488

    TA的帖子

    4951

    TA的资源

    博客管理员

    Rank: 6Rank: 6

    资源大师勋章

    7
    发表于 2019-3-18 10:29 | 只看该作者
    前面有朋友已经分析的很好了。
    这里我有一点小看法。第一,运算的时候要考虑数据长度,在本问题中,根据这个算式,long型会不会长度不够,按照极限值来算的话,get/65535.0的最大长度可能是长整型,而4.096*10000结果要大于整形。如果这样的话,长整型不一定够用。
    第二,单片机C语言中关于乘除法,如果能用移位实现,最好用移位算法,比如4.096*10000.可以看做是4096*10,而4096可以用2的12次方代替,运算的时候,直接左移12位就可以了,
    第三、我看了fr2111的ROM和RAM,感觉应该够用(当然,不知道你的具体项目,我只能估计),所以,你换成大的单片机虽然问题不再出现,但是问题没有从根本解决。


    11

    TA的帖子

    0

    TA的资源

    一粒金砂(初级)

    Rank: 1

    8
    发表于 2019-3-19 11:10 | 只看该作者
    最简单的通用办法,打电话为TI中国区各地办事处的技术支持?。?!
    好书分享;;;


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

    本版积分规则

    • 论坛活动 E手掌握

      扫码关注
      EEWORLD 官方微信

    • EE福利  唾手可得

      扫码关注
      EE福利 唾手可得

    Archiver|手机版|小黑屋|广东十一选五开奖图 ( 京ICP证 060456 )

    GMT+8, 2019-4-19 01:22 , Processed in 0.241029 second(s), 17 queries , Gzip On, MemCache On.

    快速回复 广东十一选五开奖图 返回列表
  • 鸟瞰“中国围屋之乡” 造型独特如城堡 2019-04-16
  • 先想好如何处理可能的危害,要有经济“卫国战争”的准备,要将困难多设想一点,想到了就不会很被动。 2019-04-16
  • 实现中华民族伟大复兴是近代以来中华民族最伟大的梦想(认真学习宣传贯彻党的十九大精神) 2019-04-13
  • 报道新闻记录历史 70载人民日报见证中国发展大事 2019-04-13
  • 新华网评:凝聚打赢脱贫攻坚战的强大合力 2019-04-02
  • 打造历史文化名城 “安宁记忆”项目启幕 2019-04-02
  • 打开设计图纸的说明。 2019-03-30
  • 一语惊坛(5月15日):川航备降,是临危不惧的中国智慧的中国奇迹。 2019-03-25
  • 社长手记造车奇人尹同跃并非只为奇瑞而来 2019-03-17
  • 三代航天人做客人民网 共话中国航天创建60年 2019-03-01
  • 回复@寻找失落的真理:跟你的铁环玩去!咱真的没兴趣碾压你也。 2019-03-01
  • 有人踢球踢进了手术室 有人看球看到脖子扳牢了 2019-02-23
  • 朋友圈买过这些东西吗?原来都是不靠谱的! 2019-02-05
  • 为宣传奇绝秀美旅游风光 鹰潭市委书记自拍上央视(图) 2019-02-05
  • 统一监管缺位容易出现监管套利 2018-11-22