Re: 請問macro如何被C 呼叫?
我寫的是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
→
05/04 19:52, , 1F
05/04 19:52, 1F
→
05/04 22:11, , 2F
05/04 22:11, 2F
推
05/06 15:57, , 3F
05/06 15:57, 3F
→
05/06 17:16, , 4F
05/06 17:16, 4F
→
05/06 17:27, , 5F
05/06 17:27, 5F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
ASM 近期熱門文章
PTT數位生活區 即時熱門文章