mokongking

移植freeRTOS的小bug

FreeRTOS 跑不起来

现象: 调度器启动后进不了任务,或一跑就卡死/断言。

常见原因:

  1. 启动前 SysTick 优先级太高,抢在 SVC 前面,第一个任务切不进去。,应该设置最低的中断
  2. 外设中断里调了 FreeRTOS 的 FromISR,但中断优先级太高,触发断言停住。

记住: 内核用的中断要最“钝”;能调 FreeRTOS API 的中断不能太“尖”。

中断建议
SVC
别改,默认 0
SysTick / PendSV
15(最低)
USART 等 FromISR
≥ 5
同级 15 = 互不抢占,轮流跑;FreeRTOS 用「先 SysTick 记账,再 PendSV 换人」配合工作。


延时慢了整整 8 倍

现象: 写了延时 200ms,示波器量到约 1.6s(刚好 ×8)。握手、HAL_Delay 也会一起变慢。

原因: 多定义了 configSYSTICK_CLOCK_HZ。FreeRTOS 把 SysTick 当成“慢档(主频/8)”来跑,间隔却按“全速”去设,于是每个 tick 实际约 8ms。因为systick有两个挡位显示声明在FreeRTOS中就直接进入第二个挡位

处理: 删掉这行定义,让 SysTick 跟 CPU 同频。灯闪恢复约 200ms,时间就对了。

posted on 2026-09-11 20:22  虎啸岳林  阅读(33)  评论(0)    收藏  举报

导航