Re: 請問macro如何被C 呼叫?

看板ASM (組合語言)作者 (甘願為妳~)時間16年前 (2008/05/03 21:54), 編輯推噓1(104)
留言5則, 3人參與, 最新討論串3/3 (看更多)
我寫的是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
看過了C51.pdf,沒什麼可以參考的~
05/04 22:11, 2F

05/06 15:57, , 3F
有一種東西叫 inline function
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
文章代碼(AID): #1876wa8H (ASM)
討論串 (同標題文章)
文章代碼(AID): #1876wa8H (ASM)