当前位置:网站首页>【实战】STM32MP157开发教程之FreeRTOS系统篇3:FreeRTOS 计数型信号量
【实战】STM32MP157开发教程之FreeRTOS系统篇3:FreeRTOS 计数型信号量
2022-06-21 09:09:00 【华清远见IT开放实验室】
1.写在前面:
本文章为《STM32MP157开发教程之FreeRTOS操作系统篇》系列中的一篇,笔者使用的开发平台为华清远见FS-MP1A开发板(STM32MP157开发板)。stm32mp157是ARM双核,2个A7核,1个M4核,A7核上可以跑Linux操作系统,M4核上可以跑FreeRTOS、RT-Thread等实时操作系统,STM32MP157开发板所以既可以学嵌入式linux,也可以学stm32单片机。
针对FS-MP1A开发板,除了FreeRTOS操作系统篇外,还包括其他多系列教程,包括Cortex-A7开发篇、Cortex-M4开发篇、扩展板驱动移植篇、Linux应用开发篇、Linux系统移植篇、Linux驱动开发篇、硬件设计篇、人工智能机器视觉篇、Qt应用编程篇、Qt综合项目实战篇等。欢迎关注,更多stm32mp157开发教程及视频,可加技术交流Q群459754978,感谢关注。
FS-MP1A开发板详情介绍:https://item.taobao.com/item.htm?id=622457259672
2.FreeRTOS计数型信号量
2.1.计数型信号量简介
计数型信号量也叫做数值信号量,相当于数值大于1的队列,用户不需要关心其中存储了什么数据,只需要关心是否为空即可,其主要用于事件计数和资源管理。
2.1.1事件计数
在这个场合中,每次事件发生的时候就在事件处理函数中释放信号量(增加信号量的计数
值),其他任务会获取信号量(信号量计数值减一,信号量值就是队列结构体成员变量
uxMessagesWaiting)来处理事件。在这种场合中创建的计数型信号量初始计数值为 0。
2.1.2资源管理
在这个场合中,信号量值代表当前资源的可用数量,比如房间内当前剩余的座位数量。
一个任务要想获得资源的使用权,首先必须获取信号量,信号量获取成功以后信号量值就会减一。当信号量值为 0 的时候说明没有资源了。当一个任务使用完资源以后一定要释放信号量,释放信号量以后信号量值会加一。在这个场合中创建的计数型信号量初始值应该是资源的数量,比如房间内一共有 50 个座位,那么创建信号量的时候信号量值就应该初始化为 50。
2.2.计数型信号量函数
2.2.1 创建信号量
同二值信号量一样,若想使用,必须先要创建信号量,在新版FreeRTOS中,一般使用xSemaphoreCreateCounting()函数动态创建计数型信号量。此函数是个宏,其函数原型如下:
SemaphoreHandle_t xSemaphoreCreateCounting(UBaseType_t uxMaxCount,
UBaseType_t uxInitialCount)
参数:
uxMaxCount:信号量最大计数值,当信号量值等于此值时释放信号量就会失败
uxInitialCount:计数信号量初始值
返回值:
NULL:计数型信号量创建失败
其他值:创建成功的计数型信号量的句柄
2.2.2 释放信号量
释放信号量的函数与二值信号量相同,具体请参考FreeRTOS二值信号量章节。
2.2.3获取信号量
获取信号量的函数与二值信号量相同,具体请参考FreeRTOS二值信号量章节。
2.3.操作实验
2.3.1实验设计
计数型信号量一般用于事件计数与资源管理,在本节实验中,通过扫描按键,当按键按下时实现信号量的释放与获取,可以通过串口来显示信号量的数值。
任务及其功能如下:
StartTask02():扫描KEY1键,当按键按下时,进行信号量释放,顺便获取信号量数值,通过串口输出显示。
StartDefaultTask():扫描KEY2键,当按键按下时,进行获取信号量,顺便获取信号量数值,同样通过串口输出显示。
正常情况下,每释放一次信号量,信号量数值加1,当获取到以后,数值减1。
2.3.2实验过程与分析
首先,根据之前几章内容配置好KEY、UART4,其中将KEY设置为GPIO_input,按照上一节配置“FREERTOS”,完成后生成代码。 在StartDefaultTask() 与StartTask02()中添加代码如下。
可参考12.3.2章节进行导入已有工程,工程存放路径【华清远见-FS-MP1A开发资料\02-程序源码\ARM体系结构与接口技术\FreeRTOS\2_MP1A-FreeRTOS-COUNT】


实验结果如图所示

当按下KEY1键时,信号量释放,信号量会加1,此时按下KEY2键时,获取到信号量以后,信号量的数量减1。
硬件平台:华清远见FS-MP1A开发板(STM32MP157)部分开发教程下载:加QQ群459754978,群文件里有。
部分视频课程收看:https://space.bilibili.com/670826565/channel/detail?cid=145472
淘宝购买链接:https://item.taobao.com/item.htm?id=622457259672
手机淘宝分享码:复制本行文字打开手淘₤T4FPXn3YYJ2₤
边栏推荐
- 《网络是怎么样连接的》读书笔记 - FTTH
- R language list data object, create list data object, index list data with [[], list data practice
- Reading method (three times reading method)
- Unity write multithreading considerations
- 基于Retrotfit2.1+Material Design+ijkplayer开发的一个APP
- Unity Detailed explanation of meta file function
- [early knowledge of activities] list of recent activities of livevideostack
- finally block can not complete normally
- Windows10 LAN shared folder process
- 4.7 Inquirer. JS usage example
猜你喜欢

Tidb3.0- 4.0 memory control / modification log saving days / maximum index length
![[Mgt] model Mgt for code interpretation](/img/4f/694e7b93626436007021b718ad69b5.png)
[Mgt] model Mgt for code interpretation

tidb4.0.0遇见的问题、报错总结(tiup部署)

应用配置管理,基础原理分析

PingCAP 入选 2022 Gartner 云数据库“客户之声”,获评“卓越表现者”最高分

Mono of unity 5 can also support C # 6

Abstractqueuedsynchronizer (AQS) source code detailed analysis - semaphore source code analysis

Abstractqueuedsynchronizer (AQS) source code analysis - cyclicbarrier source code analysis

Application configuration management, basic principle analysis

Summary of problems and errors encountered in tidb4.0.0 (tiup deployment)
随机推荐
Wechat applet
Adapt to the pits in Huawei models
微信小程序
The skill of using ADB and the principle of USB communication
Unity的网络请求_短连接
Waiting in webdriver
GQL+Nodejs+MySQL数据库
The R language uses the sink function to export the dataframe data and save it as a CSV file in the specified directory. In practice, if no directory is specified, it will be output to the current wor
【JUC系列】Executor框架之CompletionService
An app developed based on retrotfit2.1+material design+ijkplayer
声临其境 — 音频沉浸体验
The way of filling holes in APK Decompilation
Unity Detailed explanation of meta file function
The R language uses the fix function to modify the name of the data variable through the editor. For example, use the fix function to modify the name of the dataframe data column
一条命令开启监控之旅!
ADO. Net - invalid size for size property, 0 - ado NET - The Size property has an invalid size of 0
应用配置管理,基础原理分析
Post process basic notes (important items)
[Mgt] model Mgt for code interpretation
Token, cookie and session