欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
MSP430F4xxx小RAM堆棧溢出
[打印本頁]
作者:
xuwei
時間:
2015-6-24 17:01
標題:
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)合理安排內存空間,尤其是堆棧區。
。。。待補充
好了,不多說了,最近馬上離校,雜事很多,耽誤了不少進度,期待下次再聊,未完待續~
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1