C语言嵌入式系统编程软件设计研究论文

时间:2022-12-13 08:32:35 设计 我要投稿
  • 相关推荐

C语言嵌入式系统编程软件设计研究论文

  摘要:近年来,C语言编程在嵌入式系统越来越受到广大技术人员的青睐。介绍了C语言系统软件的编程思路,阐述了嵌入式系统编程软件架构的基本知识,包括模块划分、分层架构、中断服务程序编写、系统软件设计要领等,并给出了在编写嵌入式系统C语言时基本架构所包含的主要内容。

C语言嵌入式系统编程软件设计研究论文

  关键词:C语言;嵌入式系统;程序框架

  1概述

  C语言的广泛应用主要是因其具有出色的移植性,能够在多种不同体系结构的软件或硬件平台上运行;语法机制结构紧凑、使用灵活并能直接访问硬件;并具有很高的运行效率。与一般形式的软件编程相比,嵌入式系统有其特殊性,其面向的是一种专用的计算机系统,既有应用层次上的通用性,也有硬件操作的复杂性。因此,运用高效合理的编程构架和设计流程,规范管理编程的过程,对于提高程序的安全性可靠性是十分有利的,同时可以提高软件的开发、执行、维护效率。在常规软件编程基础上,把分层思想、模块化思想、面向对象技术应用到嵌入式C语言编程系统中,对嵌入式编程中的模块划分、分层架构、中断服务程序编写、系统软件设计思路进行讨论。嵌入式系统的高速发展使得对其编程的效率与质量有了更高的要求和标准,更需要一种更加普遍并高效的编程框架与基本标准,以供广大技术人员参考与使用。

  2模块划分

  模块划分是指把一个复杂的、综合性的程序根据可实现的不同功能分成小段,每一小段可实现一个特定的功能。软件应尽量减少与外部模块的联系,提高程序的可移植性,并且明确其可实现的功能。一般情况下,嵌入式系统包含硬件驱动模块与软件功能模块。一个硬件驱动模块对应一种特定的硬件,划分软件功能模块时应尽量满足低偶合、高内聚的基本要求。设计实现不同功能的模块时,有两个重要原则,(1)模块的独立性,各个功能模块之间不会有信息交叉混淆,不会互相影响互相依存,一个模块中函数指令不需要其他模块的变量,模块之间的连接通过函数接口来实现。(2)正交性,各个功能模块是唯一确定的,其中的变量与其实现的功能是无歧义的。在划分模块时有下列注意事项:(1)某一个模块提供给其他功能模块所需调用的数据和外部函数需在头文件(.h)中以extern关键字来声明。(2)某功能模块内的全局变量与函数信息需在.c文件的开头以static关键字进行声明。(3)一个模块由一个.h文件和一个.c文件结合而成,此模块的接口在头文件(.h)中声明。(4)头文件(.h文件)中不能定义任何变量。定义变量是汇编阶段的概念,会依据要求分配内存。

  3分层架构

  3.1分层方向

  分层技术有两个方向,目前嵌入式系统应用层开发常用的方法是自顶向下,即从抽象到具体,从逻辑整体描述规范或者最顶层的程序为起点向下延伸到具体的操作模块。自底向上是另一个思路,即从具体功能到抽象实现,是在硬件驱动开发中常用的方法。先分析功能模块,使其作用在某个应用对象上,分析常用操作的方式。这两个方法各有优势,为了达到较好的效果,在系统软件设计过程中,可按照具体需求把这两种方法混合使用。在逻辑分析应用时采用自顶向下的方式,规范功能模块的逻辑表达,提高各个模块的开发、执行、移植效率。使用自底向上的方式规范硬件操作,把单位操作从中抽象出来,以便进行上层应用的模块移植。

  3.2分层架构设计方法

  分层是为了更好地满足编程时各功能需要,把一个总体功能分解成一个个小功能,分层进行实现,再整合。这样就需要把代码分解成不同概念层次的模块,确定各个模块的联系,进行合理连接,最终实现复杂的总体功能。分层时有固定的需要遵循的原则:(1)分层时尽量减小层间关联性,不要互相影响互相制约,降低模块的可移植性。若某一层出现了错误或问题,也可以不影响整个程序,只影响部分功能的实现。则技术人员可有针对性地对这一层进行修改完善,不对其他层产生影响。(2)每层需要为该层的上一层提供支撑,每层可以独立地解决一个特定的问题,如频率采样功能,可以分为数据采集层、数据处理层、数据显示层等,层与层之间相互联系,实现功能。(3)尽量实现层与层之间的高度内聚、相互之间又低耦合,每层内部对模块进行划分,实现最优模块化,可移植性也最强。如果把功能分解得越简单清晰,实现起来也就越容易,但若把功能目标太过细化,又会引起调用次数增多,复杂程度增大的问题,所以合理划分层次和模块,是需要不断尝试和修改的。以自底向上、自顶向下与模块化的方法进行分层架构。首先,对嵌入式系统应用需求进行梳理,为把各种不同的模块功能抽象出来,先采取自顶向下的方向,再由软件层次转化到概念层次。这是一个必经的过程,把目标需求抽象出来,转化为开发软件的功能。比如,采集信号频率,需要信号的数据,输入嵌入式系统,经算法和程序,在LCD屏上显示频率,这涉及到了硬件驱动、数据采集与处理、数据显示等层次。接下来是对硬件所需实现的功能进行抽象,采用自底向上的方式,硬件操作原语是在抽象硬件所需实现功能时必须细化出来的。在嵌入式编程系统中,由软件编程驱动硬件来实现相应的功能是很普遍的,为减少硬件功能的相互耦合与相互影响,对硬件功能进行封装,这不但有利于实现不同功能间的低耦合,还可以使当前系统更加简单易行,便于程序的执行与应用,提高程序的可移植性。现在更多地倾向于采用自顶向下与自底向上两种方法相结合的思想,为确保每层的上一层调用都能得到满足,需要逐层检查相邻层间是否有信息交叉,调用关系是否合理。最后,优化模块的功能设计,整合各个功能层的功能,并进行分类,尽可能实现模块的最优化。嵌入式系统需要进行面向对象、去中心化设计,设计时可以将系统逻辑架构区分为以下4个不同的层次:(1)应用管理层。实现功能调度、逻辑转化、显示界面关联等功能。(2)算法协议层。实现的功能为数据库访问、协议管理与解析、算法实现、文件整理等。(3)功能拓展层。实现各个器件的功能可移植性、接口连接访问等功能,并实现器件的低耦合性。④硬件驱动层。硬件操作原语由硬件驱动层提供,并实现硬件功能的独立性。以上的分层方式与原则,整合了可实现相似功能或同类的功能模块,使代码应用、算法与硬件功能之间的相互联系大大减少,降低了各个功能在设计和实现时的耦合性,避免交叉混淆,使嵌入式系统的程序代码结构更加明晰,可用性更高。可以支持多个应用逻辑的模型算法才是一个成熟的算法,可以在不同硬件环境中顺利执行与应用的软件功能模块才是一个成熟的功能模块,这样可提高嵌入式系统软件功能模块的开发、执行、移植效率。

  4中断服务程序

  程序有时需要实现自动停止正在运行的程序并转入处理新的情况的程序的功能,这就需要中断服务程序处理新情况后再返回原被暂停的原程序断点继续运行。中断服务程序是嵌入式系统中的重要部分,因中断系统可便捷地在系统的运行过程中实现中断,执行中断服务程序,并快速返回断点继续主程序,从而提高系统的运行效率,并且在不产生中断时不占用内存,节约系统内存。现在已经出现许多在标准C语言上对中断服务程序的拓展,出现了新的用于表示中断函数的关键字,如_interrupt、#programinterrupt等。当编写中断服务程序的函数时,中断现场入栈和出栈代码会由编译器会自动为该函数提供。中断服务程序需要满足下列要求:(1)中断服务程序不能有返回值。(2)不能给中断服务程序传递参数。(3)中断服务程序应尽量简单精炼。

  5系统软件设计

  5.1C语言的面向对象化

  中类的概念出现于在面向对象的语言中。对某一类数据的特定操作的集合称为类。类包含了两个范畴:数据和操作。面向对象有3个特性:封装、继承和多态。继承是指通过结构嵌套可实现对象属性的继承。封装是指把数据和函数捆绑,调用时可把函数与数据一起调用。多态是指不需考虑函数的数据调用方式,调用函数时可有多种不同方式。但更多时候,为使软件代码结构清晰易操作,只需将数据与函数进行封装即可。有时C语言编程时,会出现数据与函数联系不紧密,结构混乱等问题,C语言模拟面向对象是为了解决这些问题,意义并不在于模拟这个行为本身。

  5.2模块重用设计

  一般通过模块化来实现C语言代码重用,其中包含头文件和函数实现文件,即.h文件和对应的.c文件。一般有两种方式定义函数:(1)宏定义,宏定义的优点在于不会占用额外内存,与函数的参数类型无关,缺点在于一些功能是无法通过宏来实现的;(2)函数,函数可实现的功能较多,并且可重复利用,可以接受其他函数的数据,也可把运算结果作为返回值输出。

  6结语

  阐述了C语言嵌入式系统编程的所包含的基本元素与基本框架,合理的软件设计架构可大大提高程序的开发、执行、移植效率,在实际应用中有重要价值。

  参考文献

  [1]肖宛昂,曾为民.如何用C语言开发DSP嵌入式系统[J].单片机与嵌入式系统应用,2003,(01):81-84.

  [2]孙育红.数字多媒体数据采编系统设计与实现[J].现代电子技术,2017,40(15):122-125.

  [3]黄亚克.嵌入式系统C语言编程方法研究[J].科技信息(学术研究),2007,(16):166-167.