»
(008) CubeIDE Implementation of USB Peripherals*
(018) C99 pointer*
(019) C99 With only value assignment*
(022) POSIX pthread multi-threads mutex*
(023) POSIX pthread multi-threads programming*
(027) C99 time and wait*
(028) High-precision calculation with GMP*
(029) Web Service Lib*
(030) International Components for Unicode (ICU)*
(031) Performance of C is higher than C++, because...*
🕹️(003) FreeRTOS critical code zone
taskENTER_CRITICAL();
...//代码临界区
taskEXIT_CRITICAL();
当任务进入临界区时,代码的执行不会被中断打断。
FreeRTOS 通过禁用中断或设置中断优先级屏蔽来确保进入临界区的代码不可被中断:
taskENTER_CRITICAL()的中断优先级等于最大系统调用的中断优先级(configMAX_SYSCALL_INTERRUPT_PRIORITY),FreeRTOS通常会禁用所有高于configMAX_SYSCALL_INTERRUPT_PRIORITY的中断。
也就是:进入taskENTER_CRITICAL()后,所有高于configMAX_SYSCALL_INTERRUPT_PRIORITY的中断都会被屏蔽。
taskENTER_CRITICAL()函数挡住的中断只会被挂起或延迟,一旦退出临界区,先前被延迟的中断将按照其优先级顺序被处理。
注意:taskENTER_CRITICAL()会延迟低优先级的中断的请求过程,taskENTER_CRITICAL()