- 1、本文档共94页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式系统与应用——第8章 嵌入式软件编程课件
第八章 ;核心内容;8.1 嵌入式程序设计语言;程序设计语言的定义中应该包括以下内容;8.2 汇编语言;一、GAS的基本风格;摊周硷误咎戈黎兆梅敌励杯饭董缚绊吞涂曲京恫映融韶撬郧脆拈达隶售剩嵌入式系统与应用——第8章 嵌入式软件编程课件嵌入式系统与应用——第8章 嵌入式软件编程课件;2、注释
以“#”开头的程序行是注释行。
3、标识符
标识符是由字母和数字组成的一个字符串。定义标识符时,后面必须紧跟一个冒号“:”,表示标识符所在内存单元的地址计数值。
;伸摊郴镑滓剑侈锑各鳞揖萝乎抛艘撇均烙曝筏友匆曝韦嚎盐哑汤建硬腿竿嵌入式系统与应用——第8章 嵌入式软件编程课件嵌入式系统与应用——第8章 嵌入式软件编程课件;标识符作为变量名; 在其他的汇编语言和C语言程序中
可以使用外部引用方式调用该过程;4、常数的表示
在GAS中,数值表示如下:
1)二进制数:由0b或者0B开头,如:0b1010101、0B1011110;
2)十六进制数:以0x或者0X开头,如:0x4e7、0X1f9;
3)八进制数:由0开头,如:0625、0450;
4) 十进制数:以非零数开头,如:365、13180;
5)字符串:由引号括起,如:”string”。;5、常用的汇编指示符
1).rept count:表示重复count次;
2).macro、.endm:定义宏;
3).include “filename:用于将一个程序文件插入到另外一个程序文件中;
4).global name:将name申明为全局符号;
5).set name, value:申明一个符号常量,程序中使用时要在前面加一个“$”符号;
6).balign abs_expr,pad_value:表示将地址对齐;
7).p2align abs_expr,pad_value:表示将地址按2的次方对齐;
8).title “heading“:用于在生成符号列表时作为头信息。 ;二、与ATT的差异;2、数据传送的方向不同
GAS汇编语言中,数据的传送方向与Intel宏汇编的方向刚好相反;3、操作数位数的表达不同
在GAS汇编语言中,操作数的位数由指令的后缀表示,其中后缀为“l”表示32位,“w”表示16位,“b”表示8位。
Intel宏汇编则用操作数前缀表示法,需要使用dword、wor、byte等关键字;4、立即数的表达不同
在GAS的汇编语言中,立即数前要加前缀“$”符号
;5、内存引用不同
;8.3 C语言;一、 gcc扩展
gcc是为Linux配套的C语言编译器,在支持多个版本的ANSI C标准基础上,进行了一些扩展,主要集中在增强C语言的表达能力和语言功能,可通过使用-ansi、-traditional等编译参数来控制扩展功能是否启用。
GNU的gcc编译器在嵌入式领域使用的非常广泛,它支持众多的高档嵌入式处理器,如Intel386、Intel960、68000、ADM29K等。
; 这看上去多此一举,而且不符合通用的编程规范,但在替代不安全的宏定义时,显得特别有用,如:
要计算两次a和b,有可能带来副作用,如
如定义为
则可消除该不安全因素。;2、局部标识符; 当宏定义中有循环判断时,使用比较方便,如:;3、内嵌函数;4、类型引用;5、条件语句可以省略操作数;6、64位整数
gcc添加了64位类型:long long int。该类型的常数使用LL或LLU后缀。
7、复数
gcc添加了复数类型,声明时使用__complex__关键字。如:;8、零长数组;9、变长数组;10、数组和结构的构造器;11、Case语句的标识符;12、内联函数;13、行内汇编语句;14、函数名字符串;15、数据对齐特性查询;二、 C51扩展
ANSI C最主要是用于32位等高端处理器,使用到8位低端处理器上必须进行许多相应限制和扩展,其中最主要的是关于内存存储模式、内存寻址等方面的扩展和限制。
这些主要扩展有:
1)存储类型
2)数据类型
3)指针
4)函数属性;1、存储类型
1)程序存储区
2)内部数据存储区
3)外部数据存储区
4)扩展存储区
5)特殊功能寄存器(SFR)存储区
;
Cx51所用存储标识符;2、数据类型 Cx51 编译器中独有的数据类型
;1)BIT 类型
bit 变量和bit 声明有如下限制:
A)禁止中断的函数(#pragma disable)和用一个明确的寄存器组using n 声明的函数不能返回一个位值。
B)一个位不能被声明为一个指针,例如:
文档评论(0)