测量任务切换开销,推荐使用硬件定时器(如DWT->CYCCNT)在任务切换点打时间戳,记录切换前后差值。具体做法:在vTaskSwitchContext中,于切换前读取CYCCNT,切换后(新任务恢复执行处)再读一次,多次采样取平均值。注意关闭中断避免干扰。优化临界区嵌套层级,核心是减少临界区持有时间,而非单纯减少嵌套数。建议:1) 用taskENTER_CRITICAL/taskEXIT_CRITICAL替代portENTER_CRITICAL,利用FreeRTOS的嵌套计数,但确保成对使用;2) 将临界区拆分为多个小段,仅在保护共享资源时进入;3) 使用互斥量(Mutex)替代长临界区,配合优先级继承减少阻塞;4) 利用队列或信号量传递数据,避免在临界区内做复杂操作。实测中,嵌套层级每增加一层,切换开销约增0.5-1us(Cortex-M4 @168MHz),优化后应控制在2层以内。
mcuku 阿沐 · 2026-08-27