如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
嵌入式系统C语言编程凌明trio@prochip.com.cn南京博芯电子技术有限公司2006年9月1目录语法大家都学过C吧掌握嵌入式系统C语言编程的切入点了解嵌入式系统C编程环境了解存储器了解C程序的调试了解基于C语言的软件项目组织Copyright2005ProchipElectronicsCo,ltd.AllRightsReserved.Nottobereproduced2byanymeanswithoutpriorwrittenconsent.2006-9-151#include“stdlib.h”应该为<stdlib.h>char*test(char*ptr){unsignedchari;应该为unsignedinti;charbuf[8*1024];局部变量太大了,容易造成堆栈溢出;char*p,*q;for(i=0;i<=8*1024;i++)应该为i<8*1024;buf[i]=0x0;p=malloc(1024);if(p==NULL)returnNULL;q=malloc(2048);if(q=NULL)returnNULL;应该为q==NULL;应该先释放p,再返回;memcpy(p,ptr,1024);Ptr是否为空未检查;memcpy(q,ptr,2048);应该为ptr+1024;memcpy(buf,p,1024);buf=buf+1024;数组名不能赋值;memcpy(buf,q,2048);free(p);free(q);returnbuf;返回局部变量指针非常危险;}Copyright2005ProchipElectronicsCo,ltd.AllRightsReserved.Nottobereproduced3byanymeanswithoutpriorwrittenconsent.2006-9-15以下程序是一个中断处理程序ISR,看看有什么问题?__interruptdouble中断处理程序不能有返回值compute_area(doubleradius)中断处理程序不能有入口参数{doublearea=PI*radius*radius;嵌入式系统中浮点运算太耗时printf("Area=%f",area);Prinft函数太耗时returnarea;另外浮点运算和库函数还存在重入的问题}Copyright2005ProchipElectronicsCo,ltd.AllRightsReserved.Nottobereproduced4byanymeanswithoutpriorwrittenconsent.2006-9-152简单小结一下!会C语法与会用C语言写程序是两个概念C的灵活性以及由此而产生的陷阱非常非常多TheMostBeautifulLanguageandMostDangerousLanguageintheProgrammingWorld!inta=0,b=0,c=0;inta=0,b=0,c=0;(*(void(*)())0)();(*(void(*)())0)();cc==a+++++b;a+++++b;Copyright2005ProchipElectronicsCo,ltd.AllRightsReserved.Nottobereproduced5byanymeanswithoutpriorwrittenconsent.2006-9-15了解嵌入式系统C编程环境63面向嵌入式系统的软件开发环境软件设计软件设计交叉开编辑编译器发环境环境IDEDebugger汇编器(调试,跟踪)项目串口,并口,管理liber连接器以太网,USB转换程序仿真器(ICE)烧结程序目标板Copyright2005ProchipElectronicsCo,ltd.AllRightsReserved.Nottobereproduced7byanymeanswithoutpriorwrittenconsent.2006-9-15C源文件汇编源文件makefile.cfile.sfileC编译器file.lstfile.s汇编器errorsLiberfile.o操作系统库标准C库Linkerfile.libOSlibANSIlibfile.xrffile.out调试工具转换工具二进制文件目标系统烧结工具Copyright2005ProchipElectronicsCo,ltd.AllRightsReserved.Nott