需求:我的主线程需要同时获取线程A或中断B内的最新变化。
补充一点:这里提出的方法使用了信号量,但是这并不能保存好当前中断内的实时值,所以辅助线程的优先级要高,立马能够响应,这样就可以立即来获取此处中断内的实时值。
又或者,不使用信号量,新建使用一个消息队列来替代,这样就可以保存好实时值了(这样一共涉及两个消息队列, 然后,朝主线程发消息队列消息的线程A和辅助线程处,加互斥锁,这点不变)。
我的类似帖子:
https://club.rt-thread.org/ask/question/431797.html
看了下消息队列API函数源码,里面也是有开关中断操作的。
回到我的需求:我的主线程需要同时获取线程A或中断B内的最新变化。
那么,现在可以直接在线程A或中断B内调用消息队列发送消息的API即可。 看来,事情又回归简单了。
已请教大神确认,线程这边也不再需要在发消息的前后再次进行关开中断处理(rt_hw_interrupt_disable), 直接在线程A或中断B内调用消息队列发送消息的API即可。
补充一点注意事项:
需要确保在rt_mq_send函数执行过程中数据不会发生变动,等待发送完成。所以应该使用局部变量,不要使用在多线程中分布的全局数组等。
还有个问题,关外部中断期间,收到了外部中断,在打开中断后,可否继续响应该中断?
待实测说话!
还有第三个问题: 关于中断嵌套 =》 rtt支持中断嵌套。
疑问:如果关了中断后恰好又发生了中断嵌套,开中断后能否响应?这就有意思了。
.
好的