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.