嵌入式技术论坛
直播中

ss

6年用户 8762经验值
擅长:电源/新能源 制造/封装 RF/无线
私信 关注
[问答]

rt-smart中断阻塞问题是怎么引起的

rt-smart 中断阻塞问题如何解决?
该问题是怎么引起的?
为了测试rt-smart的实时性,测试了一下中断的稳定性。
用systick的1ms中断做测试源。

平时都正常的,但是发现打印时,波形老是抖动,最后发现,MSH打印阻塞了中断。如下图。

黄线是MSH输出测试脚的波形
蓝线是中断里翻转IO的波形
可以明显看出MSH打印如果和中断重叠的话,中断被阻塞了。
重现步骤
只要MSH重复打印,就可以引起
报错信息
跟踪发现,阻塞原因是lwp_console.c文件里,打印消息前,中断被关闭了。

然而rt_device_write()恰恰是一个阻塞型的发送,这就造成了中断的长时间延误,影响了OS整体的延时。
LWP文件夹里,大量的关闭中断,是否都是必须的?还有其他阻塞型函数吗?如何修复更好?
rt-smart是要保留实时性的,中断稳定可靠是不能丢的。
讨论一下,如何修改。

回帖(5)

ss

2022-3-25 09:56:42
finsh 打印可以修改,这些代码里就只是把 finsh 当一个调试口在用,互斥资源直接关中断为了省事,没有仔细设计过。

另外,cortex-a 进个中断都费劲,要什么实时性。
rt-smart 比 linux/windows 实时性好就行了,想要实时性, cortex-r + 裸机。
举报

ss

2022-3-25 09:56:49
用中断没发现什么问题。这么高级的芯片,不追求一下实时性,太浪费了。
举报

ss

2022-3-25 09:56:56
系统实时性的要求与业务需求紧密相关,并不是实时性越高就越好。
举报

ss

2022-3-25 09:57:15
中断里执行了阻塞操作,造成了其他中断的阻塞。更严重的是,他执行阻塞操作前,还关了中断,虽然后面他还原了。对于其他中断,体现出来的效果就是中断阻塞。
如果不改,假如我开一个100us的硬件定时器,那么这个100us就无法保证了。
举报

ss

2022-3-25 09:57:23
不允许中断里进行阻塞操作啊,从理论上就避免这样操作。
中断里关中断倒是有些场景是可以用的,但是当中断操作太多执行时间过长了,这个中断函数就有调整优化的必要了。
rtt 里确实大量使用了关全局中断,造成关中断时间太多,很久之前我专门写过这个主题。在我的 serealX 文章里就尝试在串口驱动里减少全局中断关闭,仅仅关闭串口中断。这样在关闭串口中断的时候,还不影响其它外设中断响应。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分