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(),看是否有线程需要切换。

你可能感兴趣的:(RTOS,rt-thread)