单片机模块化编程要点

单片机模块化编程要点

ID:46941103

大小:182.50 KB

页数:118页

时间:2019-11-30

单片机模块化编程要点_第1页
单片机模块化编程要点_第2页
单片机模块化编程要点_第3页
单片机模块化编程要点_第4页
单片机模块化编程要点_第5页
资源描述:

《单片机模块化编程要点》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、51单片机是最早的单片机,也是在国内应用最广泛的单片机,为大家所喜爱!但执行速度较其它单片机较慢。因此在编程时更加要注重程序的效率及编程上的技巧,最大限度的发挥其性能,满足项目开发的实际需要。大家都知道,在嵌入式开发中,C语言具有可移植性强和可读性好等优点,而汇编语言的高效、快速及可直接对硬件进行操作等优点又是C语言所难以达到的,本帖就为大家介绍一下KEILC51所支持C和汇编混合编程的方法,将这两种语言的优点完美的结合,更大限度的发挥51单片机的性能,加快我们的产品开发周期!如用此方法实现51单片机对320kbpsmp3文件的播放

2、就是一个很好的实例!下面就为大家介绍一下混合编程的方法。所谓混合编程,就是在一个项目中,同时使用C和汇编两种语言。C语言和汇编语言混合编程的方法形式多样,可以是以汇编语言为主体,在其中内嵌部分C语言;也可以是以C语言为主体在其中加入部分汇编语言(此方法实用价值较高,而被工程师们广泛的采用)。在此方法中,用汇编语言编写对有关硬件的驱动和处理、复杂的算法、实时性要求较高等底层的东西,来满足单片机对某些硬件高效、快速、精确的处理等性能上的要求。用C语言来编写程序的主体部分。这样就将C语言的可移植性强和可读性好与汇编语言的高效、快速及可直接

3、对硬件进行操作等优点相结合。两者优劣互补、相得益彰,加快我们产品的开发周期,具有极高的现实意义和实用价值!在KEILC51中加入的汇编代码需按照其编译器中约定的规则才可以实现C语言程序对汇编代码的调用。即KEILC51的命名规则和参数传递规则。一.KEILC51的命名规则在KEILC51中,编译器对C语言程序中的函数会自动的进行转换,转换规则如下表:函数属性函数举例段中的函数名无参数或无寄存器参数传递的函数voidfunc1(void)func1含通过寄存器传递的参数voidfunc2(int)_func2可重入函数voidfunc

4、3(char)reentrant_?func3二.KEILC51函数的参数传递规则(一)通过寄存器传递的函数参数表参数长度第1个形参第2个形参第3个形参1字节(char)R7R5R32字节(int)R6(H)R7R4(H)R5R2(H)R33字节(通用指针)R1(H)~R34字节(long)R4(H)~R7(二)函数返回值使用的寄存器列表返回类使用的寄存器位数据(bit)位累加器CY1字节(char)R72字节(int)R6(H)R73字节(通用指针)R3(类型)R2(H)R14字节(long)R4(H)~R74字节(float)R

5、4(H)~R7,32位IEEE格式,指数和符号位在R7在混合编程中,最常用也是最实用的方法是在C语言中加入部分汇编语言的代码,分为两种方法。方法1)在KeilC51的函数中直接插入汇编语句方法2)按照KeilC51接口规则,编写汇编模块方法1是利用编译控制命令#pragmaasm(用来标识所插入的汇编语句的起始位置)和#pragmaendasm(用来标识所插入的汇编语句的结束位置),这两条命令必须成对出现,并可以多次出现。在KeilC51中不对插入的汇编代码做任何的处理。方法2编写汇编模块,需对KEIL编译器的编译过程做些了解。Ke

6、il编译器的编译过程是首先将项目中的一个个源文件编译为目标代码(obj文件),然在再通过连接器产生为最终可执行的hex文件。目标代码将其中的代码、数据、常量放在不同的“段”中,保存程序的段称为“代码段”,保存数据的段称为“数据段”,最终目标代码经过Keil的连接器按照“段”的要求转换为程序和数据地址固定的可执行文件。在Keil软件中,“段”按定位属性分为:“可重定位段”和“绝对段”。“可重定位段”:程序和数据在其分别所对应的存储单元(FLASH和RAM)中的存储地址是浮动的、可重定义的、相对可变的。“绝对段”:其地址在连接前就已确定

7、不变,连接器据此为它分配地址。经Keil编译器生成的“段”具有如下属性:1)段的存储属性(programcodedatapdataxdatabdatabit等);2)段的起始地址;3)段的长度;4)段的定位要求:绝对段地址固定,可重定位段定位的要求如要求代码段在2K范围内,数据段定位在可位寻址区等;5)段名:包括程序和数据(变量和常量)的段的存储属性及段所属的程序模块(文件)。代码段:?PR?funcname?Filename数据段如:?DT?funcname?Filename;?BI?funcname?Filename标准段名前缀

8、列表段前缀存储类型含义?PR?Program程序存储区的代码?CO?code程序存储区的常量?BI?Bit内部数据存储区的可位寻址的位变量?BA?Bdata内部数据存储区的可位寻址的字节变量?DT?Data内部数据存储区的变量?ID?

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。