|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
ARM宏定義的問題 |
| 作者:liuguobing 欄目:ARM技術(shù) |
#define RX_Ctrl1 1<<22 #define TX_Ctrl1 1<<23 #define _TX1_Sel_ {IO0SET=RX_Ctrl1; IO0SET=TX_Ctrl1;} #define _RX1_Sel_ {IO0CLR=TX_Ctrl1; IO0CLR=RX_Ctrl1;} 在程序中我做了如上定義,可是在編譯后有些宏能被編譯出,但有些不能被編譯(不能生成匯編碼),不知是什么原因!請賜教! 我用的是ADS1.2,在程序中多次用到過此宏 |
| 2樓: | >>參與討論 |
| 作者: twentyone 于 2006/8/1 22:11:00 發(fā)布:
re 宏這樣定義沒錯,但要看你怎么用了?你看看你是在那些地方用的,怎么用的,替代展開后是否正確。 |
|
| 3樓: | >>參與討論 |
| 作者: xxqarm 于 2006/8/1 23:54:00 發(fā)布:
定義有問題 前面兩句最好加上括號,后面兩句,用do{}while(0)形式,要不在某些語句中展開是錯的. |
|
| 4樓: | >>參與討論 |
| 作者: liuguobing 于 2006/8/2 9:14:00 發(fā)布:
謝謝二位! re:twentyone 我是用在一個RS485總線的send & receive切換,在程序中頻繁用到。它有的可以編譯(編譯出來的匯編碼是完全正確的),但有些不能被編譯(都沒有生成任何匯編碼) |
|
| 5樓: | >>參與討論 |
| 作者: liuguobing 于 2006/8/2 9:15:00 發(fā)布:
謝謝二位! re:xxqarm 謝謝,我先試下你的高招,你的意思是把 “#define _TX1_Sel_ {IO0SET=RX_Ctrl1; IO0SET=TX_Ctrl1;}” 改為: “#define _TX1_Sel_ {do{IO0SET=RX_Ctrl1;IO0SET=TX_Ctrl1;}while(0)}" |
|
| 6樓: | >>參與討論 |
| 作者: liuguobing 于 2006/8/2 9:32:00 發(fā)布:
問題已搞定 在使用時后面加上“;”號就好了 編譯器之前都把它和下一條語句一起編譯了,所以我沒有看到 |
|
| 7樓: | >>參與討論 |
| 作者: twentyone 于 2006/8/2 9:35:00 發(fā)布:
re :-) |
|
| 8樓: | >>參與討論 |
| 作者: xxqarm 于 2006/8/2 9:40:00 發(fā)布:
最外面那對大括號要去掉,要不有些地方還會有問題 |
|
| 9樓: | >>參與討論 |
| 作者: xxj2001223 于 2006/8/2 11:31:00 發(fā)布:
所地方 #define _TX1_Sel_ do{IO0SET=RX_Ctrl1;IO0SET=TX_Ctrl1;}while(0) |
|
| 10樓: | >>參與討論 |
| 作者: liuguobing 于 2006/8/2 11:59:00 發(fā)布:
re: 這么危險呀?那調(diào)試時還得注意啦! |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |