FreeRTOS常见知识点

本文详细介绍了FreeRTOS中的临界段代码保护,包括任务级和中断级的保护方法,涉及到taskENTER_CRITICAL(), taskEXIT_CRITICAL(), portENTER_CRITICAL(), portEXIT_CRITICAL()等API的使用,并探讨了在Cortex-M核开发板上的中断屏蔽机制。" 124619086,7490356,解决Docker停止服务但能通过docker.socket激活的问题,"['docker', '容器', 'linux']
摘要由CSDN通过智能技术生成

FreeRTOS常见知识点

1、临界段代码

       临界段代码也叫做临界区,是指那些必须完整运行,不能被打断的代码段,比如某些外设的初始化需要严格的时序,且不能被打断。FreeRTOS提供的解决方案是在进入临界区时关闭中断,在离开时恢复中断,这就是临界段代码保护。
       FreeRTOS提供了四个API来实现临界段代码保护:taskENTER_CRITICAL()、taskEXIT_CRITICAL()、taskENTER_CRITICAL_FROM_ISR()、taskEXIT_CRITICAL_FROM_ISR()。可以从名字上看出这四个API成两对,前两个是任务级的临界段代码保护,后两个是中断级的临界段代码保护。他们都在task.h中定义,且都是宏定义。

/**
 * task. h
 *
 * Macro to mark the start of a critical code region.  Preemptive context
 * switches cannot occur when in a critical region.
 *
 * NOTE: This may alter the stack (depending on the portable implementation)
 * so must be used with care!
 *
 * \defgroup taskENTER_CRITICAL taskENTER_CRITICAL
 * \ingroup SchedulerControl
 */
#define taskENTER_CRITICAL() portENTER_CRITICAL()
#define taskENTER_CRITICAL_FROM_ISR() portSET_INTERRUPT_MASK_FROM_ISR()

/**
 * task. h
 *
 * Macro to mark the end of a critical code region.  Preemptive context
 * switches cannot occur when in a critical region.
 *
 * NOTE: This may alter the stack (depending on the portable implementation)
 * so must be used with care!
 *
 * \defgroup taskEXIT_CRITICAL taskEXIT_CRITICAL
 * \ingroup SchedulerControl
 */
#define taskEXIT_CRITICAL() 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值