Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
中断
线程
交互
理解编写线程和中断的程序时要特别留意的原因 如何在两者间做安全的传递数据的交互
发布于 2021-07-13 10:42:36 浏览:868
订阅该版
![image.png](https://oss-club.rt-thread.org/uploads/20210713/4c6475fb33a40b274360d05b228d099f.png.webp) 个人感觉,中断和线程处理数据交互,可以使用一个队列结合信号量的方式,提升整体容错率。 消息队列不知道能不能用,可以查看下。 原则是:凡是内部涉及互斥锁mutex调用的API都不能在rt-thread的中断服务函数内使用。 补充说明: 中断和线程内不能有“同时写”同一个变量的场景,这是危险的。 并不是说,中断和线程不能都写同一个变量。如果中断和线程都出现了写同一个变量的语句,只要能够做到绝对不会“同时进行”,这也是可以的。 所谓的“同时写”,指的是线程A正在写变量a,但是还没写完,从汇编角度刚读取了其且进行了处理,假设该处理是+1操作,那么就得到了运算结果a+1,该结果尚未写入到变量A,此时!发生了中断!然后在中断内又写了变量a,且进行处理,假设对a置位为0了,那么在中断服务程序结束后,退回到线程A内,线程A会继续将之前得到的a+1,写入到变量A。 最造成的结果时,虽然中断服务程序写了0,但是却被线程的a+1的操作给覆盖了! 那这样的中断程序岂不是一点用处都没了。所以,不能“同时写”,这是危险的。
查看更多
sync
2021-07-13
这家伙很懒,什么也没写!
可以参考RT-thread对串口的处理方式,使用消息队列来实现数据传递 ```c /* 接收数据回调函数 */ static rt_err_t uart_input(rt_device_t dev, rt_size_t size) { struct rx_msg msg; rt_err_t result; msg.dev = dev; msg.size = size; result = rt_mq_send(&rx_mq, &msg, sizeof(msg)); if (result == -RT_EFULL) { /* 消息队列满 */ LOG_E("message queue full!"); } return result; } ```
4
个回答
默认排序
按发布时间排序
liuduanfei
2021-07-13
这家伙很懒,什么也没写!
从内核实现中学习 是个好的方式
XXDQ_1957
2021-07-19
这家伙很懒,什么也没写!
这种使用场景本来不该用信号量吧,这个场景需要把所有历史信息记录下来。 我一开始看兄弟你的描述, 如果单纯防止“同时写”, 不是只要在线程写变量的时候禁中断不就可以了吗,再看一看才发现我理解错了。。。
123
认证专家
2021-07-13
这家伙很懒,什么也没写!
https://club.rt-thread.org/ask/question/431797.html aozima 大佬总结的挺好的了。
撰写答案
登录
注册新账号
关注者
0
被浏览
868
关于作者
大话西游2018
这家伙很懒,什么也没写!
提问
36
回答
40
被采纳
1
关注TA
发私信
相关问题
1
请问执行rt_thread_delete的操作后,线程还在运行是什么情况?
2
rtthread中,线程中的ADC采样率需求比时钟嘀嗒需求高怎么办?
3
有没有检测系统中有没有某个名字的线程的接口函数?
4
使用finsh 进行ota成功,线程里开ota失败
5
调度锁会引起线程内存不足
6
线程处于close状态消耗资源吗
7
paho_mqtt线程相关疑问
8
thread中不能使用rt_timer_start() 来开启定时器
9
线程递归是什么形成的?
10
程序运行一会儿报错,拜托拜托
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
机器人操作系统 (ROS2) 和 RT-Thread 通信
4
国产MCU移植系列教程汇总,欢迎查看!
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
NXP MCXN947测评(二)ETH设备使用
2
【RA8D1-Vision Board】适配 LVGL V8
3
VISION BOARD 第二弹 基础工程配置和点亮一个LED灯
4
musb移植问题记录【设备注册3次挂起】
5
关于使用CherryUSB时候使用外挂的usb phy 芯片配置的一点注意事项
热门标签
RT-Thread Studio
串口
LWIP
Env
SPI
Bootloader
AT
ART-Pi
Hardfault
CAN总线
FinSH
USB
文件系统
RT-Thread
DMA
SCons
线程
RT-Thread Nano
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
ota在线升级
WIZnet_W5500
I2C_IIC
UART
flash
cubemx
packages_软件包
freemodbus
潘多拉开发板_Pandora
PWM
定时器
ADC
BSP
中断
keil_MDK
编译报错
socket
MicroPython
GD32
msh
Debug
ulog
SDIO总线
SFUD
rt_mq_消息队列_msg_queue
C++_cpp
本月问答贡献
xiaorui
7
个答案
3
次被采纳
sakumisu
4
个答案
3
次被采纳
三世执戟
31
个答案
1
次被采纳
梦笑真美
18
个答案
1
次被采纳
踩姑娘的小蘑菇
14
个答案
1
次被采纳
本月文章贡献
Z_Y
2
篇文章
5
次点赞
Alipay
2
篇文章
3
次点赞
2345vor
2
篇文章
1
次点赞
比特饼干
1
篇文章
6
次点赞
Lu_盼盼
1
篇文章
3
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部