參考 第四節
參考 第五節
參考 第六節
ucos-iii原始檔中的彙編**,全部選擇gnu目錄下的檔案,主要包括:
uc-cpu/arm-cortex-m3/gnu/cpu_a.s
uc-lib/ports/arm-cortex-m3/gnu/lib_mem_a.s
ucos-iii/ports/arm-cortex-m3/generic/gnu/os_cpu_a.s
將其新增到ucos-iii.mk中。
需要的修改的彙編檔案為ucos-iii/ports/arm-cortex-m3/generic/gnu/os_cpu_a.s
。
cortex-m3核心通過pendsv觸發任務排程,而所有的系統異常和中斷的向量入口位址已經在啟動檔案中做了定義,pendsv的入口位址名稱為pendsv_handler
,即該異常的處理函式名稱必須為pendsv_handler
,而ucos-iii的os_cpu_a.s
中將pendsv的彙編處理函式名稱定義為os_cpu_pendsvhandler
,在產生pendsv異常後,系統找不到啟動檔案為其定義的pendsv_handler
入口函式,osstart()執行後,系統會死在osstarthang
中,無法實現任務排程。必須將其名稱更改為pendsv_handler
,最好也將對應標頭檔案中的函式宣告也做同樣的修改。
其實,pendsv_handler
在stm32f10x_it.c
中已經定義了,需要將stm32f10x_it.c
中的實現遮蔽掉,防止編譯報錯。
為什麼不保留os_cpu_a.s
中的os_cpu_pendsvhandler
,去更改stm32f10x_it.c
中的pendsv_handler
的實現呢?因為任務排程必須要速度很快,最好用彙編實現。
不止是pendsv,systick的異常入口位址在啟動檔案中定義為systick_handler
,而ucos-iii的os_cpu_c.c
中將systick的處理函式名稱定義為os_cpu_systickhandler
,在產生systick異常後,系統找不到啟動檔案為其定義的systick_handler
入口函式。
這個更改有兩種方式:
(1) 保留os_cpu_c.c
中的os_cpu_systickhandler
函式,將其函式實現拷貝到stm32f10x_it.c
中的systick_handler
函式裡。
(2) 將os_cpu_c.c
中的os_cpu_systickhandler
函式更名為systick_handler
,將stm32f10x_it.c
中的systick_handler
函式遮蔽掉。
我習慣採用第一種方式。
針對第5點,還有一種是實現方式,就是把啟動檔案的兩個異常入口位址更改為:os_cpu_pendsvhandler
和os_cpu_systickhandler
。
STM32 STM32啟動方式
在復位時,會按照boot的狀態判斷進入哪種模式,boot腳不用保持長狀態。模式1 boot0拉低,使用使用者快閃儲存器區,這是最正常啟動的模式,即,在正常啟動時,boot0應該下拉為低電平 模式3 從sram執行,由於stm32的flash擦寫的次數是有限的,所以為了保護我們的flash,延長mcu...
STM32 STM32 GPIO模式理解
stm32的gpio的配置模式有好幾種,包括 模擬輸入 浮空輸入 上拉輸入 下拉輸入 開漏輸出 推挽輸出 復用開漏輸出 復用推挽輸出 如圖是gpio的結構原理圖 1.模擬輸入 從上圖我們可以看到,我覺得模擬輸入最重要的一點就是,他不經過輸入資料暫存器,所以我們無法通過讀取輸入資料暫存器來獲取模擬輸入...
STM32 STM32學習記錄3 按鍵輸入
1 io配置 上拉輸入模式 區別在於沒有輸入訊號的時候預設輸入高電平 因為 有弱上拉 下拉輸入模式 區別在於沒有輸入訊號的時候預設輸入低電平 因為有弱下拉 對於浮空輸入模式顧名思義也就 是輸入什麼訊號才是什麼訊號,對於浮空輸入要保證有明確的輸入訊號。2 stm32的gpio既可以設定為輸出也可以設定...