- 简述
- 事件是一种实现任务间通信的机制,主要用于实现多任务间的同步,但事件通信只能是事件类型的通信,无数据传输
- 可以实现一对多,多对多的同步,即一个任务可以等待多个事件的发生
- 事件仅用于同步,不提供数据传输功能
- 允许多个任务对同一事件进行读、写操作
- 事件无排队性,即多次向任务设置同一事件(如果任务还未来得及读走),等效于只设置一次
- 事件不与任务相关联,事件相互独立,一个32位的变量就是事件的集合,标识该任务发生的事件类型,
- 0:事件类型未发生,1:事件类型己发生
- 应用场景
- 事件做标志位,判断某些事件是否发生,然后做数据处理
- 事件可使用于多种场合,它能够在一定程度上替代信号量,用于任务与任务,中断与任务间的同步
- 事件运作机制
- 等待接收:可以根据感兴趣的事件类型等待事件的单个/多个事件
- 等待成功:必须使用OS_OPT_PEND_FLASG_CONSUME选项来清除己接收到的事件类型,否则不会清除己接收到的事件
- 设置事件:对指定事件写入指定的事件类型,设置事件集合的对应事件位为1,可一次同时写多个事件类型
- 清除事件:根据写入参数事件句柄和待清除的事件类型,对事件相应位进行清0操作‘
- 相关函数
- OSFlagCreate(); 创建事件标志组
- OSFlagDel(); 删除事件标志组
- OSFlagPend(); 等待事件标志组
- OSFlagPendAbort(); 取消等待事件标志组
- OSFlagPendGetFlagsRdy(); 获取使任务就绪的事件标志
- OSFlagPost(); 向事件标志组发布标志
- 常用函数:创建、发布、等待
- 例程
- 创建
//创建事件标志组 flag_grp OSFlagCreate((OS_FLAG_GRP *)&flag_grp, //指向事件标志组的指针 (CPU_CHAR *)"flag for test", //事件标志组的名字 (OS_FLAGS )0, //事件标志组的初始值 (OS_ERR *)&err); //返回错误类型 - 发布
/************************************************** * 函数名:static void AppTaskKey(void *p_arg) * 描述 :按键检测 * 输入 :无 * 输出 :无 * 返回 :无 * 调用 :内部调用 **************************************************/ static void AppTaskKey(void *p_arg) { OS_ERR err; uint8_t KeyValue; (void)p_arg; for(;;) { KeyValue = BSP_KEY_Scan(0); if(KeyValue == Key0_PH3_Value) { printf("\r\n Key0被按下 \r\n"); OSFlagPost( (OS_FLAG_GRP *)&flag_grp, (OS_FLAGS )KEY0_EVENT, (OS_OPT )OS_OPT_POST_FLAG_SET, (OS_ERR *)&err); } if(KeyValue == Key1_PH2_Value) { printf("\r\n Key1被按下 \r\n"); OSFlagPost( (OS_FLAG_GRP *)&flag_grp, (OS_FLAGS )KEY1_EVENT, (OS_OPT )OS_OPT_POST_FLAG_SET, (OS_ERR *)&err); } if(KeyValue == Key2_PC13_Value) { printf("\r\n Key3被按下 \r\n"); OSFlagPost( (OS_FLAG_GRP *)&flag_grp, (OS_FLAGS )(KEY0_EVENT | KEY1_EVENT), (OS_OPT )OS_OPT_POST_FLAG_SET, (OS_ERR *)&err); } } } - 等待
/************************************************** * 函数名:static void AppTaskLed(void *p_arg) * 描述 :led应用 * 输入 :无 * 输出 :无 * 返回 :无 * 调用 :内部调用 **************************************************/ static void AppTaskLed(void *p_arg) { OS_ERR err; OS_FLAGS flags_rdy; (void)p_arg; for(;;) { flags_rdy = OSFlagPend( (OS_FLAG_GRP *)&flag_grp, (OS_FLAGS )(KEY0_EVENT | KEY1_EVENT), (OS_TICK )0, (OS_OPT )OS_OPT_PEND_FLAG_SET_ALL | OS_OPT_PEND_BLOCKING | OS_OPT_PEND_FLAG_CONSUME, (CPU_TS *)0, (OS_ERR *)&err); if((flags_rdy & (KEY0_EVENT | KEY1_EVENT)) == (KEY0_EVENT | KEY1_EVENT)) { printf("\r\n key0与key1都按下 \r\n"); LED1_TOGGLE; } } }
- 创建
- 下载验证
- 总结
- 相同优先级的任务,按顺序执行
- 参考资料:
- 正点原子《STM32F767 UCOS开发手册》
- 野火《uC/OS-III内核应用与开发》
- 《嵌入式实时操作系统 uC/OS-II原理及应用(第二版)》
- 官方源码
- 硬件平台:
- 正点原子阿波罗F767
- 软件平台:
- MDK5.2.5
- 库版本:
- TM32Cube_FW_F7_V1.4.0
- uC/OS-III版本
- UCOSIII 3.04
相关推荐
地瓜机器人RDK Studio使用入门教程
不知道大家在使用AI开发板的时候有没有遇到过板子官方镜像占据空间大难以保存,想要的时候找不到?官方示例项目久而久之便难以找寻?首次登陆开发板连接网络还需要准备显示器键盘鼠标外设繁杂?…为了解决平时开发过程中遇到的种种不便利问题,地瓜机器人创新的推出了RDK Studio这一官方开发者软件,使智能机器人开发迎来新纪元!通过这一软件极大降低了机器人的开发门槛,哪怕是零基础的用户亦可轻松上手RDK系列板卡!
UCOSIII使用总结(三)
1、任务创建: OSTaskCreate() 函数 void OSTaskCreate (OS_TCB *p_tcb, CPU_CHAR *p_name, OS_TASK_PTR p_task, void *p_arg, OS_PRIO prio, CPU_STK *p_stk_base, CPU_STK_SIZE stk_limit, CPU_STK_SIZE stk_size, OS_MSG_QTY q_size, OS_TICK time_quanta, void *p_ext, OS_OPT opt
Sharding-JDBC 系列专题 - 第九篇:高可用性与集群管理
高可用性是指系统在面对故障(如数据库宕机、网络中断)时,能够快速恢复并继续提供服务。Sharding-JDBC 和 Sharding-Proxy 提供了多种机制支持高可用性,同时需要结合底层数据库的高可用方案(如 MySQL 主从复制、MHA)来实现。高可用性和集群管理是 Sharding-JDBC 和 Sharding-Proxy 在生产环境中成功应用的关键。本篇详细介绍了数据库高可用方案、Sharding-JDBC 的故障切换机制、Sharding-Proxy 的集群部署,以及分布式治理功能。
os_flag.c
typedef struct os_flag_grp OS_FLAG_GRP; struct os_flag_grp { /* Event Flag Group */
2019年数学建模美赛经验总结
北京时间2019年1月29号上午9时,数模美赛结束。美赛结束已经10多天了,我在这次竞赛中负责建模和编程,趁现在记忆还比较清晰,写下这篇博客记录第一次参加数学建模美赛的经历。 补更:2019年4月20日公布成绩,笔者最终获得了美赛一等奖 目录 1、基本情况 2、选题 3、分工合作 4、论文写作 5、建模 6、编程 7、入门资源 ...
Linux系统下奥比中光Astra Pro相机SDK部署与避坑指南
本文详细指导了在Linux系统下部署奥比中光Astra Pro深度相机SDK的全过程,涵盖系统准备、SDK安装、设备权限配置及常见问题排查。重点解析了USB设备规则配置这一关键步骤,并提供了Python与C++项目的集成方法,旨在帮助开发者快速完成相机配置,避免常见陷阱。
ucos-iii 事件标志组
一 事件标志组相关函数 创建事件标志组 OSFlagCreate() OS_CFG_FLAG_EN OS_FLAG_GRP EngineStatus; OS_ERR err; OSFlagCreate(&EngineStatus, “Engine Status”,(OS_FLAGS)0,&err); 删...
避坑指南:PCIe设备兼容性那些坑——聊聊MPS/MRRS设置不当引发的血泪史
本文深入探讨了PCIe设备兼容性问题,特别是MPS/MRRS参数设置不当引发的常见故障。通过详细解析MPS(Max Payload Size)和MRRS(Max Read Request Size)的作用机制,提供Linux内核五大配置策略的对比分析,并分享FPGA加速卡等实战案例的排查经验。文章还介绍了诊断工具链、动态调试技巧以及性能优化方法,帮助工程师有效解决PCIe兼容性难题。
嵌入式系统学习——STM32之UCOS-III事件标志组和存储管理
事件标志组: 有时候一个任务需要与多个事件同步,这个时候就需要使用事件标志组。事件标志组与任务之间有两种同步机制:“或”同步和“与”同步。 “或”同步:等待多个事件时,任何一个事件发生 ,任务都被同步,这个就称为“或”同步。 “与”同步:当所有的事件都发生时任务才被同步,这种同步机制被称为“与”同步。 在UCOSIII中事件标志组为OS_FL
PCB设计中的规则优先级陷阱:为什么你的过孔总是十字连接?
本文深入解析PCB设计中Altium Designer规则优先级机制,解决过孔总是十字连接而非全连接的问题。通过分析铺铜连接原理和规则匹配逻辑,提供精确控制连接方式的技术实践,包括Custom Query使用和优先级最佳设置,帮助设计师避免常见陷阱,优化高速电路板的电气性能和制造可靠性。
电路布局中近场耦合问题
开关电源EMC设计中,传导骚扰超标往往源于空间耦合而非参数问题。某案例中,DC-DC模块的非屏蔽电感磁场泄漏耦合到邻近X电容,导致0.5MHz频点超标。通过将X电容移至PCB底层、优化布局保持15mm间距后,问题完全解决。实践证明:EMC设计需注重空间隔离,优先采用屏蔽电感,滤波元件应远离高频磁场区,布局优化比参数调整更有效。这提示工程师需将电磁兼容视为空间问题而不仅是电气问题。
【UCOSIII操作系统】事件篇
UCOSIII操作系统UCOSIII操作系统——事件篇信号量的API函数创建事件标志组->OSFlagCreate()向事件标志组发布标志->OSFlagPost()等待事件标志组->OSFlagPend()等待事件标志组->OSFlagPend() UCOSIII其他内容导航不迷路 UCOSIII操作系统-简介 UCOSIII操作系统——任务篇(1)创建任务 UCOSII......
22、常见加密哈希算法及安全机制解析
本文详细解析了多种常见加密哈希算法,包括SHA系列、RIPEMD、Tiger、HAVAL、Whirlpool等,涵盖其工作原理、安全性与性能对比。同时探讨了哈希攻击方式如预映像攻击和彩虹表,并介绍了盐、MAC、HMAC等防御机制。结合密码存储、消息完整性验证及区块链应用案例,分析了不同场景下的算法选择建议,并展望了哈希算法在创新、融合与标准化方面的未来发展趋势。
【1】uC/OS-III应用开发————>移植uC/OS-III到STM32F767
移植前准备工作: 获取STM32裸机最小工程 跑马灯实验 uC/OS源码获取: https://www.micrium.com/downloadcenter/,下载需要注册帐号 uC/OS文件介绍 移植到STM32工程 按需配置 修改主函数 下载验证 总结 ...
廖雪峰Python教程[完整版]
廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白
WINCC7.3破解文件
WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!
【3】uC/OS-III应用开发————>任务管理(STM32F767)
简述: 多任务操作系统核心是对任务的管理,包括:任务创建、挂起、删除、调度等 任务的基本概念: 下载验证 省略 总结 任务的5个状态、任务构成、任务创建流程、用户任务与系统任务 参考资料: 正点原子《STM32F767 UCOS开发手册》 野火《uC/OS-III内核应用与开发》 《嵌入式实时操作系统uC/OS-III原理及应用(第二版)》 官方...
OV9734 DATASHEET,完整规格书
OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等
【1】uC/OS-III应用开发————>创建任务(STM32F767)
1 2 3 4 5 6
TMS_WebGMaps_1.9.8.0_Full_Source
TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder
【2】uC/OS-III应用开发————>启动流程(STM32F767)
简述: 系统初始化 空闲任务 CPU初始化 SysTick初始化 内存初始化 OSStart() 主函数 下载验证 总结 参考资料: 正点原子《STM32F767 UCOS开发手册》 野火《uC/OS-III内核应用与开发》 《嵌入式实时操作系统uC/OS-III原理及应用(第二版)》 官方源码 硬件平台: 正点原子阿波罗F767 软件平...
【9】uC/OS-III应用开发————>任务信号量(STM32F767)
简述 uC/OS提供任务信号量这个功能,每个任务都有一个32位(用户自定义位宽)的信号量值SemCtr,这个信号量值在任务控制块中包含的,是任务独有的一个信号量通知值 多数情况下,任务信号量可以替代内核对象的二进制信号量、计数信号量 特点 任务信号量更加灵活、速度快、节省RAM、无需单独创建信号量 只能有一个任务接收信号,必须指定接收信号量的任务,才能正确发送信号量, 相关...
【免费下载】 uC/OS-II 和 uC/OS-III 源码及官方例程集合
本仓库提供了一个资源文件的下载,文件名为 `ucosII和ucosIII源码下载和官方例程集合大打包.rar`。该资源文件包含了以下内容: ### 一、源码部分 1. **uC/OS-II** - 版本:v2.92.15 2. **uC/OS-III** - 版本:v3.03 - 版本:v3.04 - 版本:v3.07.03(最新版本) 3. **uC/CP...
【4】uC/OS-III应用开发————>消息队列(STM32F767)
2 2 2 2 2 2 2 222 下载验证 总结 任务的迁移状态、常用任务函数、延时函数; 参考资料: 正点原子《STM32F767 UCOS开发手册》 野火《uC/OS-III内核应用与开发》 《嵌入式实时操作系统uC/OS-III原理及应用(第二版)》 官方源码 硬件平台: 正点原子阿波罗F767 软件平台: MDK5.2.5...
【6】uC/OS-III应用开发————>互斥信号量(STM32F767)
简述 它是一种特殊的二进制信号量,支持互斥量所有权、递归访问以及防止优先级翻转,实现对临界资源的独占式处理 互斥量的状态: 开锁:任务释放这个互斥量时,该互斥量处于开锁状态,任务失去该互斥量的所有权 闭锁:-----获得----------------,---------------------闭锁------,该互斥量被任务持有 优先级翻转图解 优先级继承 ...
【10】uC/OS-III应用开发————>任务消息队列(STM32F767)
简述 下载验证 总结 参考资料: 正点原子《STM32F767 UCOS开发手册》 野火《uC/OS-III内核应用与开发》 《嵌入式实时操作系统uC/OS-II原理及应用(第二版)》 官方源码 硬件平台: 正点原子阿波罗F767 软件平台: MDK5.2.5 库版本: TM32Cube_FW_F7_V1.4.0 uC/OS-III版本...
【13】uC/OS-III应用开发————>CPU利用率及堆栈检测统计(STM32F767)
下载验证 总结 uC/OS支持中断嵌套,即当前中断可以被更高优先级中断打断 在OS中,很多时候我们会主动进入临界段,系统不允许当前状态被中断打断 进入与退出时需要调用OSIntEnter()和OSIntExit(),方便中断嵌套管理 参考资料: 正点原子《STM32F767 UCOS开发手册》 野火《uC/OS-III内核应用与开发》 《嵌入式实时操作系统uC...
【0】从0到1教你写uC/OS-III————>开篇:为什么要重复造轮子
为什么要重复造轮子 市面上的教程都是怎么调用库函数,很少对其实现原理进行分析;本教程从最简单系统讲起,不断迭代,教你怎么从0开始把uC/OS-iii写出来; 能深入了解uC/OS的运行机制,当在调试程序时能快速定位错误点,而不是一头莫展; 如何学习RTOS? 目前市面所有的RTOS内核实现方式、运行机制大同小异;深入学习其中一款,再换其它的RTOS都是得心应手 就如同熟悉一个人,...
【5】uC/OS-III应用开发————>信号量(STM32F767)
下载验证 略 总结 消息队列指针传递,传送的是首地址 参考资料: 正点原子《STM32F767 UCOS开发手册》 野火《uC/OS-III内核应用与开发》 《嵌入式实时操作系统?uC/OS-III原理及应用(第二版)》 官方源码 硬件平台: 正点原子阿波罗F767 软件平台: MDK5.2.5 库版本: TM32Cube_FW_F7_V1.4.0 uC/OS-I...
【8】uC/OS-III应用开发————>软件定时器(STM32F767)
简述 定时器:是指从指定的时刻开始,经过一个指定时间,然后触发一个超时事件,用户可以自定义定时器的周期与频率 分类: 硬件定时器: 芯片本身提供的功能 每次在定时时间到达之后就会自动触发一个中断,用户在中断中处理信息 软件定时器: 由操作系统提供的一类系统接口,构建在硬件定时器(SysTick)基础上 软件定时器指定时间到过后要调用的函数(也称超时函数/回调...

3426



被折叠的 条评论
为什么被折叠?



