嵌入式软件架构设计

1.常见的误解

1.1小型系统不需要架构设计

       架构应当满足当前需求并适当的考虑重用和变更

1.2 敏捷开发不需要框架

       极限编程, 敏捷开发的出现使一些人误以为软件开发无需再做架构了。 这是一个很大的误解。 敏捷开发是在传统瀑布式开发流程出现明显弊端后提出的解决方案, 所以它必然有一个更高的起点和对开发更严格的要求。而不是倒退到石器时代。事实上,架构是敏捷开发的一部分,只不过在形式上,敏捷开发推荐使用更高效,简单的方式来做设计。比如画在白板上然后用数码相机拍下的 UML 图;用用户故事代替用户用例等。测试驱动的敏捷开发更是强迫工程师在写实际代码前设计好组件的功能和接口,而不是直接开始写代码。
敏捷开发的一些特征:

  1. 针对比传统开发流程更大的系统
  2. 承认变化,迭代架构
  3. 简洁而不混乱
  4. 强调测试和重构

2 嵌入式系统的特点

2.1 与硬件密切相关

       这要求1,硬件以来独立成硬件抽象层;2,利用软件来实现一些硬件功能,减少硬件的依赖。

2.2 稳定性要求高

        大多数嵌入式系统都需要长时间开机或者是7*24小时开机,这要求嵌入式系统能够:

  1. 良好的模块设计
  2. 看门狗,心跳计数等
  3. 采用日志系统让系统能够快速定位问题所在
  4. 讲错误孤立在在最小的范围,让错误不会影响其他的模块

2.3 内存不足

2.4 处理器能力有限、性能要求高

        这要求我们队新知识要有全面的认知,不盲上新技术
        层次设计的不能太多,每一层都会有交互时间,影响性能

2.5 存储设备易损坏、速度较慢

        1,采用损耗均衡,在yaffs 等都带有损耗均衡保证flash的寿命,fat等也可以在fat源码上次实现损耗均衡算法。emmc,sd卡等期间已经在内部的flash控制器实现了这个算法以及ecc,坏款管理等。
        2,错误恢复,采用日志文件系统,如yaffs,ext4等文件系统。另一个是双备份。

3 软件框架

目的:为了代码库的重用和应对未来需求的变化
是什么:针对某个特定领域的抽象
解决耦合和应对变化:
1,逻辑解耦,每个模块没有逻辑耦合,可以单独工作
2,只是接耦:不懂领域的知识降低耦合性,只需要关注接口
3,变与不变:能够经常变化的模块与不变化的模块单独开来减少耦合,提高效率

4 自动生成代码/面向语言编程

面向语言编程的例子:web服务器+lua脚本+c库实现来实现一个嵌入式可编程系统和web服务

5 易于测试

好的架构不仅仅是功能实现还需要易于测试

6 总结

框架,自动化代码生成和测试驱动的架构是核心内容,其中框架又是贯穿始终的要素。 有人问我, 什么是架构师, 怎么样才能成为架构师?我回答说: 编码,编码,再编码;改错,改错,再改错。当你觉得厌烦的时候,停下来想想,怎么才能更快更好的完成这些工作?架构师就是在实践中产生的, 架构师来自于那些勤于思考, 懒于重复的人。

猜你喜欢

转载自blog.csdn.net/weixin_43369409/article/details/86618717