当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]嵌入式软件安全设计理念

嵌入式软件应用场合、硬件平台及操作系统的多样性,使嵌入式软件在各种不同条件下可能出现未知、不可预测的状况,即其潜在风险往往比通用PC机的软件要高。由于嵌入式软件应用场合特殊,往往在无人值守的情况下运行,高可靠性和安全性自然成为嵌入式系统的重要指标。
    在设计初期排查各种可能的风险,投入较低并可获得高回报。最终的产品质量也可以得到很好的控制。下面借鉴安全管理学思想,列举一些生活实例说明嵌入式软件设计的安全理念。

1 围墙问题
    学校修筑围墙,有一个问题——到底需要的高度是多少?过低,很容易翻越围墙进出,起不到围墙的屏障作用;过高,翻越的人滑落容易伤亡,这也不是修筑围墙的初衷。程序设计中的程序运行异常好比非法进出校园。一方面需要防止程序异常,这就类似修了围墙。但另一方面也需要注意围墙高度:围墙过高,轻易不出问题,但一出就是大问题。比如数据通信传输程序,加入CRC冗余校验。如果数据传输出现校验错误,CRC冗余校验可能恢复错误的数据。但是如果在设计测试初期就使用CRC校验,并且程序中没有警告信息,就有可能将错误延续到产品发布阶段。产品到现场出问题那就严重了。还有一个例子,看门狗程序是为了程序异常时自动重启恢复系统。如果在程序测试期间就使用看门狗,同样会屏蔽测试期间的程序跑飞、死机等问题,是不利于发现程序缺陷的。

2 修裤脚问题
    给孩子买了条裤子,试穿后发现裤子长了些,于是很精确地测量出需要截去10 cm。问题出现了,妈妈动手改好了之后,奶奶也给改短了10 cm,接下来的情景可想而知。这就是沟通问题,某成员在对某对象实施某行为的时候没有留下任何标记,使得其他成员未得到准确信息,带来下一步行为的失误。
    程序设计中同样也有类似问题。比如某进程对一个临界资源进行访问,并且没有任何标记,如果另一进程也访问该资源就会造成资源访问的冲突。通过信号量互斥保护就可以解决这一问题。另一个例子是在内存申请和释放方面。比如函数funA()调用funB(),在funA()或funB()中动态申请一段内存空间,并且将指向该内存的指针传给另一函数,在funA()或funB()中都可以释放内存。但是一定注意,需要沟通在哪个函数里进行,尤其当这两个函数分别由两个人完成的时候。不能出现两个函数都释放该内存或都不释放该内存的情况。

3 优势和不足
    两个游人出行,一个带伞,另一个不带伞。那天下了大雨,结果回来时带伞的人被淋得全身湿透,而不带伞的反而未被淋湿。原因何在?因为带伞的人认为自己带了伞不用躲雨,不知不觉就湿透了;不带伞的知道在雨中几秒钟就能全身湿透,所以一直注意在亭子下躲雨。
    程序设计中何尝不是如此?对认为不容易出问题的代码设计投入不足,测试工作少,对易出问题的代码投入大量精力,严加测试,最后的结果反而是容易出问题的代码质量更高。这就是设计人员常常遇到的情况——能想到的错误都解决了,想不到的错误都出现了。另外一个例子是:对于RS232串口通信,考虑到通信传输距离、外界干扰等问题,采用了数据校验和错误重发机制;对于I2C、SPI总线往往是短距离、同一电路板的芯片访问,都没有任何数据校验措施。结果有可能是RS232串口数据总是正确的,I2C、SPI总线的数据受不合理的布线及电磁干扰影响反而出现错误。因此对于嵌入式系统,需要根据实际的现场情况定制程序设计,而不是因为大多数人都这么做,或以前都这么做。

4 警告和避错
    电线杆上有特别亮丽的几个字,某行人好奇,爬上电线杆一看,四个大字:“油漆未干”。可见这个告示性文字反而害苦了这位行人。如果换一种方式,将电线杆周围容易被人接触到的地方围上一圈,就能很好地避免路人接触。当然这里还需要考虑成本和效用的平衡。
    嵌入式系统往往不需要人员值守就能正常工作,因此依靠警告、报错不能解决所有问题。你可以想象在驾驶飞机时,导航屏幕出现类似Windows系统的“内存空间不足,请关闭部分程序”警告的情形是多么可笑。在设计这一类程序的时候,应该考虑程序如何能自动解决一些异常情况,即使有些情况下必须进行人机交互,也应该考虑这时程序是否可以自动采取一些保护措施。比如数据读取异常报错,可以考虑用一个默认的数据;通信连接不上报错则需要检测通信是否恢复正常。
    以上从几个生活实例用类比的方式说明了嵌入式软件设计需要注意的一些问题,当然仅仅注意这几点对保证嵌入式软件的质量是远远不够的。文章的目的是通过几个易懂的实例强调设计安全意识以及软件产品质量意识的重要性。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭