《龙虾OpenClaw系列:从嵌入式裸机到芯片级系统深度实战60课》024、RTOS移植基础——FreeRTOS在OpenClaw上的适配
OpenClaw系列024:RTOS移植基础——FreeRTOS在OpenClaw上的适配
一、从一次诡异的“死机”说起
凌晨两点,示波器探头戳在OpenClaw的GPIO引脚上,逻辑分析仪抓到的波形像心电图骤停——系统在运行72小时后突然“假死”。串口最后一行打印是“Task_A yield”,之后便再无动静。复位后一切正常,但72小时后再次复现。这不是硬件看门狗能解决的,因为MCU还在跑,只是所有用户任务都停在了某个临界区里。
排查三天,最终定位到FreeRTOS的xPortSysTickHandler中一个被忽略的优先级反转问题。这个坑,源于我对OpenClaw中断控制器(NVIC)的优先级分组理解不够透彻。今天这篇笔记,就从这次血泪教训开始,把FreeRTOS在OpenClaw上的移植关键点掰开揉碎。
二、OpenClaw的“脾气”:中断控制器与FreeRTOS的第一次握手
OpenClaw使用的是ARM Cortex-M4F内核,NVIC支持8级抢占优先级(3位抢占位,1位子优先级位)。FreeRTOS要求configMAX_SYSCALL_INTERRUPT_PRIORITY必须低于所有使用FromISR系列API的中断优先级——这句话背下来没用,得理解为什么。
我踩的第一个坑:把SysTick中断优先级设成了0(最高)。结果在xPortSysTickHandler里
