RT-Thread 應用篇

1. 問題:串口亂碼,或者延時時間不準確

解決:查看外部晶振配置是否正確,文件stm32f4xx.hHSE_VALUE要與實際的晶振大小相同。

#define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */

同時,system_stm32f4xx.c文件中PLL_M頁要修改爲對應值。

#define PLL_M      8

涉及公式:

PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N
SYSCLK = PLL_VCO / PLL_P

2. 中斷鎖與調度器鎖

  • rt_hw_interrupt_disable() 稱爲 中斷鎖,實現主要是 CPSID I 指令,所以上鎖後系統不再響應其他中斷。
  • rt_exit_critical() 稱爲 調度器鎖,實現主要是 rt_scheduler_lock_nest++,在系統調度函數 rt_schedule() 中會判斷 rt_scheduler_lock_nest 是否爲 0,如果不爲 0 則不進行線程切換,所以調度器上鎖後只是不進行線程調度,還是會響應其他中斷。在解鎖函數 rt_exit_critical() 中會調用 rt_schedule(),看是否有線程需要切換。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章