Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Kernel
15天入门-第十一天 事件的使用
发布于 2018-05-30 00:03:31 浏览:1820
订阅该版
* 本帖最后由 小住住 于 2018-5-30 23:44 编辑 * 本次课程主要讲事件的使用,包含: 1、举例说明事件机制 event 事件集(包括很多因素) 等公交 345路 899 099 只有有一个条件满足 600+A 小伙伴 事件机制 用来解决 1对多 600 路 1 2 3 4 任务 多对1 600 路来了,小伙伴来了 2、例程源码解析及事件相关操作 也是IPC对象 有特定应用场合. 初始化/创建 发送 接收 脱离/删除(实际项目大部分都不会删除或脱离) /* 事件控制块 */ static struct rt_event event; /* 初始化事件对象 */ result = rt_event_init(&event, "event", RT_IPC_FLAG_FIFO); if (result != RT_EOK) { rt_kprintf("init event failed.
"); return -1; } rt_event_send(&event, (1 << 3)); /* receive first event */ if (rt_event_recv(&event, ((1 << 3) | (1 << 5)), RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_FOREVER, &e) == RT_EOK) 这个&e 就是局部变量保存发送过来的事件. 3、事件VS信号量 信号量 结构体控制块中是个value event 是个 set; uint32_t set bit 按位操作,可以发32个同步消息,每一bit 代表一个信号; 信号量 take 时候-1 release 时候+1; 逻辑与 表示关联性同步, 几个条件同时满足; 逻辑或 表示独立性同步,几个条件中有一个满足; 事件的无序性,事件是信号量的一个扩展,很多时候可以替代信号量灵活使用. 作业:回顾rt-thread中的5个IPC,搞清通性和差异.典型应用场景: 觉得共性: 都是用来在任务间做同步,通信,交互,任务的条件执行,在什么条件下执行. 基本上都是创建/初始化 发送 接收 脱离/删除的过程; 差异性: ①事件 来强调几个任务的 关联性同步或者独立性同步,但不强调顺序,不是哪个先哪个后执行. 这个能想到的典型应用场合,比如:电梯 往下走,比如门关上了,并且有按下的按键. ②而强盗谁先执行再谁后执行的场合的,就比较适合使用信号量.着重是对公共资源的占用,我占了,你就不可以占用, 只能等待.能想到的典型应用,一个任务定时释放一个信号量,一个任务一直等待这个信号量. 比如想获取电池电量,任务I 是主动要求上传,另一种方式或者任务II 是定时上传,这种场合的话,定义电池电量任务,一直在等待 定时任务I释放的信号量 或者 任务II 释放的信号量,你看这种场合,没有顺序要求,其实也可以使用事件来实现. 其实要想一个 必须信号量才能来完成的任务,好像一时半会也想不出来. 突然想到,就说停车场3个车位,信号量初始值3,三个车位满了,信号量变为0,然后只有空出一个,在外面排队的才能 获取到进来,这个场合的话,信号量的典型应用场合. ③然后说道互斥锁,就只有一个公共资源,一个车位,互斥锁在初始时候就是打开的,上来就能用. 于信号量相比,信号量在哪里都能释放,而互斥锁只有获取才能释放,强盗所有权的概念,许可和权限,不存在优先级反转问题. 典型应用:多个I2C 器件访问 访问总线的问题,必须一个一个来. 还有就是:只有一个公用电话,一个厕所时候. ④而邮箱主要解决任务间数据交换问题,单个邮件大小限制是4个字节;两个任务间发送的是内容的地址, 不备份数据,不copy 数据到局部变量,典型应用场合,多个按键和多个LED 显示控制,多个按键对应多个键值,然后发送出去, led 任务等待在邮箱中收取内容,进行比较. 再比如 电池电量任务中 发送低电量值给LED 报警提示程序,根据不同的电量,现实不同的LED 变化; ⑤ 而消息队列每个消息的内容可以制定大小,还会复制接收到的内容到局部变量,用来处理更复杂的任务同步; 比如:根据不同的音频格式, 使用不同的解码程序.接收到音乐文件后,获取音频文件格式,然后发送到消息队列,那边接收的, 根据不同的内容,使用不同的解码程序.不只是发送简单的信号量,的场合,就需要消息队列. 消息队列要解决同步的问题,就是接受者要告诉发送者,自己已经接收到信息,可以通过信号量来通知.
查看更多
1
个回答
默认排序
按发布时间排序
小住住
认证专家
2020-06-04
这家伙很懒,什么也没写!
注意事项:一个事件的话,也需要 RT_EVENT_FLAG_OR , if (rt_event_recv(&event, EVENT_FLAG_SSI_RECV_OVER, RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, RT_WAITING_FOREVER,&e) == RT_EOK)
撰写答案
登录
注册新账号
关注者
0
被浏览
1.8k
关于作者
小住住
这家伙很懒,什么也没写!
提问
129
回答
126
被采纳
2
关注TA
发私信
相关问题
1
请教cpu使用率分析
2
选择FreeRTOS, 还是RT-Thread。
3
thread heap stack overflow ?
4
rtt消息队列delay问题
5
释放被删除线程的内存地方在哪里啊
6
请教:各线程结束后,释放其中的内存的连续性问题
7
STM32F103中断关于信号量、邮箱问题
8
RTT中的线程栈大小如何控制
9
关于线程由执行态变为挂起态的代码实现,,,
10
rt_malloc(rt_size_t size)内存分配函数最小分配尺寸问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
CherryUSB的bootuf2配置
2
在用clangd开发RTT吗,快来试试如何简单获得清晰干净的工作区
3
GD32F450 片内 flash驱动适配
4
STM32H7R7运行CherryUSB
5
RT-Smart首次线下培训,锁定2024 RT-Thread开发者大会!
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
freemodbus
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
6
次点赞
YZRD
2
篇文章
5
次点赞
lizimu
2
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部