知识点1 ( P; @2 @/ m2 ?: ?% S: C /*< STM32G0xx uses 2 Bits for the Priority Levels */ #define __NVIC_PRIO_BITS 2 2 N% j! _) f) w ! t( Y3 U/ v6 t* I/ t6 c 所以M0+的中断优先级:0、1、2、3! Z' v3 ?! {" t! } 知识点2 在Cortex-M0 上,FreeRTOS内核的临界区屏蔽了所有中断(除了NMI、HardFault、复位)。6 V8 _4 [7 f4 S 知识点34 K& l; t- K: K* e FreeRTOS 任务优先级从0开始,作为最低的紧急 RTOS 任务优先级,而M0+ NVIC 使用0作为最高的紧急中断优先级。 * y3 ]5 e: \. B( } 但是任务优先级和中断优先级没有关联, g( T& d1 t! B2 i6 C0 N8 x 知识点4% I1 y0 d" G' O FreeRTOS 内核使用 2-3 个中断,具体取决于内核:SysTick用作时基,PendSV用于上下文切换,以及Cortex-M3/4/7 上的SVCall用于启动调度程序。 SysTick 和 PendSV 配置为最低紧急程度:RTOS 以最低紧急程度运行。( T- h0 I8 ^% t" P* x* V8 U) z 知识点5: p6 `0 l! T: N ~ D4 D5 P1 g7 v: `/ l 中断服务代码里必须使用中断安全的FromISR()变体 |