为了测试rt-smart的实时性,测试了一下中断的稳定性。
用systick的1ms中断做测试源。
平时都正常的,但是发现打印时,波形老是抖动,最后发现,MSH打印阻塞了中断。如下图。
黄线是MSH输出测试脚的波形
蓝线是中断里翻转IO的波形
可以明显看出MSH打印如果和中断重叠的话,中断被阻塞了。
只要MSH重复打印,就可以引起
跟踪发现,阻塞原因是lwp_console.c文件里,打印消息前,中断被关闭了。
然而rt_device_write()恰恰是一个阻塞型的发送,这就造成了中断的长时间延误,影响了OS整体的延时。
LWP文件夹里,大量的关闭中断,是否都是必须的?还有其他阻塞型函数吗?如何修复更好?
rt-smart是要保留实时性的,中断稳定可靠是不能丢的。
讨论一下,如何修改。
内容我也提交了issue:
https://gitee.com/rtthread/rt-thread/issues/I4UDRG
finsh 打印可以修改,这些代码里就只是把 finsh 当一个调试口在用,互斥资源直接关中断为了省事,没有仔细设计过。
另外,cortex-a 进个中断都费劲,要什么实时性。
rt-smart 比 linux/windows 实时性好就行了,想要实时性, cortex-r + 裸机。
用中断没发现什么问题。这么高级的芯片,不追求一下实时性,太浪费了。
系统实时性的要求与业务需求紧密相关,并不是实时性越高就越好。