0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

黄工的嵌入式技术圈 ? 来源:黄工的嵌入式技术圈 ? 2020-03-24 13:59 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Ⅰ、写在前面

本文主要讲述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详情

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

    关注

    2296

    文章

    11039

    浏览量

    366753
  • 源代码
    +关注

    关注

    96

    文章

    2953

    浏览量

    68611
  • ucos2
    +关注

    关注

    0

    文章

    15

    浏览量

    3654
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【RA4L1-SENSOR】05 按键实现RTOS任务切换

    ; 配置任务、队列和信号量 开发板实体按键接在了P000和P001上 在Pins--P0--P000,设置Symbolic Name为KEY1,模式是输入模式。P001(KEY2)同理。 现在
    发表于 06-16 22:38

    STM32数字示波器源码+数字信号处理教程、配套实例

    STM32数字示波器源码+数字信号处理教程、配套实例 部分截图:
    发表于 05-28 21:25

    【每周推荐】基于STM32开发项目实例下载(含PCB、原理图、源码等)

    1、手机APP远程控制,智能家居监测、智能控制系统(含源码)手机APP远程控制,智能家居监测、智能控制系统(STM32L4、服务器、安卓源码)项目实例下载!2、基于STM32蓝牙控制小
    的头像 发表于 05-27 08:05 ?457次阅读
    【每周推荐】基于<b class='flag-5'>STM32</b>开发项目<b class='flag-5'>实例</b>下载(含PCB、原理图、源码等)

    每周推荐!基于STM32开发项目实例下载(含PCB、原理图、源码等)

    1、手机APP远程控制,智能家居监测、智能控制系统(含源码) 手机APP远程控制,智能家居监测、智能控制系统(STM32L4、服务器、安卓源码) 项目实例下载! 2、基于STM32
    发表于 05-26 14:01

    基于STM32的武警哨位联动报警系统设计,支持以太网和WIFI通信(硬件、源码、论文等)

    基于STM32的武警哨位联动报警系统设计,支持以太网和WIFI通信(硬件、源码、论文等) 项目实例下载! 纯分享帖,需要者可点击附件免费获取完整资料~~~【免责声明】本文系网络转载,版权归原作者所有。本文所用视频、图片、文字
    发表于 05-23 20:51

    请问CCyUSBDevice如何同时实例2个?

    CYAPI编程手册中的解释,CCyUSBDevice实例化后是连接到了cyusb driver驱动上,它能查找实例中的多台USB设备。现在的问题是假如我有2台cyusb3014设备,固件
    发表于 05-19 07:27

    LORA开关对传模块,替代5KM电缆,工业级可靠通信

    LORA开关对传模块是种无线通信技术解决方案,专为解决现场布线难、传输距离受限等问题而设计。将开关信号转换为LORA无线
    的头像 发表于 04-11 16:22 ?505次阅读

    4G模拟对传模块,无线通讯,实时同步模拟信号

    、基本概念 4G模拟对传模块,种支持第四代移动通信网络技术(4GLTE)的无线通信模块,同时具备模拟
    的头像 发表于 04-10 16:54 ?372次阅读

    嵌入式开发避坑指南|FreeRTOS的5个\"反直觉\"小技巧

    同步分配堆栈内存 关键代码段用portENTER_CRITICAL()保护,防止中断抢占 案例:某工业控制系统因GPS任务抢占温湿度任务,导致数据丢失 技巧3:信号量用错会\"锁死\"
    发表于 03-20 13:57

    FreeRTOS(V9.0)中创建信号量的函数都没有被定义,因此用不了,怎么解决

    vSemaphoreCreateBinary()还是计数信号量的创建函数xSemaphoreCreateCounting()都没有被定义过。我定要使用信号量,这怎么解决?
    发表于 03-13 09:30

    STM32双核H7核如何通信

    STM32双核H7核通信的方法,主要是CM7和CM4之间如何进行数据传递
    发表于 03-12 07:34

    基于OpenHarmony标准系统的C++公共基础类库案例:Semaphore

    的公共资源变量;创建5个线程,每个线程做5次for循环,for循环的内容是获取无名信号量,并修改公共资源变量;(2)有名信号量使用方法定义1个有名信号量,1个供有名
    的头像 发表于 02-10 18:08 ?412次阅读
    基于OpenHarmony标准系统的C++公共基础类库案例:Semaphore

    Flexus 云服务器 X 实例实践:安装 Tasks.md 任务管理工具

    引言 在数字化时代,高效的任务管理至关重要。华为云直以卓越的技术和服务引领行业发展,其 Flexus 云服务器 X 实例更是为中小企业和开发者带来全新体验。本次我们将在华为云 Flexus 云
    的头像 发表于 01-17 09:45 ?2233次阅读
    Flexus 云服务器 X <b class='flag-5'>实例</b>实践:安装 Tasks.md <b class='flag-5'>任务</b>管理工具

    使用任务通知提高RTOS应用的效率

    在实时嵌入式系统中,性能和资源效率是决定设计成败的关键因素。传统的实时操作系统(RTOS)提供了如队列、信号量和事件组机制,实现任务之间的同步和通信。FreeRTOS/SAFERTOS还提供
    的头像 发表于 12-27 14:54 ?768次阅读

    基于ADS131m04和STM32F103搭建了个简单的采样电路,如何获得比较高的通道采样致性?

    大家好,参照TI的参考设计,基于ADS131m04和STM32F103搭建了个简单的采样电路,希望获得比较高的通道采样致性,就是希望两个通道对同
    发表于 11-21 07:08