嵌入式操作系统FreeRTOS(中断管理)

一、中断管理

        1.延迟中断处理

        (1)采用二值信号量同步

        二值信号量可以在某个特殊的中断发生时,让任务解除阻塞,相当于让任务与中断同步。这样就可以让中断事件处理量大的工作在同步任务中完成,中断服务例程(ISR) 中只是快速处理少部份工作。如此,中断处理可以说是被”推迟(deferred)”到一个”处理 (handler)”任务。

        如果某个中断处理要求特别紧急,其延迟处理任务的优先级可以设为最高,以保证延迟处理任务随时都抢占系统中的其它任务。这样,延迟处理任务就成为其对应的ISR退出后第一个执行的任务,在时间上紧接着ISR执行,相当于所有的处理都在ISR中完成一样。

        vSemaphoreCreateBinary() API 函数

#define vSemaphoreCreateBinary( xSemaphore )        

        xSemaphore 创建的信号量

        xSemaphoreTake() API 函数

#define xSemaphoreTake( xSemaphore, xBlockTime )

        xSemaphore 获取得到的信号量

xTicksToWait FreeRTOS 阻塞超时时间。任务进入阻塞态以等待信号量有效的最长时间。如果xTicksToWait为0,则xSemaphoreTake()在信号量无效时会立即返回。

        “带走(Taking)”一个信号量意为”获取(Obtain)”或”接收(Receive)”信号量。只有当信号量有效的时候才可以被获取。在经典信号量术中,xSemaphoreTake()等同于一次P()操作。除互斥信号量(Recursive Semaphore,直译为递归信号量,按通常的说法译为互斥信号量)外,所有类型的信号量都可以调用函数xSemaphoreTake()来获取。

        但xSemaphoreTake()不能在中断服务例程中调用。

        xSemaphoreGiveFromISR() API 函数

        除互斥信号量外,FreeRTOS支持的其它类型的信号量都可以通过调用xSemaphoreGiveFromISR()给出。SemaphoreGiveFromISR()是xSemaphoreGive()的特殊形式,专门用于中断服务例程中。

        xSemaphoreGiveFromISR( xSemaphore, pxHigherPriorityTaskWoken )

        xSemaphoreCreateCounting() API 函数

        FreeRTOS 中所有种类的信号量句柄都由声明为xSemaphoreHandle 类型的变量 保存。 信号量在使用前必须先被创建。使用xSemaphoreCreateCounting() API 函数来创 建一个计数信号量。

        xSemaphoreCreateCounting( uxMaxCount, uxInitialCount )

        (2)在中断服务例程中使用队列

        xQueueSendToFrontFromISR(),xQueueSendToBackFromISR()与xQueueReceiveFromISR()分别是xQueueSendToFront(),xQueueSendToBack()与xQueueReceive()的中断安全版本,专门用于中断服务例程中。

        信号量用于事件通信。而队列不仅可以用于事件通信,还可以用来传递数据。

xQueueSendToFrontFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken )

xQueueSendToBackFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken )

 

 

  • 17
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值