1.前言

在中断不频繁的系统中,使用二值信号量没有问题,但是中断频繁发生时,则会有中断丢失的问题。

因为中断发生时延迟任务执行,延迟任务执行的过程中,如果又来了两次中断,则只会处理第一次,第二次将会丢失。

为此引入多值信号量来处理这个问题。

2.二值信号量和多值信号量的原理图

二值信号量的处理过程如下图所示:

多值信号量的原理图:

3.计数信号量的典型用法

3.1 事件计数

事件发生时信号量计数值加1,延迟处理任务每处理一个任务信号量计数值减1,信号量的计数值是已发生的事件数与已处理的事件数之间的差值。

用于事件计数的信号量初始值为0.

3.2 资源管理

信号量的计数值表示可用资源的数目。

要使用资源,必须先获取信号量,使信号量计数值减1;

任务完成则释放信号量,将信号量计数值加1;

信号量计数值为0表示没有可用资源;

用于资源管理的信号量,创建时计数值被初始化为可用资源总数。

4.主要API

API 说明 参数及返回值
xSemaphoreCreateCounting() 创建计数信号量,FreeRTOS 中所有种类的信号量句柄都由声明为 xSemaphoreHandle 类型的变量
保存。

uxMaxCount 最大计数值

uxInitialCount 信号量的初始计数值

返回值 如果返回 NULL 值,表示堆上内存空间不足,所以 FreeRTOS 无法
为信号量结构分配内存导致信号量创建失败。第五章有提供更多的
内存管理方面的信息。
如果返回非 NULL 值,则表示信号量创建成功。此值应当被保存起
来作为这个的信号量的句柄。

最新文章

  1. Windows server用好windows server backup,发挥个人电脑该有的系统还原功能
  2. C语言习题(结构)
  3. java 中变量的存储与引用
  4. iOS的内购
  5. Spark大数据处理技术
  6. 修复南尼U盘
  7. Swift - 41 - swift1.2新特性(1)
  8. [LeetCode]题解(python):126-Word Ladder II
  9. Qt 操作 pdf 文件
  10. PAT (Advanced Level) 1052. Linked List Sorting (25)
  11. jQuery监听事件经典例子
  12. Android使用属性动画ValueAnimator动态改变SurfaceView的背景颜色
  13. linux 高级字符设备驱动 ioctl操作介绍 例程分析实现【转】
  14. SmokePing介绍
  15. 1005 继续(3n+1)猜想 (25 分)
  16. Jmeter当获取正则表达式匹配数字为负数时获取所有匹配的值
  17. CentOS7系统64位下搭建Python3.6环境及相关细节工具部署文章收集
  18. jQuery 的运行机制(How jQuery Works)
  19. 谜一样的jquery之$选择器
  20. scrapy之 downloader middleware

热门文章

  1. POJ P3352 Road Construction 解题报告
  2. 洛谷 P2680 运输计划 解题报告
  3. 洛谷 P1053 篝火晚会 解题报告
  4. 支持向量机(SVM)的推导(线性SVM、软间隔SVM、Kernel Trick)
  5. php 防止sql注入的简单方法
  6. InfluxDB、grafana、collect部署监控(centos6.8)
  7. Xen的入门到放弃
  8. H3C常用命令详解
  9. 设计模式---组件协作模式之模板方法模式(Tempalte Method)
  10. MySQL记录-Lost Connect MySQL Server during query解决方案