嵌入式系统功能概要设计说明_嵌入式软件架构设计实际该怎么做?
一 错误的示范
最近公司新招了一个做嵌入式软件开发的同事,该同事是从上海的某一个上市公司出来的,因为我们这边人手不够,因此把他安排了去负责一个新产品的研发,前期让他负责加速度计、NB-IOT、舵机、外置Flash的功能测试,测试完成之后,准备让他做一个该产品的概要设计。然后他花了2个星期的时间,给我们写出来一个概要设计,说实话,我看到这个概要设计,我就觉得是刚毕业的大学生写的。版本一的架构设计
2.1系统体系结构
系统分为两层:硬件驱动层、应用层。
2.1.1硬件驱动层
硬件驱动层包含板载硬件资源正常运行所需的所有驱动程序。
1)MCU初始化
2)I2C数据存取
3)SPI数据读取
4)加速度计初始化
5)蓝牙模块启动
6)BC95模块启动
7)485通讯模块启动
2.2.2应用层
1)Mcu运行模式切换
2)震动及倾斜
3)数据解析
4)开/关锁
5)数据发送
6)历史数据保存
看到版本一的架构设计之后,说实话,我还是第一次见到这样来写架构设计的,居然是以序号来写的,这个让别人读起来,特别的别扭。 版本二的架构设计
看到版本二的架构设计之后,虽然颇感欣慰,但是想到达到我们所要求的,还要很大的一段距离,该架构设计,主要有以下几点问题:
1.对架构的理解还不是很清晰,既然是做架构设计,那就应该从整体来看,而不是仅仅只是局限于一个模块,或者功能里面。
2.还是每个层次的理解也还不是很清晰,比如讲MCU的初始化,归于硬件驱动层里面。MCU的初始化,严格意义上来说,是属于流程的一部分了,而不是驱动。比如电脑的开启启动,把这个归于硬件的驱动里面,肯定是属于牛头不对马嘴的。
3.还有就是各个模块的启动,也是不能属于硬件驱动层的,也都是业务流程的一部分了,都不应该属于驱动层的一部分。
4.还有就是总线数据的读写,虽然驱动的作用也就是读写,但是数据总线的读写不能写成硬件驱动。
5.应用层的系统参数初始化,也还是属于流程。
6.数据的解析和数据的发生,都是属于通信功能里面的,不应该单独独立出来,属于单个的应用。
二 更改版基本框架图
(1)架构设计的目的
1.应用的代码逻辑清晰,且避免重复造轮子。
2.如果没有好的架构,移植将会是一件很痛苦的事情,因此一个好的架构设计,方便软件的移植。
3.最大限度地复用。
4.高内聚低耦合。 (2)设计思路
如何把硬件的驱动和一个功能封装成一个个的模块,然后可以像小朋友搭积木一个,一个个模块可以快速的拼接起来,组成一个个不同的模型。
我们的嵌入式架构思路也是来源于此,即功能模块化设计、分层设计。
这个设计和WEB开发的MVC模式类似,都是注重分层设计。
模块化设计:将收集到的需求,进行归类,总结和分析,将这些需求概括为一个个单独的功能,每一个功能,做成一个单独的功能模块。
分层设计一句话不好直接表达,其主要体现在一下几方面:
1.功能模块对外调用的模块封装成一个个API,将底层驱动做个API以供功能模块调用。(各个功能模块可以独立编译(如通信模块纯ANSI C,可在任意平台复用),或者调用驱动层接口(日志库模块调用了驱动读写Flash),总而言之,言而总之,封装出各个功能独立的可复用的功能模块。)
2.API分为驱动层API和应用层API,而不是所有程序都调用驱动层API。(整个应用中都调用驱动层API会导致应用中驱动调用随处可见,无法移植和最大限度的复用)
总体分 硬件驱动层-->功能模块层-->业务逻辑层-->应用层
总体结构示意框图:
说明:
1.层与层之间不能跨层调用。
2.模块与模块各自独立,无依赖关系。
3.模块提供统一的接口供上层调用,模块的内外接口分明。
4.模块的功能只能增,不能改。
5.各个功能模块层也还可以进行继续分层,比如接口层、驱动层、硬件层。(3)模块层次说明
硬件驱动层
硬件驱动层包含板载硬件资源正常运行所需的所有驱动程序并提供API给功能模块调用。
功能模块层
功能模块层包括实现具体功能的函数,通过调用驱动层API实现相应功能,同时提供可调用的API给业务逻辑层。
业务逻辑层
业务逻辑层包括产品整体功能的各个业务流程,通过调用功能模块层的API实现。
应用层
应用层将各个业务逻辑进行整合调用,完成整个产品的功能。(4)优势
如果驱动变动了,或者换不同平台,只需更改驱动层,应用层不受影响。
如果功能模块变动了,只需升级相应的功能模块,其他的模块不受影响,应用层也不受影响。
按照这种逻辑设计好之后,主要的工作就是在业务逻辑层。应用层则为程序的总体流程和框架,主要调用业务逻辑层实现不同的功能。
1.2019年第1期《单片机与嵌入式系统应用》电子刊新鲜出炉!
2.如何评判STM32各个MCU的性能?
3.连好莱坞都在讨论物联网。。。
4.我是MCU开发者,内存屏障和我有关吗?
5.从业15年的电源工程师转身后的哀叹。。。
6.想去Dialog拿2019年终奖不?
免责声明:本文系网络转载,版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。
嵌入式系统功能概要设计说明_嵌入式软件架构设计实际该怎么做?相关推荐
- 嵌入式与人工智能关系_嵌入式人工智能的发展趋势
嵌入式与人工智能关系_嵌入式人工智能的发展趋势 所谓嵌入式人工智能,就是设备无须联网通过云端数据中心进行大规模计算去实现人工智能,而是在本地计算,在不联网的情况下就可以做实时的环境感知.人机交互.决策 ...
- 嵌入式linux gif 缩放_嵌入式环境动力监控主机
点击上方蓝字关注我们! 嵌入式环境动力监控主机 基于嵌入式LINUX平台,针对机房.变电站.博物馆等环动监控场合设计,主机集成通信端口.采集模块和WEB监控软件,具有联网功能,可独立完成区域监控任务, ...
- python和嵌入式那个有前途_嵌入式的发展前景如何?
首先说下近期我对与嵌入式的认识,从前年开始我一直坚信一个方向,万物互联 = 5G + 物联网,这个物联网也可以理解为嵌入式. 嵌入式这个概念非常的广,几乎可以包括各行各业,从工作类型最常见的是分 ...
- 软甲架构设计软件_大型软件架构设计
前一篇说了原理,软件架构本质上是绘制一幅复杂素描所打的草稿,我还说,如果你罩得住,可以不需要这个草稿. 但这只是"理论上",我们写软件,基本上不是在写只有几千行的代码的小程序,而是 ...
- SoC嵌入式软件架构设计II:否MMU的CPU虚拟内存管理的设计与实现方法
大多数的程序代码是必要的时,它可以被加载到内存中运行.手术后,可直接丢弃或覆盖其他代码.我们PC然在同一时间大量的应用,能够整个线性地址空间(除了部分留给操作系统或者预留它用),能够觉得每一个应用程序 ...
- SoC嵌入式软件架构设计
内存是SoC(System on Chip,片上系统)集成设计的重要模块,是SoC中成本比重较大的部分.内存管理的软硬件设计是SoC软件架构设计的重要一环,架构设计师必须要在成本和效率中取得平衡,做到 ...
- SoC嵌入式软件架构设计之中的一个:系统内存需求评估
内存是SoC(System on Chip,片上系统)集成设计的重要模块.是SoC中成本比重较大的部分.内存管理的软硬件设计是SoC软件架构设计的重要一环,架构设计师必需要在成本和效率中取得平衡,做到 ...
- 嵌入式软件架构设计分层思路
在正规的项目开发中,项目往往是并行开发的,也就是说硬件设计.底层软件设计.应用软件设计等是同步进行的.比如说在开发板上调试模块驱动,在其他平台上调试应用程序再移植到目前这个平台等. 嵌入式专栏 1 为 ...
- 嵌入式系统软件架构设计
嵌入式系统软件架构设计 目录 1. 前言 4 2. 决定架构的因素和架构的影响 4 2.1. 常见的误解 5 2.1.1. 小型的系统不需要架构 5 2.1.2. 敏捷开发不需要架构 7 3. 嵌入式 ...
最新文章
- python xgb模型 预测_Python 调用 PMML
- Python诞生30年,《流畅的Python》作者要来中国了
- Redis进阶-细说分布式锁
- OSGI嵌入jetty应用服务器
- Swift中文教程(五)控制流
- AI 时代下的海量业务智能监控实践
- 遍历enum(连续型)
- mac自带录屏截图功能怎么使用?好用吗?
- Linux 脚本开机自启的几种方法
- 特斯拉又起火燃烧,一人死亡!公司又处于负面新闻中,马斯克到底有多难?
- Python Day05习题
- i春秋web-Backdoor(.git泄露、vim备份泄露、代码审计)
- 浅谈音乐与计算机,浅析电脑音乐在音乐教育中的应用
- 基于STM32的万能红外遥控器
- 能力素质有所欠缺_学有所思,思有所悟,悟有所行
- C++ 11 多线程之future
- 扫描版pdf电子书修改背景色
- 2022中式烹调师(中级)操作证考试题模拟考试平台操作
- 5.2 我们要什么样的知识和能力结构?——《逆袭大学》连载
- misc cover