MSP430F4xxx小RAM堆栈溢出

来源:本站
导读:目前正在解读《MSP430F4xxx小RAM堆栈溢出》的相关信息,《MSP430F4xxx小RAM堆栈溢出》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《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)合理安排内存空间,尤其是堆栈区。

。。。待补充

jicheng0622的博客~

提醒:《MSP430F4xxx小RAM堆栈溢出》最后刷新时间 2024-03-14 01:08:59,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《MSP430F4xxx小RAM堆栈溢出》该内容的真实性请自行鉴别。