FreeRTOS用二进制信号量可以减少判断语句的资源消耗

电子说

1.3w人已加入

描述

信号量另一种通常的用法是用于任务间的同步机制。

二进制信号量,可以想成是一个布尔类型,只有0 和 1。

两个任务公用一个信号量,一个任务用于产生信号量,另一个任务使用此信号量。

比如:按键按下亮灯,再按一次灯灭。按键任务中按键按下时,将信号量置1。

亮灯任务中将信号量置0。 用二进制信号量可以减少判断语句的资源消耗。

API函数:

SemaphoreHandle_t xHandler; 创建二进制Handler xHandler = xSemaphoreCreateBinary(); 创建一个二进制信号量 返回NULL,或者handler xSemaphoreGive(xHandler); 生产者+1 xSemaphoreTake(xHanlder, timeout); 消费者-1 返回pdPASS, 或者pdFAIL 示例如下:

cpu

cpu

cpu

cpu

cpu

系统判断,会占用CPU的很大资源,以上示例中判断按键是否按下,可以用中断处理。在中断中必须调用函数名以FromISR结尾的函数。示例如下:

cpu

cpu

cpu



审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分