嵌入式代碼穩定/抗干擾性增強措施

 

1.瞭解自己程序大概佔用的堆棧大小,設置足夠的堆棧餘量,防止堆棧溢出

2.儘量少用大數組,必要時可以將一個大數組分成幾個

3.對於關鍵的變量用 Volatile 關鍵字修飾,尤其是會在多個線程/中斷中調用的變量,否則你很可能取到錯誤的變量值

4.對於在多個線程/中斷中都調用了的函數,最好保證其不會被同時調用(即該函數在一個線程被執行時被另外一個高優先級線程/中斷打斷,進入該高優先級線程後又調用了該函數),若無法保證則可以命名數個相同功能的函數,供不同的線程使用;若是flash空間有限,則請保證不要在該函數內給全局/靜態變量賦值。對於C51,這類函數需要用 reentrant 關鍵字申明其可以重入。

5.不要在函數中定義大數組(即局部變量),若使用請確保RAM和棧空間足夠,並在使用完畢後主動釋放內存

6.可以設置成同優先級的線程/中斷都設置成同優先級(不可以相互打斷),個別線程/中斷用高優先級(如串口接收),這樣就儘可能降低了函數重入和變量同時使用的概率。

7.實時保存程序運行狀態,多保存些運行狀態參數,用以在復位之後恢復原來狀態,使得復位了也跟沒復位一樣。

8.代碼陷阱,這個就比較高端了,是指在程序的數據區、未用的flash空間等處放置跳轉語句,跳轉的目的地址是能夠恢復程序正常運行的代碼地址處,這樣當程序跑飛PC指針亂指的時候就有一定概率指到跳轉語句處,從而恢復正常運行。操作起來有難度。

9.未完待續...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章