
知识点1! B ^1 C1 v8 M7 e. r : l9 P% `: x% D0 h /*< STM32G0xx uses 2 Bits for the Priority Levels */ #define __NVIC_PRIO_BITS 2 & [. a1 V7 f V5 \7 l 2 ]0 U& z8 [, {% R8 m5 k. J 所以M0+的中断优先级:0、1、2、3 知识点2 ( v% a7 L- b3 G! W6 {3 `# l) k 在Cortex-M0 上,FreeRTOS内核的临界区屏蔽了所有中断(除了NMI、HardFault、复位)。 知识点3 2 [- u# D5 p6 a* z( b Z FreeRTOS 任务优先级从0开始,作为最低的紧急 RTOS 任务优先级,而M0+ NVIC 使用0作为最高的紧急中断优先级。 0 C' W0 N% c+ b0 d, g- t. v/ Z0 h 但是任务优先级和中断优先级没有关联9 p; i6 E; P, n 知识点40 }5 C" I. j0 v. ^. T$ P: Q ] , t5 o" u1 ^' b' g! @8 D FreeRTOS 内核使用 2-3 个中断,具体取决于内核:SysTick用作时基,PendSV用于上下文切换,以及Cortex-M3/4/7 上的SVCall用于启动调度程序。2 n8 T2 ]( ]6 m- d SysTick 和 PendSV 配置为最低紧急程度:RTOS 以最低紧急程度运行。3 H t6 Y1 C7 M( W9 e7 @; b 知识点5 5 r7 O# v5 r* S: k 中断服务代码里必须使用中断安全的FromISR()变体 " C2 G& o9 j. W |