作者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