课程讲义4_嵌入式系统软件编写.ppt

  1. 1、本文档共65页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4.2.2 嵌入式C语言编程 上述程序输出为“10,1"。fun函数中的 printf语句输出局部变量n的值10,而主函数中的printf语句输出全局变量n的值1。在相同作用域内不允许出现相同的变量名。 2)变量的存储类别 在定义变量时还可以指定存储类别,主要的存储类别说明符如下。 auto:自动变量,在缺省情况下,编译器默认所有局部变量为自动变量,这种变量的存储空间由系统自动分配和释放,系统不会自动初始化。例如,以下程序执行时会输出n中没有意义的垃圾值,如输出“-858993460”,因为自动变量n没有初始化。 例如: 4.2.2 嵌入式C语言编程 ②register:寄存器变量,变量值存放在CPU的内部寄存器中,存取速度最快,通常只将需要频繁读的变量定义为寄存器变量,这类变量不能进行取变量地址操作(有的编译器会做优化处理,将计算量不大的寄存器变量也作为自动变量处理,如 Visual C++6.0)。由于寄存器个数有限,所以一般不能在程序中定义很多寄存器变量。另外,只有局部自动变量和函数形参才可以定义为寄存器变量。 ③extern:外部变量,外部变量和全局变量是对同一类变量的两种不同角度的提法。全局变量是从作用域提出的,外部变量是从存储类别提出的。 ④static:静态变量,在函数内部用 static关键字定义的变量称为静态局部变量,在函数外部用 static关键字定义的变量称为静态全局变量。在程序执行期间,静态局部变量在内存的静态存储区中占据着永久性的存储单元。即使退出函数以后,下次再进入该函数时,静态局部变量仍使用原来的存储单元。对于在定义时初始化的静态局部变量,初始化仅仅执行一次:对于未初始化的静态局部变量,C编译系统自动给它赋初值0。 例如: 4.2.2 嵌入式C语言编程 在主函数中,第1次调用fun()时,初始化静态局部变量n为0,执行n++,输出为1。第2次调用fan()时,静态局部变量n仍然存在,其值为1,执行n++,输出为2。第3次调用fun()时,输出为3。在多次调用 fun()时,可以简单地理解仅仅第1次执行“ static int n;语句。 在一般情况下,全局变量默认是外部的,即定义全局变量n的如下两种方式是等价的: int n=1: extern int n=1;//如果不初始化。就变成声明变量n了 如下方式定义的全局变量n为静态全局变量: static int n=1; 静态全局变量的作用域只限于本源程序文件。静态全局变量和普通全局变量的区别是静态全局变量只能初始化一次。以防止在其他源程序文件中被访问。 归纳起来,auto和 register变量属于动态存储类别的变量,而 extern和 static变量属于静态存储类别的变量。 4.2.2 嵌入式C语言编程 在主函数中,第1次调用fun()时,初始化静态局部变量n为0,执行n++,输出为1。第2次调用fan()时,静态局部变量n仍然存在,其值为1,执行n++,输出为2。第3次调用fun()时,输出为3。在多次调用 fun()时,可以简单地理解仅仅第1次执行“ static int n;语句。 在一般情况下,全局变量默认是外部的,即定义全局变量n的如下两种方式是等价的: int n=1: extern int n=1;//如果不初始化。就变成声明变量n了 如下方式定义的全局变量n为静态全局变量: static int n=1; 静态全局变量的作用域只限于本源程序文件。静态全局变量和普通全局变量的区别是静态全局变量只能初始化一次。以防止在其他源程序文件中被访问。 归纳起来,auto和 register变量属于动态存储类别的变量,而 extern和 static变量属于静态存储类别的变量。 4.2.2 嵌入式C语言编程 3)内存组织结构 尽管内存空间很大,但程序只能直接访问其中的一部分空间,内存的低地址空间被操作系统占用,其余的高地址空间划分为4个部分,大致结构如图4.6所示,其说明如下。 4.2.2 嵌入式C语言编程 ①代码段( code segment):用来存放程序执行代码(编译后的代码),又称为文本段(text segment)。这部分区域的大小在程序执行前就已经确定,并且该内存区域属于只读。 ②数据段( data segment):用于存放程序执行中使用的那些变量的值,包含以符号开始的块(Block Startedby Symbol,BSS)段和静态数据区两个部分。BSS段用来存放程序中未初始化的外部变量和未初始化的静态局部变量。在执行程序时,BSS段会预先清空,所以存放在BSS段中的变量均默认初始化为0。这就是为什么外部变量和静态局部变量可以不始化,但是会被赋予默认值0;另外的静态数据区用来存放程序中已初始

文档评论(0)

执着仅一次 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档