| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> FreeRTOS信号量 & ESP32实战 -> 正文阅读 |
|
[嵌入式]FreeRTOS信号量 & ESP32实战 |
FreeRTOS信号量 & ESP32实战阅读建议:有一定操作系统基础知识。FreeRTOS信号量1. 二值信号量??二值信号量通常用于互斥访问或同步,二值信号量和互斥信号量非常类似,但是还是有一些细微的差别,互斥信号量拥有优先级继承机制,二值信号量没有优先级继承。因此二值信号另更适合用于同步(任务与任务或任务与中断的同步),而互斥信号量适合用于简单的互斥访问。 API: 1. xSemaphoreCreateBinary() ??此函数是**vSemaphoreCreateBinary()**的新版本,新版本的FreeRTOS中统一用此函数来创建二值信号量。使用此函数创建二值信号量的话信号量所需要的RAM是由FreeRTOS 的内存管理部分来动态分配的。此函数创建好的二值信号量默认是空的,需要先释放一次信号量才能正常运行,此函数也是个宏,具体创建过程是由函数xQueueGenericCreate()来完成的,函数原型如下:
??可以看到实际上 xSemaphoreCreateBinary() 宏定义是 xQueueGenericCreate() 这个就是我另一篇文章分析的队列的创建,所以本质上 xSemaphoreCreateBinary() 就是队列, 2. xSemaphoreGive()
??可以看到实际上也是使用***xQueueGenericSend***队列的发送函数实现的。 3. xSemaphoreTake()
2. 计数信号量??二值信号量相当于长度为1的队列,那么计数型信号量就是长度大于1的队列。同二值信号量一样,用户不需要关心队列中存储了什么数据,只需要关心队列是否为空即可。计数型信号量通常用于如下两个场合: API: 1. xSemaphoreCreateCounting( uxMaxCount, uxInitialCount ) 函数原型:
跳转到 xQueueCreateCountingSemaphore :
可以看到实际上,就是调用了xQueueGenericCreate来实现计数信号量。 3. 信号量实验??创建一个二值信号量,一个计数信号量,二值信号量用来提示完成初始化,计数信号量创建时初始值设为10,创建一个线程,每一秒获取一次计数信号量,一共获取10次,每一次获取都会动态刷新,最后屏幕显示计数信号量为1,并且不再变化。 程序框架如图: |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 4:41:57- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |