IAR STM32 除錯錯誤筆記

2021-10-10 09:26:21 字數 2352 閱讀 6606

本人是初學者,其內容是作為我的乙個學習筆記,有從網上查詢到的,也有一些自己的理解;我也沒有系統的學習過,只能是遇到了什麼就記錄什麼。各位大佬發現內容寫錯了的,請指點我一下,萬分感謝!

warning[25]: label』reset_handler』 is defined pubweak in a section implicitly declared root

將:section.text:code:reorder(1)

改:section .text:code:reorder:noroot(1)或者root(1)

因:7.1版本之前,section預設是noroot,但現在是root。noroot表示如果符號沒有被關聯的時候是被優化掉的,如果想不被優化則使用root

warning[pe223]: function 「assert_param」 declared implicitly

方法:在workspace中,對工程右鍵–>options–>c/c++ compiler -->preprocessor在defined symbols處新增:use_stdperiph_driver,

stm32f10x_hd(hd可以為md和ld,參考產品的容量,對應檔案startup_stm32f10x_xx.s,xx可以為hd,md和ld)

因:在檔案stm32f10x.h中看可以查詢到這三句程式

這是乙個條件編譯語句,只有定義了use_stdperiph_driver,才能包含stm32f10x_conf.**件。conf.**件就像乙個開關檔案,當它被包含進主函式就相當於可以使用標準外設驅動了,這是因為其中含有對外設驅動標頭檔案的編譯預處理命令(如圖)

這也就能解釋,有時候我們沒有將conf.**件包含進main函式,但在編譯之後還是可以呼叫它。我們也可以在conf.**件中將不需要的標頭檔案注釋掉。

如果main.c檔案中包含了conf.**件,但是沒有定義,在編譯之後還是會報錯。

然後我通過查詢"stm32f10x_hd",也是在stmf10x.**件中找到了類似的條件編譯,也是只有在定義了"stm32f10x_hd",其相關**段才能起作用。

當然"stm32f10x_md"和"stm32f10x_ld"也是如此。

warning[pe940]: missing return statement at end of non-void function

改:提示沒有返回值,一般是在函式末尾會新增乙個return 0;語句。

注:如果將return語句放在if條件語句或者for迴圈等語句中時,也會提示沒有返回值。而且呼叫的子函式中執行到了return語句,這時將值返回到原來呼叫這個子函式的**位置繼續執行,也就是說被呼叫的子函式的return語句之後的語句將不會被執行(可以參考break跳出迴圈)。

另:如果不想採用return語句進行值的傳輸,可以在定義指標引數,在函式執行的過程可以改變實參,以達到值的傳輸作用。

**在watch視窗檢視變數值位not in scope

原因:在函式內部定義的變數為區域性變數,用watch視窗觀察時,會出現not in scope

解決:將變數定義在函式外部,成為全域性變數,就能觀察到變數的值;應該是因為全域性變數是唯一的,而區域性變數只作用於函式內部,在不同的函式內都能重複定義,觀測時不清楚觀測哪個函式內的變數的值

asm(」 rpt #n || nop」)

作用:用來延時幾個時鐘週期

解釋:執行n+1次nop指令,占用n+1個指令週期。正常情況下占用n+1個時鐘週期;nop指令,第四條指令即「nop」指令,這是一條空操作指令,有調機的作用;asm允許你在你的**中直接插入組合語言指令

keil寫**時出現warning:implicit declaration of function 「***x「 is invalid in c99解決方法

解決:①#ifndef -> #ifdef;②標頭檔案未包含,比如說我用到了「adc.c」裡面的函式但是主函式的標頭檔案裡面沒有包含到「adc.h」(主要是標頭檔案問題);③fwlib裡面沒有包含到相關的庫函式,新增了就可以。

除錯程式,使用程式,不要使用優化編譯!!!!

除錯程式,使用程式,不要使用優化編譯!!!!

除錯程式,使用程式,不要使用優化編譯!!!!

linux 核心模組除錯錯誤

各位,我在編譯核心模組時有乙個錯誤調了很久也沒解決,請那位仁兄幫忙看看,666 static init int cbac init void 667 689 690 cbac requires early initialization in order to label 691 all proces...

Windows C 編譯除錯錯誤問題處理持續更新

1 sequence not ordered 沒有排序的序列,所以先排序 2 dll載入出錯 hinstance hinstlibrary loadlibrary sub.dll 改之後的格式 hinstance hinstlibrary loadlibrary text sub.dll 3 編譯無...

js 程式設計 除錯錯誤常用的方法

最近一段時間寫程式遇到了不少頁面設計的東西,自然少不了js。在做的過程中使用指令碼是總是遇到錯誤,開始時一頭霧水,不知道如何從jsp頁面中取定位js的錯誤位置,因為ie給定位的錯誤位置有時候很模糊,但是目前有沒有針對js語法除錯的編輯器。自己摸索了幾天,有兩個方法比較實用而且有效 1 alert 方...