嵌入式Linux应用开发教程第三章 嵌入式LinuxC基础新.ppt

嵌入式Linux应用开发教程第三章 嵌入式LinuxC基础新.ppt

  1. 1、本文档共107页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式Linux应用开发教程第三章 嵌入式LinuxC基础新

嵌入式应用程序设计 第三章 嵌入式Linux C基本 3.1 预处理 3.2 C语言中的内存分配 3.3 程序的可移植性考虑 3.4 C和汇编的接口 3.5 ARM Linux内核常见数据结构 3.6 小结 3.7 思考与练习 3.1 预处理 3.1.1 预定义 3.1.2 文件包含 3.1.3 条件编译 3.1.1 预定义 在C语言源程序中允许用一个标识符来表示一串符号,称为宏,被定义为宏的标识符称为宏名。在编译预处理时,对程序中所有出现的宏名,都用宏定义中的符号串去替换,这称为宏替换或宏展开。 预定义符号 宏定义 预定义符号 有一些预处理定义的符号串,它们的值或者是字符串常量,或者是十进制数字常量,它们通常在调试程序时用于输出源程序的各项信息 。 宏定义 宏定义是由源程序中的宏定义#define语句完成的;而宏替换是由预处理程序自动完成的。 (1)无参宏定义 无参宏的宏名(也就是标识符)后不带参数,其定义的一般形式为: #define 标识符 字符串 (2)带参宏定义 对带参数的宏,在调用中不仅要宏展开,而且要用实参去代换形参。带参宏定义的一般形式为: #define 宏名(形参表) 字符串 宏定义 3.1.2 文件包含 文件包含是C语言预处理程序的另一个重要功能,文件包含命令行的一般形式为: #include 文件名“ 对文件包含命令还要说明以下几点: 包含命令中的文件名可以用双引号括起来,也可以用尖括号括起来。 使用尖括号表示在系统头文件目录中去查找(头文件目录可以由用户来指定);使用双引号则表示首先在当前的源文件目录中查找,若未找到才到系统头文件目录中去查找。用户编程时可根据自己文件所在的位置来选择某一种形式。 一个include命令只能指定一个被包含文件,若有多个文件要包含,则需用多个include命令。 文件包含允许嵌套,即在一个被包含的文件中又可以包含别的文件。 3.1.3 条件编译 第一种形式 第二种形式 第三种形式 3.2 C语言中的内存分配 3.2.1 C语言程序所占内存分类 3.2.2 堆和栈的区别 3.2.1 C语言程序所占内存分类 一个由C语言的程序占用的内存分为以下几个部分。 栈(stack):由编译器自动分配释放,存放函数的参数值、局部变量的值、返回地址等,其操作方式类似于数据结构中的栈。 堆(heap):一般由程序员动态分配(调用mallo()函数)和释放(调用free()函数),若程序员不释放,程序结束时可能由操作系统回收。 数据段(data):存放的是全局变量、静态变量、常数。根据存放的数据,数据段又可以分成普通数据段(包括可读可写/只读数据段,存放静态初始化的全局变量或常量)、BSS数据段(存放未初始化的全局变量)。 代码段(code):用于存放程序代码。 3.2.2堆和栈的区别 申请方式 栈(stack)是由系统自动分配的;堆(head)需要程序员自己申请,并在申请时指定大小 。 申请后系统的响应 堆在操作系统中有一个记录空闲内存地址的链表,当系统收到程序的申请时,系统就会开始遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。 3.2.2堆和栈的区别 申请大小的限制 堆是向高地址扩展的数据结构,是不连续的内存区域;栈是向低地址扩展的数据结构,是一块连续的内存的区域。 申请速度的限制 堆是由malloc()等语句分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来很方便。栈由系统自动分配,速度较快,但程序员一般无法控制。 堆和栈中的存储内容 堆一般在堆的头部用一个字节存放堆的大小,堆中的具体内容由程序员安排。 3.3 程序的可移植性考虑 3.3.1 字长和数据类型 3.3.2 数据对齐 3.3.3 字节顺序 3.3.1 字长和数据类型 能够由机器一次完成处理的数据称为字,不同体系结构的字长通常会有所区别。 3.3.2 数据对齐 对齐是内存数据与内存中的相对位置相关的话题。 一些体系结构对对齐的要求非常严格。通常基于RISC的系统载入未对齐的数据会导致处理器陷入(一种可处理的错误);还有一些系统可以访问没有对齐的数据,但性能会下降。 3.3.3 字节顺序 字节顺序是指一个字中各个字节的顺序,有大端模式和小端模式。 大端模式是指在这种格式中,字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。 小端模式是指与大

文档评论(0)

yurixiang1314 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档