[011] [RT-Thread学习笔记] 如何判断IPC通信的收发函数能否在中断上下文中使用

RT-Thread
学习笔记
如何判断
为什么?

RT-Thread版本:4.0.5
MCU型号:STM32F103RCT6(ARM Cortex-M3 内核)

1 如何判断

首先,IPC通信的初始化/脱离、创建/删除函数肯定不能在中断上下文中使用,因此这里主要判断IPC收发、等待这些函数可以使用的环境。

简单粗暴的判断方法:只要函数中有thread = rt_thread_self();(如果调度器还未启动,则返回RT_NULL)这条语句,如果采用阻塞方式(timeout>0)调用就不可以在中断上下文中使用。

主要包含的函数为:信号量的获取、互斥量的获取和释放、事件集的接收、邮箱/消息队列的等待方式发送和接收。

2 为什么?

上述函数都是基于当前线程来执行相应操作的,如果资源不可用或者不存在且超时时间不为0时,函数调用时将变成阻塞方式(虽然互斥量的释放动作不会造成阻塞,但互斥量只能由持有线程释放),若在中断中使用不仅会破坏当前想调用上述函数的线程调用它们的时机,而且其他没有调用上述函数的线程,当它们在运行过程中被中断打断时,也会让它们强制调用上述函数。因此,这样做会导致同步失败、通信紊乱,甚至会使系统崩溃。

END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柯西的彷徨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值