关于嵌入式软件架构的一点理解

时间:2016年 1月24日 星期日 

特别地,今天广州是67年来第一次下雪,然后我的大学也走过了一年有余了,借下雪的广州来勉励自己。


做了一年多的嵌入式开发(博主我是从大一开始参与到一线开发的,负责嵌入式软件开发,期间接触到实时uCOS-II和分时Linux),感觉在这个寒假需要重新整理一下思路。当然,由于本人的实力不足,还请各位看官见谅见谅,如果有什么不合理的地方,请直接私信,谢谢!~~


一:嵌入式软件需要设计软件框架吗?

1)在接手第一个项目的时候,我认为:简单的单片机程序不需要设计软甲框架,毕竟软件框架的设计需要时间和实践去验证其正确性和稳定性,更何况在生产规模不大和需要变更少的情况下设计软件框架或许会延长了开发时间,造成开发成本的上升。

2)但从2015年年底的时候,因为一个项目亟需修改功能,而在此之前我并没有认真设计软件整体架构,一直都是沿用一个大循环的模式去实现基本功能。最后,修改的时间相当长久,这里有经验不足的问题。随着接下来的项目往复杂、多功能化的变化,我认为我有需要设定一个较稳定的嵌入式软件框架。

3)综上所述,得知,即使嵌入式软件代码量少、功能简单都不能缺少软件架构的建立。我们都知道,嵌入式是软件硬件高度结合的产物,它的维护成本甚至高于一般的软件设计。


二:嵌入式软件需要怎么样的软件框架?

1)嵌入式软件的特定是:

a)嵌入式软件高度依赖于硬件。硬件会在不同方面上对软件设计设定“天生”的限制,而软件对这种类型的限制是不能抗拒的。

b)硬件的变更会对嵌入式软件造成巨大的影响。只有资深软件工程师会对不同的硬件接口等有深入的理解,但事实上并非所有人都具备这样的开发能力,尤其是想博主一样的学生。

c)嵌入式软件整个过程都是在硬件上进行的。除了特殊功能和非功能(即需求之外,包括逻辑等)问题是单纯的软件设计问题,其余都必须要配合到硬件工程师去调试测试。

d)嵌入式软件设计出来的产品往往是需要高度稳定性。因为,产品是用户能够触摸到的,这个用户体验是用户最直接的,我们无可避免去考虑各种各样的特殊要求去适应高度的稳定性。

e)同样是受限于硬件问题,嵌入式软件设计大部分是面向MCU、SOC等,这样就造成了不同的硬件平台对软件设计造成影响,最明显的就是内存问题,堆栈到底够用否?软件设计方案有可能因为硬件平台的不同而发生了不同的改变,比如我之前做一个项目包含了大数据量的传输工作,那我就需要将cpu和内存都留给数据以完成传输工作,这时间内,我若在再去进行同样消耗资源的操作就会使得软件崩溃。

f)嵌入式产品同时还需要实现较多复杂的功能。如今的互联网时代提出了更加高端的设备要求,机器人的机器学习、机器视觉等都需要GPU的进一步升级。而这时候也需要软件的多次升级。

2)嵌入式软件架构特定:

a)尽可能地多适应不同硬件平台。需要做的是:实现硬件抽象层的设计,将硬件转换了稳定的设备底层库。

b)尽可能地稳定、可靠。数据备份技术等

c)尽可能地方便测试。包括单元测试、集成测试及其回归测试等。

d)软件可以实现一些硬件功能,比如常用的模拟通信技术:模拟IIC、模拟SPI,当然,使用了框架之后,这些通信还是使用硬件平台的好,速度和稳定及错码率低。


三:就目前而言,本人通过学习研究,并且请教过不少具有多年工作经验的工程师。得出了如下结论:

1)嵌入式软件其实可以有它自己通用常用的软件框架设定模式。



未完待续!~

你可能感兴趣的:(随意一笔)