ucosII 信号量使用总结(举例讲解)

2023-05-16

概述

信号量用于:
1.控制共享资源的使用权(满足互斥条件)
2.标志某时间的发生
3.使2个任务的行为同步

OSSemCreate 赋初值

OSSemCreate(INT16U cnt),cnt为信号量的初始计数值。当计数值不为0的时候,OSSemPend会马上得到信号并执行,执行成功后cnt数减1。而成功执行一次OSSemPost的时候,cnt数会加1。
举例:cnt的初值赋值5,会传5次信号到OSSemPend。(一般不会这么用,仅仅是展示功能)
在这里插入图片描述

应用实例:互斥信号量

作为互斥条件,信号量初始化为1。
实现目标:调用串口发送命令,必须等待返回“OK”字符过后,才能发送下一条命令。每个任务都有可能使用到此发送函数,不能出现冲突!

实现方法:

OS_EVENT *uartSend;
void main(void)
{
….
uartSend = OSSemCreate(1);
creatTask(task1);
creatTask(task2);
…
}
void task1(void)
{
	while(1)
	{
	CommSendCmd(“AT\r\n”);
	OSTimeDlyHMSM(0, 0, 0, 5);
	}
}

void task2(void)
{
	while(1)
	{
	CommSendCmd(“AT\r\n”);
	OSTimeDlyHMSM(0, 0, 0, 8);
	}
}
void CommSendCmd(char*str)
{
          uint8_t res;
          OSSemPend(uartSend,0,&err);
          uartSendCmd(str);//串口发送命令到设备
	 res = waitResponst(“OK”);//等待返回OK
	if(res = TIME_OUT)
	{
        OSSemPost(uartSend);
        return ERR_CEND;
	}
	else
	{
        OSSemPost(uartSend);
	return 0;
	}
}

分析:任务1第一次在执行CommSendCmd()的时候,由于初始化信号值为1,所以任务1拥有发送权,执行完OSSemPend过后,信号值为0,如果此时,任务2想要发送,由于信号值为0,则任务挂起。当任务1执行完成过后,会执行一句OSSemPost,信号值变成1。如果当前任务2有任务挂起,当收到OSSemPost过后,任务2开始执行,执行完OSSemPend过后,信号值又变成0

注意事项

中断服务子程序不能调用OSSemCreate函数,只能在任务及代码或者多任务启动之前调用。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ucosII 信号量使用总结(举例讲解) 的相关文章

  • UCOSII学习---五、任务通信之信号量

    一 xff1a 信号量的理解 xff1a 信号量的本质是数据操作锁 xff0c 它本身不具有数据交换的功能 xff0c 而是通过控制其他的通信资源 xff08 文件 xff0c 外部设备 xff09 来实现进程间通信 xff0c 它本身只是
  • stm32 ucosii消息队列 串口_UC/OSII消息队列、信号量集和软件定时器

    UCOSII消息队列 信号量集和软件定时器简介 上一章 xff0c 我们介绍了信号量和邮箱的使用 xff0c 本章我们介绍比较复杂消息队列 信号量集以及软件定时器的使用 消息队列 使用消息队列可以在任务之间传递多条消息 消息队列由三个部分组
  • ucosii使用

    当需要同时跑多个任务的时候裸机显然不能很好的完成使命 xff0c 这个时候我们可以给单片机上系统 xff0c 创建多任务 xff0c 完成复杂逻辑 一 首先移植uocii在我们的板上 xff0c 根据mcu型号移植ucosii xff0c
  • UCOSII-消息邮箱与消息队列

    文章目录 一 事件控制块及事件处理函数1 等待任务列表2 事件控制块的结构3 操作事件控制块的函数4 空事件控制块列表 二 消息邮箱1 消息邮箱介绍2 消息邮箱操作步骤 三 消息队列1 消息指针数组2 队列控制块3 消息队列的操作流程 四
  • STM32上使用UCOSII--消息队列和信号量集

    有关UCOS任务的介绍 xff1a STM32上使用UCOSII 任务 有关UCOS信号量和邮箱的介绍 xff1a STM32上使用UCOSII 信号量和邮箱 一 消息队列 使用消息队列可以在任务之间传递多条消息 消息队列由三个部分组成 x
  • ucosii中消息队列、消息邮箱、信号量的区别

    1 用信号量进行行为同步时 xff0c 只能提供同步的时刻信息 xff0c 不能提供内容信息 若被控制方要求得到控制方的内容信息时 xff0c 可以使用消息邮箱或消息队列 2 但由于消息邮箱里只能存放一条消息 xff0c 所以使用消息邮箱进
  • ucosii消息队列学习

    近期在学习ucosii的内容使用的平台为STM32F103C8T6最小系统板 今日关于消息队列的使用遇到了一些问题 基本情况 xff1a 移植代码为正点原子ucosiii消息队列 信号量集和软件定时器例程 主要新建两个任务post task
  • UCOSii中的信号量

    任务间简单通个信 xff0c A告诉B你LED亮一下 这种问题可以用信号量来处理 xff0c UCOSii中关于信号量的函数也就八个 xff0c 今天简单总结下 函数列表 CREATE A SEMAPHORE Description Thi
  • 基于UCOSII的RS485通信(STM32F107)

    一 实现效果 基于ucosii实时操作系统的RS485通信 xff0c 采用USART 43 DMA进行收发 xff0c 二 开发环境 开发工具 xff1a KEIL V5开发板 STM32f107RC采用方式 xff1a USART 43
  • UCOSII 使用笔记

    UCOS使用总结 1 UCOS 是抢占式系统 xff0c 换句话来说 xff0c 优先级高的能够被准时执行 xff0c 优先级低的很容易被高优先级抢占 xff0c 导致执行任务延迟 2 UCOS一般为64个优先级 xff0c 有些可以到25
  • 从零开始学习UCOSII操作系统4--任务管理

    从零开始学习UCOSII操作系统4 任务管理 1 重讲任务 1 任务可以是一个无限的循环 xff0c 也可以在一次执行完毕后被删除 这里需要注意的是 xff0c 任务的代码并不是真正的删除了 xff0c 而是UCOSII不再理会该任务代码
  • 从零开始学习UCOSII操作系统7--信号量

    从零开始学习UCOSII操作系统7 信号量 参考博客 xff1a 64 http blog csdn net gatiemehttps blog csdn net gatieme article details 21071379 前言 xf
  • 从零开始学习UCOSII操作系统15--总结篇

    从零开始学习UCOSII操作系统15 总结篇 前言 xff1a 在大学的时候 xff0c 我们班级上面都有很多人觉得学习UCOSII 包括UCOSIII 是没什么厉害的 xff0c 因为很多人都喜欢去学习Linux操作系统 xff0c 但是
  • UCOSII之项目实战总结

    电子IT行业博大精深 xff0c 没有人能够用笔记本天天记录自己所学的知识 xff0c 于是乎 xff0c 撰写博客就成了每个 IT民工 的专长 再者 xff0c 写一篇博客 xff0c 其意义与不但记录了自己所需的知识 xff0c 更提高
  • 再读 ucosII源码(邵贝贝):任务之间的通讯与同步--邮箱

    邮箱简介 xff1a 邮箱是 C OS II中另一种通讯机制 xff0c 它可以使一个任务或者中断服务子程序向另一个任务发送一个指针型的变量 该指针指向一个包含了特定 消息 的数据结构 为了在 C OS II中使用邮箱 xff0c 必须将O
  • ucosII的书籍

  • UCOSII里面为什么调用OS_ENTER_CRITICAL()或OS_EXIT_CRITICAL()会出错,出错信息为:undeclared identifier `cpu_sr‘

    可以观察到OSTickISR Init 函数内部调用了OS ENTER CRITICAL 和OS EXIT CRITICAL 并且 1 该OSTickISR Init 函数所在的 C文件包含了includes h文件 include inc
  • stm32 ucos/ii移植,程序执行到OSStart()内部的OSStartHighRdy()语句时跑飞问题解决方法之一

    stm32 ucos ii移植 程序执行到OSStart 内部的OSStartHighRdy 语句时跑飞问题解决办法之一 网络上的一些解决办法 stm32程序遇到OSStartHang的问题解决方法总结 但并不适合我遇到的情况 我的情况是已
  • os_mutex.c(全)

    无等待地获取互斥型信号量 OSMutexAccept OS EVENT pevent INT8U perr 创建互斥型信号量OS EVENT OSMutexCreate INT8U prio INT8U perr 删除信号量OS EVENT
  • uCOSii中的互斥信号量

    uCOSii中的互斥信号量 一 互斥型信号量项管理 MUTUAL EXCLUSION SEMAPHORE MANAGEMENT OSMutexAccept 无条件等待地获取互斥型信号量 OSMutexCreate 建立并初始化一个互斥型信号

随机推荐

  • Android Studio 使用Lambda表达式「详细配置」

    前言 xff1a Lambda 表达式 xff0c 也可称为闭包 xff0c 它是推动 Java 8 发布的最重要新特性 Lambda 允许把函数作为一个方法的参数 xff08 函数作为参数传递进方法中 xff09 使用 Lambda 表达
  • 如何解决 Python 错误 NameError: name ‘X‘ is not defined

    Python NameError name is not defined 发生在我们试图访问一个未定义的变量或函数时 xff0c 或者在它被定义之前 要解决该错误 xff0c 需要确保我们没有拼错变量名并在声明后访问它 确保你没有拼错变量或
  • Ajax请求返回图片

    需求 xff1a 使用Ajax返回图片数据展示在Img标签上 前端Ajax请求 lt HTML标签 gt lt img id 61 34 ImagePic 34 alt 61 34 Base64 encoded image 34 width
  • 多读书,读好书

    古人云读书百变其义自现 xff0c 当今是个大数据时代 xff0c 各类书籍种类繁多 xff0c 我们不可能一一预览 xff0c 同时也不需要 也没时间一一细看 xff0c 我们需要的是多遍阅读经典书籍 xff0c 将会事半功倍 下面我将介
  • kendoGrid合并单元格

    kendoGrid默认API中并没有合并单元格的方法 xff0c 故自己借鉴网友的代码并做了改造 xff0c 下述代码及完成了kendoGrid中的行的合并 xff08 在 dataBound事件中完成 xff09 span class t
  • Git合并指定文件到其他分支

    1 合并某个分支上的指定commit span class token comment 在dev分支合并bugfix分支上的 ac0ca63 commit span git branch span class token operator
  • 有刷电机与无刷电机的区别,就是这么简单明了:

    一 有刷电机 xff1a 有刷电机是大家最早接触的一类电机 xff0c 例如很多电动小玩具 xff0c 或者很多家用的吹风机里面的电机都是有刷电机 有刷电机的主要结构就是定子 转子 电刷 xff0c 通过旋转磁场获得转动力矩 xff0c 从
  • ubuntu 完全干净的卸载docker

    1 删除某软件 及其安装时自动安装的所有包 sudo apt get autoremove docker docker ce docker engine docker io containerd runc 2 删除docker其他没有没有卸
  • shell命令—find

    find命令 span class token comment 删除 home fengshuiyue目录下一周前的目录 span fengshuiyue 64 ralc span class token operator gt span
  • shell命令—date

    date命令 span class token comment 获取当前时间 日期格式是 YYYY mm dd HH MM SS span span class token function date span span class tok
  • 大华硬盘录像机、网络摄像机、 网络硬盘录像机外网远程设置DDNS方法

    1 为了便于解释在下文介绍中 xff0c 硬盘录像机 网络摄像机 网络硬盘录像机统一称为 大华设备 2 外网最好是电信 如果不是 xff0c 那必须要确认客户的外网 IP 是唯一的 xff0c 不是与其他用户共用的 3 首先确保 大华设备
  • LibCurl HTTP部分详细介绍

    目录索引 xff1a 一 LibCurl基本编程框架 二 一些基本的函数 三 curl easy setopt函数部分选项介绍 四 curl easy perform 函数说明 xff08 error 状态码 xff09 五 libcurl
  • navicat连接oracle报错:ORA-12737 Instant Client Light:unsupported server character set ZHS16GBK

    今天使用Navicat连接Oracle数据库 xff0c 报了下面的这个错误 xff1a ORA 12737 Instant Client Light unsupported server character set ZHS16GBK 从这
  • VMWare报错"指定的文件不是虚拟磁盘"或“The file specified is not a virtual disk”

    今天打开原来创建的虚拟机 xff0c 突然报错 指定的文件不是虚拟磁盘 xff0c 如下图 xff1a 由于之前这个虚拟机创建了快照 xff0c 因此下面的解决方法是基于快照的 1 打开虚拟机的 vmx文件 xff0c 我的虚拟机名字为 U
  • Javascript模块加载框架——seajs

    最近看了一些开源web的项目 xff0c 发现其前台采用的框架seajs在编写JavaScript代码上很是方便 xff0c 现将学习的记录记于此 1 什么是JavaScript模块加载 为了解决不同javascript库里操作对象的命名冲
  • 2016年底总结

    一年又过去了 xff0c 在此简单说说这一年的收获和感受吧 一 说说考试 今年参加了两场考试 xff0c 一个是注册电气工程师 xff08 供配电 xff09 考试 xff0c 另外一个是一级建造师考试 两个考试均在9月份进行 xff0c
  • JS实现浏览器打印、打印预览

    目前正在做浏览器端采用JS方式实现打印这么一个功能 xff0c JS打印实现的方法很多 xff0c 但是兼容各个浏览器实现打印预览的功能有些棘手 xff0c 现将实现的内容及遇到的问题记录下来 xff0c 希望有大牛看到所提的问题后可以给予
  • STM32流水灯

    这个是根据51的基础上改的 一看就懂 直接在main c编辑就行 而不用去弄什么固件库 寄存器 这个是8个灯 然后设置A0 A7口为Output 推挽输出 就行 直接在user的main c中写就好 USER CODE BEGIN Head
  • PX4Ubuntu16.04环境搭建

    一 在虚拟机上安装一个新的ubuntu16 04系统 二 打开PX4的GITHUB主页 https github com PX4 Firmware 1 按照教程 这些脚本已经在干净的Ubuntu LTS 16 04和Ubuntu LTS 1
  • ucosII 信号量使用总结(举例讲解)

    概述 信号量用于 xff1a 1 控制共享资源的使用权 xff08 满足互斥条件 xff09 2 标志某时间的发生 3 使2个任务的行为同步 OSSemCreate 赋初值 OSSemCreate INT16U cnt xff0c cnt为