FreeRTOS信号量

  • 1、FreeRTOS信号量分类
    FreeRTOS信号量有二值信号量、计数型信号量、互斥信号量和递归互斥信号量4种。
  • 2、二值信号量
    二值信号量本质是只有1个队列项的队列,该队列只有满,空两种状态。释放信号量和获取信号量都允许设置阻塞时间。二值信号量通常用于中断与任务之间或任务之间同步。
  • 2.1创建二值信号量
xSemaphoreCreateBinary    //动态
xSemaphoreCreateBinaryStatic    //静态
  • 2.2释放二值信号量
xSemaphoreGive    //在任务中释放
xSemaphoreGiveFromISR    //在中断中释放
  • 2.3获取二值信号量
xSemaphoreTake    //在任务中获取
xSemaphoreTakeFromISR    //在中断中获取
  • 3、计数信号量
    计数信号量通常用于以下两种场合:事件计数和资源管理。
    事件计数指的是计数信号量初始计数值为0。释放信号量时信号量值加1,获取信号量时信号量值减1。在资源管理中,信号量值为当前资源的可用数量,例如停车场车位数量。
  • 3.1创建计数信号量
xSemaphoreCreateCounting    //动态
xSemaphoreCreateCountingStatic    //静态
  • 3.2释放计数信号量,获取计数信号量同二值信号量
  • 3.3获取计数信号量值
    实质是队列结构体成员变量uxMessagesWaiting
uxSemaphoreGetCount
  • 4、互斥信号量

互斥信号量是有优先级继承的二值信号量。当一个互斥信号量正在被一个低优先级任务使用,而此时有个高优先级的任务也要获取这个信号量的话就会被阻塞,但是高优先级任务会将低优先级任务的优先级提高到和自己相同等级。互斥信号量不能用于中断,因为开销太大,中断处理函数要简洁和高效。不能在中断服务函数中设置阻塞时间。

  • 4.1创建互斥信号量
xSemaphoreCreateMutex    //动态
xSemaphoreCreateMutexStatic    //静态
  • 4.2释放、获取互斥信号量同二值信号量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值