嵌入式開發 程式跑飛原因總結

2021-10-21 14:47:32 字數 1135 閱讀 9654

在嵌入式軟體開發中,程式跑飛是乙個比較棘手的問題。為什麼說棘手,那是因為當程式跑飛時,往往沒有任何錯誤資訊報出來,log停止的地方通常也不是出現問題的地方,因此這讓我們很難定位問題。

基於以上原因,我將嵌入式開發中一些常見的程式跑飛原因以及相關解決方案記錄在這篇部落格下。

1. 棧溢位

說明:這可能是最常見的問題了,往往是因為我們定義了較大的區域性變數,使得棧空間不夠了。

解決方案:使用static關鍵字或者將區域性變數定義為全域性變數。

2. 訪問了不該訪問的記憶體

說明:這個問題也是比較常見的,通常由於指標使用不當造成的。

解決方案:這個我也沒啥辦法,只能仔細檢查一下**中的指標了。

3. 程式執行時,將記憶體中重要的資料覆蓋了

說明:這個問題遇到的比較少。如果往錯誤的位址寫了資料,導致重要資料被覆蓋,程式自然跑不起來了。

解決方案:這個一般也與指標使用不當有關,還是好好檢查指標的使用吧。

4. **中有死迴圈

說明:這屬於筆誤型的錯誤,例如以下**。

for(i = 0; i < j; j++)

這樣的語句編譯不會報錯,但程式會一直在這迴圈。

解決方案:這種錯誤一旦發生是很難發現的,我只能建議寫**時多注意一些。

5. 編譯問題

說明:一般來說,這個問題發生的場景為,程式設計師小a終於把程式跑飛的問題解決掉了,妥善起見,他把修改的**儲存了。小a在後續開發中又遇到了一些問題,**被他改的不像樣。於是,他將**回退到以前的版本編了一把,編完後他發覺這個版本的程式跑飛問題還沒有解決。小a想,還好我有備份,於是他把自己的備份檔案替換了原檔案,重新編譯,結果,程式又跑飛了。這是為什麼呢?難道小a之前沒有把程式跑飛問題解決掉嗎?

其實不是的,這個問題是由編譯器的「增量編譯」導致的。我們注意到小a把**回退後先編了一把,然後才替換的檔案,這個時候,如果小a的備份檔案中有一些檔案的日期比被替換檔案的早,那麼再次編譯時,編譯器就不會編譯它們。

解決方案:修改一下備份檔案的注釋什麼的,更新一下檔案日期,然後再次編譯。

嵌入式開發

經常會有人說嵌入式開發,嵌入式開發千差萬別,我總體上分為4個等級 微電子開發 rtos開發 指令碼開發 富應用開發 這一類產品行為比較固定,比如說電視遙控器,遙控汽車,電飯煲,恆溫燒水壺,溫濕度感測器,智慧型門鎖等。這些裝置行為都比較簡單,通過按鈕可以設定系統功能和行為。量不大,經常會選用flash...

初識嵌入式 嵌入式開發概述

1 什麼是嵌入式技術 1 嵌入式軟體與非嵌入式軟體的區別?答 嵌入式軟體是結合作業系統之上做的開發 非嵌入式軟體是做的裸機開發。裸機 沒有作業系統 2 嵌入式開發與微控制器開發的區別?答 區別 是否有作業系統。拓展 答 優點 解決了軟體的移植性 解決了開發人員的能力的劃分問題。提供了豐富的網路協議 ...

嵌入式應用程式開發

嵌入式應用程式開發 實驗目的 1.編寫程式,用交叉工具鏈編譯連線 實驗原理 1.嵌入式應用程式的開發一般都在宿主機平台上進行,利用交叉編譯器編譯,生成可以在目標平台上執行的可執行 本實驗使用的交叉編譯器是arm linux gcc 實驗內容 l include include int main l2...