2514|0

2015

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

有关MSP430F4xxx小RAM堆栈溢出问题 [复制链接]

         大学同学在线问我他最近搞项目开发时遇到的一个问题,跟他聊了聊。他最近在搞水表的计量开发,采用的平台是MSP430F4250(PS:很早之前去潍坊考察过一个做表的企业,发现搞表计量的大多都在用MSP430(貌似也有用STM8的),其中F4系列用的较多,一方面当然是考虑到功耗的问题,现在的表多是电池供电,一用就得用个一两年是必须的,还有就是F4系列自带段式液晶的驱动,并且支持差分的高分辨率A/D输入,这点蛮重要的,现在的高精度传感器貌似一色的差分输出),他遇到的问题是程序里某个变量经常性的会被意外改变,造成数据混乱,所以产品一直无法出货。
            看到上面的问题,有经验的人很快就会意识的问题的所在,无非就是两种可能,一个是该变量是全局的,而程序里有bug造成该变量在某个地方被错误的操作了,另外一种就是内存溢出了,变量地址重叠,造成数据混乱。个人感觉后一种的可能性较大,而事实也是如此,翻看MSP430F4250的数据手册诧异的发现它的RAM竟然只有可怜的256B(是Byte,你没有看错,有木有,赶上当年叱咤一时的51了,看来不是后面的数越大就代表片子配置越NB),这对拥有动则几KB、几十KB甚至上百KB RAM的ARM来说,的确有点大巫见小巫的感觉,RAM这么小倒的确不敢用了(咳咳,都是被惯的,呵呵),这要是在上面写程序还真得谨慎再谨慎啊。我一直觉着,在高端配置资源丰富的平台写出NB的算法实现NB的功能不算真正的NB,而在配置低端资源有限的平台能实现同样的功能那才叫NB,低端搞实现,高端搞优化嘛,哈哈。
            回到正题,最后经过各种尝试,解决了问题,主要原因是他使用了中断嵌套,这就造成了内存经常会只入栈不出栈,这对RAM空间紧缺堆栈大小有限的MCU来说是致命的,也就造成了前面遇到的数据混乱问题,所以这里提几点小RAM空间MCU写程序时需要注意的问题:
        (1)变量尽量使用局部变量;
        (2)不要在中断服务函数里进行数据处理等复杂操作,将其移到while(1)主线程里,中断服务程序里只是置位相应标志即可;
        (3)不要使用中断嵌套功能;
        (4)合理安排内存空间,尤其是堆栈区。

 
点赞 关注

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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