嵌入式Linux上的C语言编程实践--第14章嵌入式C语言常用语法教案详解.pptVIP

嵌入式Linux上的C语言编程实践--第14章嵌入式C语言常用语法教案详解.ppt

  1. 1、本文档共49页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
14.1 内存指针操作 内存操作的意义 在嵌入式系统中,内存的地址空间可分为三种类型: 系统内存 处理器内部的寄存器映射 处理器外部器件的端口或内存的映射 嵌入式系统的内存布局 系统内存 真正意义上的内存,包括只读存储器(ROM-Nor-Flash )和随机存储器(RAM-SRAM/DRAM) 系统内存的基本操作 取指令 读写数据 系统内存的类型 Nor-Flash SRAM/DRAM 寄存器映射 寄存器映射是指处理器内部功能部件的寄存器映射到内存空间的某一地址(范围)。 处理器通过地址访问寄存器,与对系统内存的操作类似:可进行读、写操作。 处理器通过对硬件相关的寄存器进行读写来控制硬件的行为。 寄存器操作与内存操作的区别: 对内存的操作只是获取或改变纯粹数据的过程 对外设相关的寄存器的读写操作实际上是控制外设硬件的动作。 外部器件的内存映射 外部器件(如网卡芯片、USB芯片、液晶控制器等)利用总线扩展的方式与嵌入式处理器的三总线(数据总线、地址总线和数据总线)相连。 它们内部都有一定的寄存器或存储单元。 这些寄存器或存储单元也需要映射到内存空间的某一地址(范围)。 外部器件的内存映射与处理器内部的寄存器映射的区别: 通常嵌入式处理器内部的寄存器的映射地址是固定的 外部器件的内存映射地址与它和处理器地址总线的连接方式有关。 为什么需要映射 经映射后,可使访问处理器内部的寄存器、外设端口与访问系统内存相似,都可以进行读和写。 在X86系统中,内存和I/O映射在两个不同的地址空间,同一地址可能是内存单元也可能是I/O端口,用不同的指令加以区分 在ARM体系中,系统内存地址、处理器内部寄存器地址、所有的外部器件的端口地址都映射到统一的32位内存地址空间中。 嵌入式系统的软件设计与PC系统的软件设计相比,更加注重对硬件的控制和操作,而对硬件的操作和控制需要通过操作内部寄存器和外部器件的端口来实现。经过映射后,其实现方式就变成对“内存”的读写操作了。 C语言可通过指针进行内存操作,从而可通过指针操作内部寄存器和外部器件的端口,进而控制硬件。 14.1.2 使用指针操作内存 指针的本质就是内存地址(16/32位无符号整数表示的一个地址) prinf(“address:%x\n”,(unsigned int )p); prinf(“address:%p\n”, p); 变量的指针与指针变量的区别 int *p,n; p=n;*p=1000; 通过指针变量可表示各种复杂数据结构,能方便地使用数组和字符串,并能象汇编语言一样处理内存地址,从而编写出精练和高效的程序。 int *p,x[100];p=x; *p++…… char *p,str[60]=“abcddeeff”;p=str;printf(“%s”,p+4); void *p=malloc(sizeof(struct student));……free(p); 在嵌入式C编程中指针的特殊用法-绝对地址访问 int *p=(int *)0x3000; *p=200;(不能用于对PC编程) *(int *)0x3000=200; 直接将常量200送入地址为0x3000开始的四字节单元中去 1.指针的类型 常用指针类型 [unsigned] char * [unsigned] short * [unsigned] int * [unsigned]long * 在嵌入C中操作内存时,常用下面的宏来完成对指定地址单元进行8位、16位、32位数据的读、写操作: #define write8b(addr,data) *(volatile unsigned char*(addr)) =(unsigned char)data #define read8b(addr) *(volatile unsigned char*(addr)) #define write16b(addr,data) *(volatile unsigned short*(addr)) =(unsigned short)data #define read16b(addr,data) *(volatile unsigned short*(addr)) #define write32b(addr,data) *(volatile unsigned int*(addr)) =(unsigned int)data #define read32b(addr,data) *(volatile unsigned int*(addr)) 举例: write8b(0x3210,0x12); unsigned char ch=read8b(0x3210); write16b(0x3210,

文档评论(0)

南非的朋友 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档