嵌入式底层软件开发学习系列之六软件工程

  本节按照项目的周期来分析: 需求与立项,软件硬件设计,编码实现与调试,量产前测试,小规模量产测试, 大规模量产测试,  后期维护;等过程中软件部分的工作点。重点将体现与纯软件开发的差异

(1) 需求与立项

与企业应用等软件开发比较起来, 嵌入式底层开发的需求相对较简单, 主要是搞清最终芯片产品要支持哪些协议,设备的性能(工作效率和使用电量)需求:


a. 分析产品的用途,适用范围和功能. 若市场上已有同类产品, 要分析自身的优势(成本,性能,兼容性,扩展性)在哪

b. 根据性能目标与造价成本,确定系统选用何种cpu, 计算量较大的项目还需要考虑协处理器的选择或自行设计。软件要考虑是否使用操作系统, 操作系统了类别与Size.

c. 与上位机通讯采用何种接口。 如采用PCIE/SATA,/USB/II2C/SPI等等, 确定需要使用一种或多种接口; 选定通讯协议后还要考虑基于这些协议的应用层的协议。

d 内部功能的实现, 要考虑ram, rom的大小, 以及外部存储模块 。 主功能采用哪些第三方芯片或IP来开发, 哪些硬件功能模块需自行开发与设计。同时也要考虑哪些软件功能能复用已有项目,或开源项目, 其占用存储空间与执行效率。

e. 成本与功能可行性分析, 对于新的开发领域需详细阅读与学习各种相关规范, 甚至需要开发人员进行代码级的预研。 主要考虑目标性能与功能否达到,且最终产品成本与开发成本能否符合预期。若性能与成本都不及市场上已有产品,则项目基本不可行。



  (2) 软件硬件设计

a. 设计整个软件的架构, 决定好操作系统, 第三发软件, 和要重用的模块。

b. 对于需要新设计的硬件功能, 需要与硬件工程师一同确定哪些功能由硬件设计, 哪些由软件设计。 硬件的优势在于性能好, 而软件的优势在于成本较低且扩展性好。 与硬件工程师共同编写硬件控制的spec或datasheet

c. 对于采用第三方芯片的模块,需要阅读规范。并查看已有的代码或示例代码的实现程度。 根据这些资料设计代码的修改或优化点, 并编写相应设计文档。

d. 设计需要全新实现的软件模块。

   与纯软件开发的不同在于: 要划分软硬件功能,设计软硬件接口规范。 另一点就是要考虑软件设计方案的硬件资源占用率与量。尽可能的采用硬件需求低的方案, 比如需要一个128KB的E2PROM ,那么就要思考能否采用64KB的方案呢。假设一个能省10分钱的成本, 1000万片就能省100万。 所以软件设计中要有较强的成本观念。 

  无论是采用结构化设计方法还是面向对象设计方法, 不要忽视软件设计的本质是提高内聚,降低耦合, 提高可维护性与重用性。 但对于性能影响较大的关键路径(嵌入式cpu性能比PC低), 因而要在软件的重用性,执行效率和软件占用资源率之间找到一个平衡。这也是与纯软件开发的一个不同点。

e. 补丁系统设计。 嵌入式软硬件都难免出现未发现的bug, 特别是到后期可能出现硬件bug,需要软件来解决。 所以设计一个好的补丁方式是必不可少的。特别是对于无法更新整个软件(固件)的嵌入式系统。补丁系统还要考虑到能对不同客户,扩展一定的功能。

f. 设计测试与验证方法, 并编写测试用例文档。


(3) 编码实现与调试

对于软硬件同时开发的模块, 需要联合硬件工程进行调试;某些功能需要在模拟器/仿真器上调试


(4) 量产前测试

  由于还没有最终产品, 一般是在开发板或FPGA板上进行测试。 需要分析与最终平台的区别, 分析哪些功能未能验证到, 

需要对这部分代码进行其它测试来弥补。 下面是弥补方法:

(1) 用软件模拟实现一个底层的桩模块, 来测试上层待测试模块流程的正确性。

(2)  建立软件的仿真模型, 通过仿真的方法测试对硬件控制是否正确。

(3) 加强对这一部分代码的软件审查

另外, 对于无法更新整个软件(固件)的嵌入式系统; 补丁功能的测试是重中之重。 

  最后一点是, 尽可能的加强测试的自动化实现(如测试到各种配置硬件参数); 对于一些不能完全自动测试的地方(如需要人通过第三方工具来测量的部分), 也可以设计具有提示功能的半自动测试软件。 这样可以提高测试效率。 


(5) 小规模量产(或试生产)测试

小规模量产后需要再次完整测试软硬件, 不能因为之前测过了就不再测试(或掉以轻心), 因为这时硬件平台发生了一定的变化, 任何改变可能带来硬件功能的变化。

另外还需测试上一阶段无法测试的极端条件测试, 如高(低)温, 高(低)电压, 静电,电磁干扰等测试项。 


(7)大规模量产测试

这时如果出现问题, 硬件芯片级的修改已经不可能了, 只能通过板级的,或软件层的修改(要靠补丁系统)来解决问题了。某些硬件问题也需要软件来fix


(6) 后期维护

与 大规模量产测试后发现问题的处理方式基本相同。


该过程中软件代码(文档)的版本控制, bugs追踪管理, 项目追踪管理与普通软件开发采用的方法与工具并无区别。


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值