0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何正确的设计嵌入式软件架构应该这么做

Q4MP_gh_c472c21 来源:未知 2019-01-29 15:45 次阅读

错误的示范

公司新招了一个做嵌入式软件开发的同事,该同事是从上海的某一个上市公司出来的,因为我们这边人手不够,因此把他安排了去负责一个新产品的研发,前期让他负责加速度计、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)优势如果驱动变动了,或者换不同平台,只需更改驱动层,应用层不受影响。如果功能模块变动了,只需升级相应的功能模块,其他的模块不受影响,应用层也不受影响。按照这种逻辑设计好之后,主要的工作就是在业务逻辑层。应用层则为程序的总体流程和框架,主要调用业务逻辑层实现不同的功能。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16016

    浏览量

    343599
  • 嵌入式
    +关注

    关注

    4981

    文章

    18281

    浏览量

    288419
  • API
    API
    +关注

    关注

    2

    文章

    1382

    浏览量

    60990

原文标题:嵌入式软件架构设计实际该怎么做?

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    嵌入式软件开发应该掌握哪些知识?

    嵌入式软件开发应该掌握哪些知识? 一、 什么是嵌入式软件嵌入式
    发表于 02-19 11:23

    诚聘嵌入式软件架构

    猎头职位:嵌入式软件架构师【厦门】岗位职责:1、负责软件系统总体方案设计和详细设计,负责核心代码编写;2、负责技术方案评审,负责制定系统测试方案;3、负责新技术和关键技术的跟踪、研究和
    发表于 03-01 10:20

    嵌入式软件工程师从初级迈入合格,可以这么

    高端的ARM类Intel Xscale架构下的IXP网络处理器CPU内部集成了PCI控制器,还集成了3个NPE网络处理器引擎。从软件上理解。嵌入式系统就是在定制操作系统内核里将应用一并选入,编译后将内核
    发表于 08-29 20:03

    嵌入式软件工程师从初级迈入合格,可以这么

    高端的ARM类Intel Xscale架构下的IXP网络处理器CPU内部集成了PCI控制器,还集成了3个NPE网络处理器引擎。从软件上理解。嵌入式系统就是在定制操作系统内核里将应用一并选入,编译后将内核
    发表于 09-02 22:18

    嵌入式系统 硬件与软件架构(英文)

    嵌入式系统 硬件与软件架构(英文)
    发表于 01-23 14:30

    嵌入式系统 硬件与软件架构(英文)

    嵌入式系统 硬件与软件架构(英文)
    发表于 02-27 09:27

    嵌入式系统的软件架构设计!

    1. 前言嵌入式软件设计领域的一个分支,它自身的诸多特点决定了系统架构师的选择,同时它的一些问题又具有相当的通用性,可以推广到其他的领域。提起嵌入式
    发表于 08-10 07:46

    嵌入式软件开发中的程序架构

    嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必须认真考虑的问题。软件架构对于系
    发表于 02-02 06:58

    嵌入式架构有多重要

    原有的代码。接下来嵌入式ARM便和大家分享一下,嵌入式架构那些事儿……01嵌入式系统的基本架构嵌入式
    发表于 10-27 08:15

    嵌入式软件架构相关资料下载

    嵌入式软件架构
    发表于 10-28 09:43

    为何要进行嵌入式软件架构设计?如何设计?

    为何要进行嵌入式软件架构设计?如何进行嵌入式软件架构设计?
    发表于 11-01 06:31

    决定嵌入式系统软件架构的因素和架构的影响

    嵌入式系统软件架构设计目录1.前言42.决定架构的因素和架构的影响42.1.常见的误解52.1.1.小型的系统不需要
    发表于 11-08 06:54

    嵌入式软件基础的四层架构分别是哪些

    嵌入式软件分层架构基本原则有哪些?嵌入式软件基础的四层架构分别是哪些?
    发表于 12-24 07:57

    嵌入式音频软件架构的相关资料分享

    本文转载自:http://www.cnblogs.com/talkaudiodev/p/7077034.html转载—–>嵌入式音频软件架构嵌入式产品中语音通信和音乐播放的
    发表于 12-24 06:39

    嵌入式软件架构

    嵌入式软件架构
    发表于 10-20 20:51 20次下载
    <b class='flag-5'>嵌入式</b>系<b class='flag-5'>软件</b><b class='flag-5'>架构</b>