[Embeded--SW_分层]嵌入式C代码分层

原创 2015年07月11日 00:16:48
   问题描述:嵌入式、单片机中C代码实现较大的工程时,代码量非常大,查看维护起来也比较吃力,除非代码组织得层次分明,各个功能的划分很明晰,如果仅是一堆实现了功能的代码,没有进行层次的设计,维护起来将是一场噩梦。对C代码的分层设计知识在网络搜索学习了下,并结合自己的点点经验做下记录,方便以后更改和提升。
    一、分层模式概述--参考自[1]:

  分层(Layer)模式是最常见的一种架构模式。分层描述的是这样一种架构设计过程:从最低级别的抽象开始,称为第1层。这是系统的基础。通过将第J层放置在第J-1层的上面逐步向上完成抽象阶梯,直到到达功能的最高级别,称为第N层。分层模式可以定义为:将解决方案的组件分隔到不同的层中。每一层中的组件应保持内聚性,并且应大致在同一抽象级别。每一层都应与它下面的各层保持松散耦合。

  分层模式的关键点在于确定依赖:即通过分层,可以限制子系统间的依赖关系,使系统以更松散的方式耦合,从而更易于维护。

  相对于分层,还有一种概念叫分区。分层是对架构的横向划分,而分区是对架构的纵向划分。典型的分层方式是应用程序专用功能位于上层,跨越应用程序领域的功能位于中层,而配置环境专用功能位于低层。层的数量与组成取决于问题领域和解决方案的复杂程度。通常而言只有一个应用程序专用层。应当把子系统组织成分层结构,架构的上层是应用程序专用子系统,架构的低层是硬件和操作专用子系统,中间件层是通用服务。

   对系统进行分层有如下基本原则:

   ·可见度。各子系统只能与同一层及其下一层的子系统存在依赖关系。

   ·易变性。最上层放置随用户需求的改变而改变的元素。最底层放置随实施平台(硬件、语言、操作系统、数据库等)的改变而改变的元素。中间的夹层放置广泛适用于各种系统和实施环境的元素。如果在这些大类中进一步划分有助于对模型进行组织,则添加更多的层。

   ·通用性。一般将抽象的模型元素放置在模型的低层。如果它们不针对于具体的实施,则倾向于将其放置在中间层。

   ·层数。对于小型系统,三层就足够了。对于复杂系统,通常需要5-7层。无论复杂程度如何,如果超过10层,就需要慎重考虑了。层数越多,越需慎重。

   创建自己的分层架构。基本过程如下:

  1.使用定义明确的一组标准将解决方案的功能组织成一组层,并定义每一层所提供的服务。

   2.定义每一级别之间的接口以及它们彼此通信所需的协议。

   3.设计层的实现。


  二、分层的好处--参考自[2]

 

  • 隐藏细节,提供抽象,隐藏的细节包括数据的表示、功能的实现
  • 在新的一层建立更高层的“语言”
  • 接口清晰,修改维护方便
  • 方便开发,将软件分为若干层次,逐层实现
   三、分层与便于移植--参考自[3]
   最底层采用Adapter模式,把不同操作系统的API封装成一套统一的接口。最上层采用MVC模型,分离界面表现与内部逻辑代码。把大部分代码放到内部逻辑里面,界面仅仅是显示和接收输入,即使要换一套GUI,工作量也不大。这同时也是提高可测试性的手段之一,当然还有其它一些附加好处。
   
  四、嵌入式系统的分层--参考自[4]
   嵌入式系统分为4层,硬件层、驱动层、操作系统层和应用层。
   1.硬件层:是整个嵌入式系统的根本。如果现在单片机及接口这块很熟悉,并且能用C和汇编语言来编程的话,从嵌入式系统的硬件层走起来相对容易,硬件层也是驱动层的基础,一个优秀的驱动工程师是要能够看懂硬件的电路图和自行完成CPLD的逻辑设计的,同时还要对操作系统内核及其调度性相当的熟悉的。但硬件平台是基础,增值还要靠软件。
  硬件层比较适合于电子、通信、自动化、机电一体、信息工程类专业的人来搞。需要掌握的专业基础知识,有:单片机原理及接口技术、微机原理及接口技术、C语言等。
  2.驱动层:这部分相对而言比较难。驱动工程师不仅要能看懂电路图,还要能对操作系统内核十分的精通,以便其所写的驱动程序在系统调用时,不会独占操作系统时间片,而导至其它任务不能动行。若不懂操作系统内核架构和实时调度性、没有良好的驱动编写风格、按大多数书上所说添加的驱动的方式,这样可能连个初级的驱动工程师的水平都达不到,这样所写的驱动在应用调用时就如同windows下我们打开一个程序运行后,再打开一个程序时,要不就是中断以前的程序,要不就是等上一会才能运行后来打开的程序。想做个好的驱动人员没有三、四年功底,操作系统内核不研究上几遍,不是太容易成功的,但其工资在嵌入式系统四层中可是最高的。
  驱动层比较适合于电子、通信、自动化、机电一体、信息工程类专业尤其是计算机偏体系结构类专业的人来搞。当然除硬件层所具备的基础学科外,还要对数据结构与算法、操作系统原理、编译原理都要十分精通。
  3.操作系统层:对于操作系统层而言目前可能只能说是简单的移植,而很少有人来自已写操作系统,或者写出缺胳膊少腿的操作系统来,这部分工作大都由驱动工程师来完成。操作系统是负责系统任务的调试、磁盘和文件的管理,而嵌入式系统的实时性十分重要。据说,XP操作系统是微软投入300人用两年时间才搞定的,总时工时是600人/年;中科院软件所自己的女娲Hopen操作系统估计也得花遇几百人/年才能搞定。因此这部分工作相对来讲没有太大意义。
   4.应用层:相对来讲较为容易。如果会在windows下如何进行编程接口函数调用,到操作系统下只是编译和开发环境有相应的变化而已。如果涉及Jave方面的编程也是如此的。嵌入式系统中涉及算法的由专业算法的人来处理的,不必归结到嵌入式系统范畴内。但如果涉及嵌入式系统下面嵌入式数据库、基于嵌入式系统的网络编程和基于某此应用层面的协议应用开发(比如基于SIP、H.323、Astrisk)方面又较为复杂,并且有难度了。


[1]http://club.topsage.com/thread-2777743-1-1.html

[2]http://blog.csdn.net/wang_8910/article/details/6306535

[3]http://bbs.chinaunix.net/thread-1092073-1-1.html

[4]http://www.elecfans.com/emb/app/20120820285075_2.html

版权声明:本文为博主原创文章,未经博主允许不得转载。

嵌入式软件分层设计思想

一、遇到的问题   通过这一段时间业务代码编写实践,体会到了之前的代码结构的缺陷:   (1)开发效率低:每次使用片内的某一资源(例如定时器等),笔者都要去查询CC2430中文手册,比较e...

嵌入式代码编写规范

**嵌入式代码编写规范** ————- 该文章是自己总结出来的编码风格,用于规范自己的代码,增强可读性,非标准规范。强制自己形成良好的编码风格,有利于开发大规模程序而不显得杂乱。 参考STM32固件库...

编写优质嵌入式C程序

前言:这是一年前我为公司内部写的一个文档,旨在向刚踏入嵌入式编程的年轻工程师们介绍如何在裸机环境下编写优质嵌入式C程序。本文通过一些我遇到的、同事遇到的或者一些前人遇到的典型案例来分析嵌入式C中的一些...

C语言编程代码架构搭建——代码分层

底层驱动 初始化配置表 硬件抽象层 对GPIO抽象化 中间交换层 接收缓存区设置 变量标志位 系统任务调用层 基本检测事件任务 软件协议处理任务 硬件控制处理任务 DEBUG调试模式 像Linux一样...

Linux下驱动:分层、分离机制学习笔记

一、分离分层的概念         即把硬件相关和相对稳定的东西给抽出来,并向上提供统一的接口,每一层专注于自己的事情。比如输入子系统。 二、bus-dev-drv模型...

嵌入式项目代码结构的分层——HAL(硬件抽象层)、FML(功能模块层)、APL(应用程序层)

http://www.cnblogs.com/hustlzp/ http://hustlzp.com/ 一、遇到的问题   在“Zigbee之旅”系列博文中,每写一篇笔者都会编写...
  • wzk456
  • wzk456
  • 2015年05月13日 10:02
  • 826

嵌入式软件设计(2)--ARM体系结构

CISC体系结构和RISC体系结构计算机体系结构计算机体系结构是指从用户角度看到的计算机属性,其中包括计算机的指令集、可见存储器、存储器管理单元和异常处理模式等。CISC体系结构CISC(Comple...

消息机制在软件设计中的应用

消息机制是个实用的东西,不知道是何人发明,个人见识较少,最早见于WIN32编程,关键的几句代码大约是:while(GetMessage (&msg, NULL, 0, 0))        {    ...
  • chehlcy
  • chehlcy
  • 2009年09月01日 11:15
  • 910

[Embeded--SW_分层]C代码分层

简述C为函数式语言,使用模块化的设计会对开发大型项目带来很多好处。C的模块化也可以模拟一些OO的特点。层次化与模块化C语言的应用领域,如通讯领域和嵌入式系统领域,一个的软件项目通常包含很多复杂的功能,...

使用embeded tomcat进行嵌入式tomcat-启动tomcat

使用embeded tomcat进行嵌入式javaee开发-启动tomcat https://www.iflym.com/index.php/code/use-embeded-tomcat-to...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[Embeded--SW_分层]嵌入式C代码分层
举报原因:
原因补充:

(最多只允许输入30个字)