欢迎来到天天文库
浏览记录
ID:39549779
大小:81.00 KB
页数:9页
时间:2019-07-06
《C51 #pragma NOAREGS控制命令解析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、2010-12-1116:39AREGS/NOAREGS说明:AREGS控制使编译器对寄存器R0到R7用绝对寄存器地址。绝对地址提高了代码的效率。例如:PUSH和POP指令只能用直接或绝对地址。用AREGS命令可以直接PUSH或POP寄存器。NOAREGS命令对寄存器R0到R7不使能绝对寄存器地址。用NOAREGS编译的函数可以使用所有的8051寄存器组。命令可用在被别的函数用不同的寄存器组调用的函数中。例子:stmtlevelsourceexterncharfunc(); chark; #pragmaNOAREGS
2、 //noaregfuncC语言程序 noaregfunc(){ 1k=func()+func(); }#pragmaAREGS //aregfuncC语言程序aregfunc(){k=func()+func();};FUNCTIONnoaregfunc(BEGIN) //noaregfunc汇编语言程序LCALLfuncMOVA,R7PUSHACCLCALLfuncPOPACCADDA,R7MOVk,ARET;FUNCTIONnoaregfunc(END);FUNCTIONaregfunc(BE
3、GIN) //aregfunc汇编语言程序LCALLfuncPUSHAR7LCALLfuncPOPACCADDA,R7MOVk,ARET;FUNCTIONaregfunc(END)以上摘自jxlxh翻译的keil公司发布的C51.pdf可以看到,AREGS与NOAREGS最大区别就是AREGS:PUSHAR7 //AR7为R7的地址NOAREGS:MOVA,R7PUSHACC所以AREGS的执行效率更高,而NOAREGS则不对AR7进行操作。#pragma百科名片在所有的预处理指令中,#Pragma指令可能是最复杂的
4、了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。目录一般格式常用参数1.message参数2.code_seg3.#pragmaonce4.#pragmahdrstop5.#pragmaresource6.#pragmawarning7.pragmacomment应用实例一般格式常用参数1.message参数2.code
5、_seg3.#pragmaonce4.#pragmahdrstop5.#pragmaresource6.#pragmawarning7.pragmacomment应用实例展开编辑本段一般格式 其格式一般为:#PragmaPara。其中Para为参数,下面来看一些常用的参数编辑本段常用参数 #pragmamessage参数 Message参数能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为: #Pragmamessage(“消息文本”) 当编译器遇到这条指令时就在编译输
6、出窗口中将消息文本打印出来。 当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有没有正确的设置这些宏,此时我们可以用这条指令在编译的时候就进行检查。假设我们希望判断自己有没有在源代码的什么地方定义了_X86这个宏可以用下面的方法 #ifdef_X86 #Pragmamessage(“_X86macroactivated!”) #endif 当我们定义了_X86这个宏以后,应用程序在编译时就会在编译输出窗口里显示“_X86macroactivated!”。我们就不会因为不记得自己定义的一些
7、特定的宏而抓耳挠腮了。code_seg 另一个使用得比较多的pragma参数是code_seg。格式如: #pragmacode_seg(["section-name"[,"section-class"]]) 它能够设置程序中函数代码存放的代码段,当我们开发驱动程序的时候就会使用到它。#pragmaonce (比较常用) 只要在头文件的最开始加入这条指令就能够保证头文件被编译一次,这条指令实际上在VC6中就已经有了,但是考虑到兼容性并没有太多的使用它。 #pragmaonce是编译相关,就是说这个编译系统上能
8、用,但在其他编译系统不一定可以,也就是说移植性差,不过现在基本上已经是每个编译器都有这个定义了。 #ifndef,#define,#endif这个是C++语言相关,这是C++语言中的宏定义,通过宏定义避免文件多次编译。所以在所有支持C++语言的编译器上都是有效的,如果写的程序要跨平台,最好使用这种方式#pragma
此文档下载收益归作者所有