C指针在嵌入式系统开发中的方法研究
- 格式:pdf
- 大小:445.25 KB
- 文档页数:3
总第16卷182期 2014年10月 大众科技
Popular Science&Technology
V0I.16 NO.1O
0ctober 201 4
C指针在嵌入式系统开发中的方法研究
钱龙飞唐焱刘俊杰
(桂林电子科技大学机电工程学院,广西桂林541004)
【摘要】以嵌入式技术为基础的服务性产品,它具自动化程度高、响应速度快等优点,但开发嵌入式技术,需要以编程语
言为基础,目前存在的语言有很多种,选择一种合适的语言至关重要。c语言开发嵌入式系统相对于其他语言来说具有高效性与灵
活性,掌握c指针的利用,不仅使得代码优化,而且可以提高系统的运行效率。文章结合嵌入式系统的特点,从指针寻址,指针
引用数组元素,动态申请内存空间,函数指针还有避免野指针等几个方面,阐述了高效利用c指针进行嵌入式系统开发。
【关键词】嵌入式系统C语言;指针;内存
【中图分类号】TP31 【文献标识码】A 【文章编号】1008一l151(2014)10—0008—03
C pointer method applied in the embedded system development
Abstract:Embedded technology—based service,with a high degree of automation,fast response,etc,but the development of
embedded technology,based programming language,there are a variety of existing language,choose a suitable language is crucia1.C
language development of embedded systems with respect to the efficiency and flexibility in other language,proficiency in C pointe ̄not
only makes code optimization,but also improve the efficiency of the system.In this pape ̄the characteristics of embedded systems,
addressed from a pointer,the pointer reference array elements,dynamic application memory space,function pointers,as well as wild
pointer on the efficient use of C pointers embedded system development.
Key words:An embedded system C language;pointer;memory
1引言
嵌入式系统为控制、监视或辅助设备、机器或用于工厂
运作的设备。与个人计算机这样的通用计算机系统不同,嵌
入式系统通常执行的是带有特定要求的预先定义的任务。目
前嵌入式系统已经渗透到我们生活的每个角落,在汽车工业
中,由于人们对于享受的追求,车载电子使得汽车内部更具
体验化,而车载电子就是以嵌入式技术为基础的服务性产品,
它具自动化程度高、响应速度快等优点,所以在开发中选择
一
种合适的语言是十分重要的。从目前来说,开发使用的语
言有很多种,其中使用C语言是应用最为广泛的。C语言即
可以说是低级的,也可以说是高级的,因为它有低级语言直
接控制硬件的能力,也有高级语言的灵活性。而指针是C的
精华,正确灵活的运用它,可以有效地表示复杂的数据结构;
能动态的分配内存;在调用函数时能获得1个以上的结果;
能直接处理内存单元地址等,掌握C指针对嵌入式技术开发
至关重要。
2指针在嵌入式系统中的方法研究
2.1指针寻址
指针的本质就是一个变量,需要占用一定得内存空间,
用于保存内存地址的值。根据不同数据类型的地址进行赋值,
指针就指向对应数据类的内存块。
在嵌入式系统的编程中,经常需要在特定的内存单元读
写内容,在嵌入式系统的实际调试中,借助于c语言指针所具
有的对绝对地址单元内容的进行读写。指针寻址的目的是通
过起始地址来访问内存数据。指针作为保存数据的地址,任
何存入指针变量p的数据都会被当作地址来处理。p本身的地
址由编译器另外存储,存储位置不知道。通过地址访问内存
数据,首先取得指针变量P的内容,把它作为地址,然后从这
个地址提取数据或向这个地址写入数据。指针可以以指针的
形式访问 (p十i),也可以以下标的形式访问p[i]。其本质都
是先取P的内容然后加上i*sizeof(类型)个byte作为数据的
真正地址。
2.2利用指针直接操作数组元素
在嵌入式系统开发中,系统的计算能力和存储的容量有
限,为了提高系统对代码的处理效率,所以在编程过程中,
利用指针对数组元素的处理的速度要高于数组自身对元素的
处理。用一段代码解析:
int main()
{
int i:
int array[5]={1,2,3,4,5}:
int术p=array:
【收稿日期】2014—09—10
【作者简介】钱龙飞(1989一),男,江苏宜兴人,桂林电子科技大学机电工程学院在读硕士生,研究方向为汽车电子。
一
8一
q:( )(i): /木调用f2函数,lc/
} 上述代码中,整形变量i是函数fl和f2所要求的参数在 fun被调用时,把实参函数f1和f2的入口地址传给形参指针变 量a和b,使a和b指向函数f1和f2,在fun函数中,用木a和 就可以调用函数f1和f2。 在fun函数中可以直接调用f1和f2,但前提是每次调用 fun函数时,要调用的函数是固定的。使用指针作为参数的优 点就在于,要调用函数不固定,这次调用f1和f2,下次可以 调用f3和f4,只要每次调用fun函数时给出不同的函数名作为 实参。 2.5避免野指针 嵌入式编程中,需要避免野指针,但无法消除。野指针, 是指向随机内存的指针,是不合法的。野指针不是NULL指针, 也不能用if语句来判别。了解野指针的由来对防止野指针的 出现有预防作用,分别以代码的形式来说明产生野指针的三 个方面: 代码1: struct place { char*name: int number: ); int main0 { struct place s: strcpy(s.name, guidian ): S.number=1: return 0: ) 在代码1中,局部指针变量没有被初始化,没有初始化的 指针的指向不是固定内存单元,是随机的。在Linux执行后是 段错误,要避免段错误,就要对指针初始化,在主函数中加入 s.name=(char*)malloc(100),使指针指向一块合法的内存。 代码2: void func(char*p) { printf( %s\n ,P): free(p): int main0 { char*s=(char*)malloc(100) strcpy(s, guidian ): func(s): printf( %s\n ,s):
return 0:
)
在代码2中,由于主函数在调用子函数结束后,在子函数
中就把P所指向的内存释放掉了,而P保存的地址没有变,但
地址对应的内存是随机的,p也就成了野指针,在Linux下执
行./a.out后是没有显示任何结果,原因就是使用已经释放过
的指针。
代码3:
char*func()
{
char P[]= guidian :
return P:
)
int main0
{
char*s=func0:
printf( %s\n ,S):
return 0:
)
在内存分配方式中,函数是在栈上分配的,函数执行完
就会在栈上自动释放;从代码3中可知,主函数中的指针变量
s所指向的变量在指针之前就被销毁了,也就是调用func函数
后,func在栈上立即自动释放了。在Linux上用gcc编译的时
候,会出现如下情况一警告:函数返回局部变量的地址,执
行./a.out后,同样也是没有任何结果的输出,在有的Linux
下显示的乱码,其本质都是一样的。
3结束语
本文重点介绍了,C语言在嵌入式系统开发中的运用优
势,对内存的操作能力。掌握对C指针的灵活运用,对嵌入式
编程具有优化代码,节省系统内存空间,提高系统运行速度
等优点。
【参考文献】
【1] 谭浩强.c程序设计(第三版)【M].北京:清华大学出版社,
2005.
【2]2 Kenneth A.Reek.徐波,译.c和指针【M].北京:人民邮电出
版社.2008.
[3】 郭天祥.新概念51单片机C语言教程【M】.北京:电子工业
出版社.2009.
[4]金丽,包志华,陈海金.基于ARM嵌入式系统的c语言优
化设计方法Ⅱ1.南通大学学报(自然科学版).2006,12(23):
230-2
.
10.