随想录(安全关键系统和rtos)

【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】

    safety critical system,国内一般翻译成安全关键系统。安全,就是说系统必须能够长时间稳定运行、并且不可以发生故障,同时任何时候都不能对人造成伤害(包括失效的情况下),比如飞机控制系统、电梯系统、汽车自动驾驶系统等等。但是,我们都知道,即使代码测试了很长时间,还是存在失效的风险,所以工程师一般会采用多余度的方法来解决安全的问题。而另外一个词关键,简单说软件必须在规定的时间点,或者是规定的时间范围内做特定的事情。同样以汽车为例,假设汽车发现了行人,如果没有及时进行刹车,那么势必会造成十分严重的后果。

    如果说安全多是从硬件、系统的角度进行设计,那么关键更多的是由软件来完成的。实现这一方法的重要手段就是使用rtos。那么是不是使用了rtos就是满足实时性的关键系统了,也不是。

1、定时中断

    满足实时性的前提,就是在特定的时间点开始任务,并且在特定的时间范围内完成任务。所以,这个时候,系统任务什么时候唤醒、优先级如何设计都必须考虑到。越是关键的任务,优先级越高。然而,关键任务也不能太多。任务多了,实时性可能够了,但是数据吞吐量就要大大折扣了。所以,一般实时的任务少而精,高吞吐量、非实时的任务可以逻辑稍微复杂一些。

2、中断嵌套

    如果嵌入式硬件提供的中断过多,那么系统实时性分析起来就要考虑中断等各种因素,这对整个系统的设计其实是不利的。很容易在代码软件中引入不可控的因素,能用定时轮询的就不要用中断了。在软件开发过程中,也有必要统计一下关中断、开中断的最大时间。

3、抢占

    一般的实时系统都会提供关抢占、开抢占的功能。但是抢占一旦被关闭,那么高优先级的任务就没有办法按时执行了。所以,必须少使用或者不使用这个功能,这样整个流程才是确定的、也是唯一的。即使使用,也要严格判断关抢占、开抢占的最大时间是多少。

4、线程通信

    不同线程之间进行数据通信是少不了的。在读书的时候,一种常用的方法就是pv操作(生产者-消费者),所谓的一个发消息、一个收消息。然而,因为pv操作会频繁使用mutex和semaphore,这会涉及到很多的任务切换,所以个人建议关键任务最好的方法还是用共享内存的方法来解决。

5、时间统计和约束

    任务的时间点都是有严格要求的,因此有必要在任务切换的时候统计一下,看看花了多长时间、什么时候切换进来的、什么时候切换出去的,总共花了多久时间,有没有发生超时等等。

    网上有一个开源的匿名飞控代码,大家可以参考一下。它将任务简单分成了前后台任务,关键任务都是在周期中断内完成的,其他任务都是放在后台完成,这也是一种处理方法。不管什么样的关键系统,它的行为都必须要是在规定的时间开始、规定的时间结束、整个行为和流程是确定和唯一的,只要做到这一点,就可以说这是一个满足硬实时性的关键系统。

    安全关键,安全就是稳定、可靠、有保障,关键就是实时、唯一、确定。

发布了556 篇原创文章 · 获赞 3622 · 访问量 473万+

猜你喜欢

转载自blog.csdn.net/feixiaoxing/article/details/104024600