UCOS2_STM32_任务间信号量通信(一)_ 应用实例描述

描述

Ⅰ、写在前面

本文主要讲述UCOS2基于STM32硬件平台下,两个任务之间利用信号量进行通信实现的方法,具体实现原理将在后面文章讲述。

本文主要站在应用的角度来分析信号量通信,与芯片相关的底层这里不过多描述。本文虽然是STM32F1的芯片,但也适合其他芯片的学习(应用层)。

今天提供的工程代码也适用于STM32其他系列芯片(下载我前面移植好的其他系列工程,替换bsp和app下面相关文件就行。 当然,里面LED、按键和串口驱动如果不是对应的引脚,请适当改一下)。

与本文相关的UCOS移植和内核的讲述可以进入我微信公众号“历史消息”查看。

关于本文的更多详情请往下看。

Ⅱ、本文要点

1.软件工程源代码下载 

我将今天所讲述内容源代码经过测试无误之后上传至360云盘方便大家下载参考学习。

STM32其他系列也可以下载参考,请看“历史消息”。

本文源代码工程下载地址:

https://yunpan.cn/ck5RWT48WcpHj  访问密码 9017

2.工程代码实现功能效果 

为了方便大家理解上面提供下载的软件工程源代码,这里先来讲述一下软件工程实现的功能和效果。

提供下载源代码是由MDK-ARM V5软件下运行,如果你没有安装MDK-ARM软件可以参考我的另外一篇文章:

MDK-ARM下载、安装与注册

建立3个任务:

开始(主)任务AppTaskStart:主要开始初始化底层及相关代码;

应用任务APP_Task1:接收信号量消息;

应用任务APP_Task2:发送信号量消息。

信号量事件EventSem_Key:主要用于任务1和任务2之间通信。

任务1接收到信号消息一次串口打印一次计数值(用于记录按键按下次数);

任务2按键一次,发送信号量消息一次(按下状态时LED2会亮);

【实例类似于同学2给同学1发红包,同学2每次发一元红包,同学1每打开红包一次,显示(打印)余额增加一元】

Ⅲ、源代码分析

信号量作用和原理那些这里就不再过多用文字描述,我主要结合源代码工程来描述信号量通信的原理。

1.工程目录结构

打开下载的源代码工程可以看见整个工程结构如下图所示,为了方便理解,我命名的文件名应该算是比较贴合实际意义。

源代码


“bsp_task1”和“bsp_task2”:主要是俩任务的底层驱动代码。如:初始化IO、USART等。我专门将其单独设立在独自的文件下,主要是方便理解,同样也是为了规范代码工程(建议大家写代码命名和文件命名都要按照常规要求来,方便自己理解)。

“app_task1”和“app_task2”:同样的道理,这里主要是放置任务应用层的源代码。如:实现按键检测、串口打印数据、发送和接收信号量消息。

“global_variable”:主要是全局变量。由于信号量通信是介于两个任务之间的一个信号量,因此完全属于任务1,也不完全属于任务2,是任务1和任务2共同的变量。因此归类为全局变量中。

2.os_cfg系统配置

需要使用信号量相关的资源,就需要在“系统配置”中打开“信号量”功能:

#define OS_SEM_EN    1u

(本文主要就是使用了信号量“发送”和“接收”功能,关于信号量其他功能暂时没有使用到。)

源代码

3.两任务底层代码

任务底层代码和我们前面开发裸机程序一样,就是初始化及与芯片底层相关的代码。

【注意:LED、按键、USART等引脚不对应的就在这里修改】

下面是任务1和任务底层初始化代码(应该很熟悉)

源代码

源代码

4.“开始”任务

“开始”任务代码中包含的信息比较多,大概分为框图中几类,具体意思见后面注释。

【注意:“开始”任务也是一个任务,因此它的任务就是LED1闪烁,以便提示系统在正常运行(1秒变化一次)】

源代码

5.任务1应用代码

任务1应用代码是实现接收(任务2发送的)信号量。当接收到信号量消息就串口打印数据,每接收一次信号量,计数值就增加一次。

源代码

6.任务2应用代码

任务2应用代码是实现发送信号量(给任务1)。每按键一次,就发送信号一次。按下按键状态是LED2处于亮的状态(提示按键已经按下)。

源代码

Ⅳ、说明

本文是偏向应用的代码,关于信号量如何实现,比较底层的描述我会在后期讲述一下。

以上总结仅供参考,若有不对之处,敬请谅解。

更多关于UCOS的文章:

UCOS2_STM32移植详细过程(汇总)

UCOS2系统内核讲述(五)_初始化TCB详情

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分