作者ast9869 (甘愿为你~)
看板ASM
标题Re: 请问macro如何被C 呼叫?
时间Sat May 3 21:54:41 2008
我写的是Keil C51没错。
我是想用Macro 来替代 Call Function,因为Macro 好像是copy code 的概念,
而Call Function 感觉较浪费指令,在51上,为了有较好的效率才使用Macro。
如果照你说的,那code 就要改成如下吗?(这样build就过不了了= =||)
好像也是乱搞一通!!
还是说Download64() 要定义成Function ?
谢谢
BYTE d1, d2;
#define Download64(pBuf) \
{ \
#pragma asm \
getXRAM pBuf, 0, d1 \
getXRAM pBuf, 1, d2 \
#pragma endasm \
\
DownTwoByte(0x02, d1, d2); \
}
※ 引述《MasterChang (我爱ASM)》之铭言:
: 你用的C语言是Keil C51吗?(假设是的话)
: 你的写法完全是错的,基本上就是乱搞一通。
: 从上面看来,你的巨集是组合语言的构成。所以你在C使用时
: 就要用嵌入组语的方式使用巨集而不是用含式呼叫的方式。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^===>我比较趋向这方式
: 若是想要用函式呼叫的部分使用组语写成的档案。那你应该要
: 参考Keil C51的使用者手册第六章去把你组语档的构成写好。
: 或在编译器中使用SRC命令帮你把组语构成的框架先作出来。
: : ===================================================================
: : //C51 的 code
: : //ice_func.c
: : #pragma asm
: : getXRAM MACRO _Address, _Shift, _Data
: : mov DPTR, #_Address
: : movx _Data ,@DPTR+_Shift
: : ENDM
: : #pragma endasm
: : ===================================================================
: : //ice_func.h
: : BYTE d1, d2;
: : extern getXRAM(_Address, _Shift, _Data);
: : #define Download64(pBuf) \
: : { \
: : getXRAM(pBuf, 0, d1);\
: : getXRAM(pBuf, 1, d2);\
: : DownTwoByte(0x02, d1, d2); \
: : }
--
█████████████████
█ ████████████████
█████████████████
█ ████████████████
█████████████████
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.110.225.167
1F:→ MasterChang:请把手册第六章看完再说。不然你上面的东西没意义。 05/04 19:52
2F:→ ast9869:看过了C51.pdf,没什麽可以参考的~ 05/04 22:11
3F:推 ruemann:有一种东西叫 inline function 05/06 15:57
4F:→ MasterChang:那就没啥好说的.... 05/06 17:16
5F:→ MasterChang:你要的东西很简单,可惜你没看到.... 05/06 17:27