Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
事件集event使用初体验
发布于 2020-03-25 22:53:23 浏览:1254
订阅该版
这个帖子是我在实际使用rtt的事件集的实际体验,也有可能是我在使用过程中有不恰当的地方,希望大家不吝赐教。 尽量简要的描述一下使用情形。被控对象为一带有码盘的电机,码盘产生的脉冲数将使用定时器计数。另外,还有一个光电传感器,用于检测电机拖动的断续物品。电机停止的条件是:定时器记录的脉冲数超过某一阈值或者光电传感器检测到物品。 这不正是典型的事件集的应用场景吗?一个事件从定时器中断发送,另一个事件从外部中断发送,然后电机控制的线程里接收事件用`RT_EVENT_FLAG_OR|RT_EVENT_FLAG_CLEAR`参数。只要两个事件有一个发生,阻塞解除,马上停止电机。 然而,从实际却出状况了。会出现连续多个物品通过光电传感器,但电机不停止的情况。甚至会出现规律性的,一个物品经过正常,下一次就连续多个物品通过电机才能停止。 经过两天的调试,我最终怀疑`rt_event_send`函数是否执行时间过长。于是使用信号量替换事件集。暂时不考虑脉冲数的问题。只要光电传感器检测到物品,在中断中释放信号量,电机控制线程则会解除阻塞,停止电机。这么一来,还真就能稳定的在每一个物品经过时,停止电机。 暂时的解决方案是用信号量,附带一个全局变量,用于标记是哪个中断释放的信号量,便于在程序处理时予以区分。 刚刚我大概浏览了一下`rt_event_send`的代码量远大于`rt_sem_release`,不知道是否有大神测试过发送一个事件需要多长时间。 目前,使用信号量来解决上述需求,我认为是存在问题的,万一外部中断多触发了几次呢?那阻塞的线程就能多执行几次了。rtt是否有提供二值信号量呢? 接下来,我打算测试如果使用邮箱,是否能够满足当前的需求,毕竟用邮箱可以省去一个全局变量。但是用邮箱也还是会和信号量一样有线程多次被解除阻塞的问题。 请问各位朋友,如果遇到这个问题的是您,您会用什么样的方式来解决这些问题呢?
查看更多
2
个回答
默认排序
按发布时间排序
robson
2020-03-26
这家伙很懒,什么也没写!
突然想起会不会是因为我程序中有多个事件集的原因。于是我又把所有的事件合并到一个事件集。仍然会出现连续过几个物品电机才停的情况。
robson
2020-03-31
这家伙很懒,什么也没写!
[i=s] 本帖最后由 robson 于 2020-3-31 20:39 编辑 [/i] 今天实际测试了一下事件集的响应速度。 先交代一下测试的环境:STM32F103VET6,使用外部8M晶振倍频到72M。RT-Thread nano 3.1.3,RT-Thread Studio 1.0.4,OS Tick:500Hz 测试方法是使用TIM2,9分频后得到8M频率用来计时。 所有计时都是测量三次,将3次测量的时间求平均值的结果。 测量数据仅供参考。 [md]测试1:执行`rt_event_send()`的时间:**23.5us**。 测试2:线程1在执行`rt_event_send()`之前开始计时,到线程2中`rt_event_recv()`之后停止计时。2个线程优先级相同。**260.75us ** 测试3:在测试2的基础上,执行完`rt_event_send()`后,立即使用`rt_sem_take()`阻塞。** 208.75us ** 测试4:在测试3基础上,线程2优先级更高。**144.75us** 测试5:TIM3设定500ms中断一次,在发送事件前开始计时,到被阻塞线程接受到线程后,计时停止。**157.25us** 测试6:在测试5基础上,新增加一个与线程1相同优先级仅执行`rt_thread_mdelay(10)`的线程。**157.75us**[/md] 之前在论坛里头看到有朋友说从中断产生,到线程阻塞接触仅需10余us,实测数据差距还是挺大的。当前测试总共都只有3个线程,从测试6来看,线程增多,这个切换时间可能更长。
撰写答案
登录
注册新账号
关注者
0
被浏览
1.3k
关于作者
robson
这家伙很懒,什么也没写!
提问
7
回答
17
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
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
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
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
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
8
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
3
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部