- 1、本文档共2页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
介绍一下KEIL C51所支持的C语言和汇编语言混合编程的方法!51单片机是最早的单片机,也是在国内应用最广泛的单片机,为大家所喜爱!但执行速度较其它单片机较慢。因此在编程时更加要注重程序的效率及编程上的技巧,最大限度的发挥其性能,满足项目开发的实际需要。大家都知道,在嵌入式开发中,C语言具有可移植性强和可读性好等优点,而汇编语言的高效、快速及可直接对硬件进行操作等优点又是C语言所难以达到的,本帖就为大家介绍一下KEIL C51所支持C和汇编混合编程的方法,将这两种语言的优点完美的结合,更大限度的发挥51单片机的性能,加快我们的产品开发周期!?如用此方法实现51单片机对320kbps mp3文件的播放就是一个很好的实例!下面就为大家介绍一下混合编程的方法。 ?所谓混合编程,就是在一个项目中,同时使用C和汇编两种语言。 C语言和汇编语言混合编程的方法形式多样,可以是以汇编语言为主体,在其中内嵌部分C语言;也可以是以C语言为主体在其中加入部分汇编语言(此方法实用价值较高,而被工程师们广泛的采用)。在此方法中,用汇编语言编写对有关硬件的驱动和 处理、复杂的算法、实时性要求较高等底层的东西,来满足单片机对某些硬件高效、快速、精确的处理等性能上的要求。用C语言来编写程序的主体部分。这样就将 C语言的可移植性强和可读性好与汇编语言的高效、快速及可直接对硬件进行操作等优点相结合。两者优劣互补、相得益彰,加快我们产品的开发周期,具有极高的 现实意义和实用价值! ?在KEIL C51中加入的汇编代码需按照其编译器中约定的规则才可以实现C语言程序对汇编代码的调用。即KEIL C51的命名规则和参数传递规则。 一. KEIL C51的命名规则 在KEIL C51中,编译器对C语言程序中的函数会自动的进行转换,转换规则如下表: 函数属性? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???函数举例? ?? ?? ?? ???段中的函数名 无参数或无寄存器参数传递的函数? ?? ?? ???void func1(void)? ?func1 含通过寄存器传递的参数? ?? ?? ?? ?? ?? ? void func2(int)? ?? ? _func2 可重入函数? ?? ?? ?? ?? ???void func3(char)reentrant? ?? ? _?func3 二. KEIL??C51函数的参数传递规则 (一)通过寄存器传递的函数参数表 参数长度? ?? ?? ???第1个形参 第2个形参 第3个形参 1字节(char)? ?R7? ?? ?? ? R5? ?? ?? ?? ?R3 2字节(int)? ?R6(H) R7??R4(H) R5??R2(H) R3 3字节(通用指针) R1(H)~R3 4字节(long)? ?R4(H)~R7 (二)函数返回值使用的寄存器列表 返回类? ?? ?? ?? ?? ???使用的寄存器 位数据(bit)? ?? ?? ?位累加器CY 1字节(char)? ?? ???R7 2字节(int)? ?? ?? ? R6(H) R7 3字节(通用指针)??R3(类型)R2(H) R1 4字节(long)? ?? ???R4(H)~R7 4字节(float)? ?? ???R4(H)~R7,32位IEEE格式,指数和符号位在R7 在混合编程中,最常用也是最实用的方法是在C语言中加入部分汇编语言的代码,分为两种方法。 方法1)在Keil C51的函数中直接插入汇编语句 方法2)按照Keil C51接口规则,编写汇编模块 方法1是利用编译控制命令#pragma asm(用来标识所插入的汇编语句的起始位置) 和 #pragma endasm (用来标识所插入的汇编语句的结束位置) ,这两条命令必须成对出现,并可以多次出现。在Keil C51中不对插入的汇编代码做任何的处理。 方法2编写汇编模块,需对KEIL编译器的编译过程做些了解。Keil编译器的编译过程是首先将项目中的一个个源文件编译为目标代码(obj文件),然在再通过连接器产生为最终可执行的hex文件。 ?目标代码将其中的代码、数据、常量放在不同的“段”中,保存程序的段称为“代码段”,保存数据的段称为“数据段”,最终目标代码经过Keil的连接器按照“段”的要求转换为程序和数据地址固定的可执行文件。 在Keil软件中,“段”按定位属性分为:“可重定位段”和“绝对段”。 ?“可重定位段”:程序和数据在其分别所对应的存储单元(FLASH和RAM)中的存储地址是浮动的、可重定义的、相对可变的。 ?“绝对段”:其地址在连接前就已确定不变,连接器据此为它分配地址。 ?经Keil编译器生成的“段”具有如下属性: 1)段的存储属性(prog
文档评论(0)