信号量另一种通常的用法是用于任务间的同步机制。
二进制信号量,可以想成是一个布尔类型,只有0 和 1。
两个任务公用一个信号量,一个任务用于产生信号量,另一个任务使用此信号量。
比如:按键按下亮灯,再按一次灯灭。按键任务中按键按下时,将信号量置1。
亮灯任务中将信号量置0。 用二进制信号量可以减少判断语句的资源消耗。
API函数:
SemaphoreHandle_t xHandler; 创建二进制Handler xHandler = xSemaphoreCreateBinary(); 创建一个二进制信号量 返回NULL,或者handler xSemaphoreGive(xHandler); 生产者+1 xSemaphoreTake(xHanlder, timeout); 消费者-1 返回pdPASS, 或者pdFAIL 示例如下:
系统判断,会占用CPU的很大资源,以上示例中判断按键是否按下,可以用中断处理。在中断中必须调用函数名以FromISR结尾的函数。示例如下:
审核编辑:刘清
-
cpu
+关注
关注
68文章
11121浏览量
218389 -
FreeRTOS
+关注
关注
13文章
495浏览量
64769 -
API函数
+关注
关注
0文章
15浏览量
8293
原文标题:FreeRTOS二进制信号量
文章出处:【微信号:硬件会,微信公众号:硬件会】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
评论