论文:借助C语言实现嵌入式系统编程探讨

  • 格式:pdf
  • 大小:93.36 KB
  • 文档页数:2

2010年第05期吉林省教育学院学报No󰀁05,2010第26卷JOURNALOFEDUCATIONALINSTITUTEOFJILINPROVINCEVol󰀁26(总233期)TotalNo󰀁233

收稿日期:2009󰀁12󰀁30作者简介:谭炳菊(1970󰀁),女,辽宁沈阳人。沈阳广播电视大学信息工程系,讲师,研究方向:C语言、单片机C语言及计算机网络。借助C语言实现嵌入式系统编程探讨

谭炳菊

(沈阳广播电视大学信息工程系,辽宁沈阳110041)

摘要:本文在阐述利用C语言实现嵌入式系统编程优势的基础上,探讨了使用数据指针、函数指针来操作内存以实现嵌入式系统编程的流程的相关问题。关键词:C语言;嵌入式;系统编程中图分类号:G201󰀂󰀂文献标识码:A󰀂󰀂文章编号:1671󰀁1580(2010)05󰀁0151󰀁02

󰀂󰀂目前,嵌入式技术已成为通信产品和电子类产

品的共同发展方向,如在数字电视、移动设备等电器

中几乎都包含了嵌入式技术。嵌入式系统是一种性价比很高的应用系统,受其使用的硬件以及运行环

境的限制,对程序运行的空间和时间要求非常严格。

C语言作为一种高级语言,在开发速度、软件可靠性等方面适合于嵌入式系统的程序设计。

一、借助C语言实现嵌入式编程阐述

C语言是一种程序设计语言,语言简洁、紧凑,运算符丰富,支持自顶向下的结构化程序设计技术,

可以很好地操作底层的硬件接口,完善的模块化程

序结构,可以大大缩短程序的开发周期,增加软件的可读性。C语言作为一种编译型程序设计语言,具

有功能丰富的库函数,运算速度快,编译效率高,能

够产生高效代码及程序有很强的移植性等特点,满足了嵌入式技术的需求,汇编语言作为传统的嵌入

式系统的编程语言,已经不能满足时代需求,用C

语言实现嵌入式系统编程有着汇编语言无法比拟的

优势,成为嵌入式系统编程的首选开发工具。二、借助C语言实现嵌入式编程的优势分析

不同于一般形式的软件编程,嵌入式系统编程

是建立在特定的硬件平台上,要求编程语言具备较强的硬件操作能力。汇编语言是依赖于计算机硬件

的,符合嵌入式系统编程的要求,但它并不是嵌入式

系统开发的软件,因为汇编语言程序可移植性和可读性差,开发过程太复杂及它是一种编程效率不高的低级语言,这些使汇编语言的编程和维护极不方

便,从而导致整个系统的可靠性也较差。而与之相

比,C语言是一种高级语言,可以实现对硬件的操作,已经成为了嵌入式系统开发的最佳选择。作为

一种高级语言,C语言是功能丰富、表达能力强、使

用方便灵活、开发效率高的一门面向过程的语言,使用者可以不必熟悉计算机内部的具体构造和机器指

令,而把主要精力放在算法的描述上。使用C语言

进行嵌入式系统开发的优势主要体现在语言简洁、使用方便、编程调试灵活、数据结构丰富、程序的可

移植性好及生成的代码编译效率高等方面。

三、借助C语言实现嵌入式编程的途径(一)选择和确定变量的存储种类、存储器类型

尽管嵌入式C语言是一种强大而方便的开发

工具,但开发人员如果要达到用C语言快速编出高效且易于维护的嵌入式系统程序,必须对C语言的

变量存储类型有一定的了解,灵活选择变量的存储

类型是提高程序运行效率的重要途径。150在C语

言中变量有数据类型和数据的存储类别两个属性,数据类别指的是数据在内存中存储的方法,分为静

态存储类和动态存储类,有自动的、外部的、静态的

和寄存器的四种。根据变量的存储类别,可以知道变量的作用域和生存期。定义变量时,除了存储类

别外,还应该说明变量的存储器类型。存储器类型

和存储种类是完全不同的概念,存储器类型指明该变量所处的内存空间。为了提高执行效率,对存储151器类型的设定,应该根据只要条件满足,尽量先使用

内部直接寻址存储器(DATA),DATA区的寻址是

最快的,所以应该把使用频率高的变量放在DATA区,由于空间有限,DATA区除了包含程序变量外,

还包含了堆栈和寄存器组DATA区。IDATA区也

可以存放使用比较频繁的变量,使用寄存器作为指

针进行寻址。在寄存器中设置8位地址进行间接寻址,与外部存储器寻址比较,它的指令执行周期和代

码长度都比较短。而且,在内部和外部存储器共同

使用的情况下,要合理分配存储器,对经常使用和计算频繁的数据,应该使用内部存储器,其他的则使用

外部存储器。要根据它们的数量进行分配,从而提

高程序的运行效率。

(二)利用指针操作内存在嵌入式系统编程中,常常要求在特定的内存

单元读写内容,汇编语言有对应的MOV指令,而C

语言基本没有直接访问绝对地址的能力。借助C

语言指针所具有的对绝对地址单元内容的读写能力,在使用绝对地址指针时,要注意指针自增自减操

作的结果取决于指针指向的数据类别。C语言中函

数名直接对应于函数生成的指令代码在内存中的地址,因此,函数名可以直接赋给指向函数的指针。在

函数指针操作内存过程中,函数名直接对应于函数

生成的指令代码在内存中的地址,因此函数名可以

直接赋给指向函数的指针;系统调用函数实际上是 调转指令+参数传递处理+回归位置入栈!,本质

上最核心的操作是将函数生成的目标代码的首地址

赋给CPU的PC寄存器,因为函数调用的本质是跳转到某一个地址单元的代码去执行,所以可以 调

用!一个根本就不存在的函数实体。

(三)采用模块化设计来实现数据高效传输

模块化设计就是将程序模块化,把大的程序划分为较小的模块。为了减少模块间的关联性,模块

的功能要充分独立,模块内部的联系要紧密,模块之

间通过接口通讯,无函数的交叉调用,模块内部的实现细节在模块外部要尽可能不可见,数据传递由全

局变量完成,这就是模块化设计的基本思想。模块

化设计的核心是模块的独立性,主要包括功能独立

性和结构独立性。由于嵌入式系统资源有限,C语言作为一种结构化的程序设计语言,通常采用模块

化编程方法,在模块的划分上应理解模块是一个源文件.c和一个头文件.h的结合,头文件(.h)中是

对于该模块接口的声明;某模块提供给其他模块调

用的外部函数及数据需在.h中文件中冠以extern关键字声明;模块内的函数和全局变量需在.c文件

开头冠以static关键字声明;不要在.h文件中定义

变量。定义变量和声明变量的区别在于定义会产生

内存分配的操作;而声明则只是告诉包含该声明的模块在连接阶段从其他模块寻找外部函数和变量。

通常,在C语言程序中,子程序模块中与其他变量

无关的变量尽可能使用局部变量;整个程序都要使用的变量设置为全局变量,这样,子程序模块可以直

接说明要使用的变量为外部变量。结合C语言的

特点进行灵活的数据传输,C语言所特有的指针、结

构、联合如果能够灵活使用,可以大大提高编程效率,也可以方便进行数据传输,主程序和子程序传递

数据量不能过多,否则影响执行效率;主程序模块和

子程序模块定义了相同的数据类型,在进行数据传

输时,只需将指针传送到子程序模块,既可以使不同的程序有很好的独立性和良好的封装性,又能实现

不同程序数据的灵活高效传输,可使不同的开发人

员开发出独立性很强的通用子程序模块。采用模块化程序设计可减少程序的复杂性,提高程序的可靠

性,增加程序的可读性,方便程序的调试维护。

使用C语言进行嵌入式系统的开发,如果能遵

守科学的工程开发规则,灵活地运用C语言的强大功能,熟悉硬件特点,以软件工程的方式进行总体程

序设计安排,养成良好的、规范化的编程风格,对能

高效编出易于维护的嵌入式系统程序具有至关重要的作用。

[参考文献]

[1]谭浩强.c语言程序设计[M].北京:清华大学出版社,2000.[2]王策、赵宇.基于Linux的嵌入式系统开发[J].计算机应用,2002(7).[3]MichaelJ.Pont.C语言嵌入式系统开发[M].陈继辉译󰀁北京:中国电力出版社,2003.[4]张湘.嵌入式系统和嵌入式操作系统[J].世界仪表与自动化,2002(5).[5]王志超.单片机C语言编程技巧在嵌入式系统开发中的研究[J].宜春学院学报,2006(4).[6]马忠梅、籍顺心、张凯.单片机的C语言应用程序设计[M].北京:北京航空航天大学出版社,1997.152