rt_thread+STM32工作筆記

1.rt_thread_delay 爲什麼和ostick沒有關係

時鐘配置錯誤,程序定義了#define RT_USING_USER_MAIN
RT_THREAD 在進入自己的main.c之前 先進入components.c裏面的main,在這個main(components.c中)函數會啓動操作系統,獲取系統時鐘,但是
當前時鐘還沒初始化,所以默認內部的8M,因此把要在 rt_hw_board_init()裏面先初始化系統時鐘。

2.GNSS任務申請了大臨時變量(超過任務堆棧),但是系統沒有奔潰,申請變量的函數是在中斷中執行的,但是也超過了 系統棧還是沒有奔潰

答:一般CPU的棧增長方向是向下的, 堆的生長方向是向上的。 內存= 靜態存儲區+棧區+堆區。申請的大的變量在中斷中 用的是系統堆棧,系統堆棧雖然比較小,沒有奔潰的原因是,用到別的地方的堆棧,暫時沒有被別的任務訪問到 因此沒有問題,當被佔用的任務需要的堆棧變大後,也就是說不繫統堆棧溢出使用此部分的時候,系統會衝突奔潰。需要把系統堆棧調大暫時定爲5k

3.用HAL庫+rt_thread,串口數據量大的時候出現串口沒有響應的想象。

HAL庫中 #define USE_RTOS 0 加了鎖。
答:修改 #define USE_RTOS 1
定義 #define __HAL_LOCK(HANDLE) __NOP()
#define __HAL_UNLOCK(HANDLE) __NOP()
裸機會加 __HAL_LOCK(HANDLE) 會導致串口溢出錯誤
屏蔽 #error “USE_RTOS should be 0 in the current HAL release”

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