xkdwangcs 发表于 2011-4-11 23:05:16

新型IO口定义和#pragma message("")为什么不能在ICC AVR编译器中实现,求

前几天我看见有人在帖子上发表了一片,关于AVR单片机IO的新定义,可以利用一下程序进行初始化:
#ifndef __always_inline__
#define __always_inline__#Pragma("inline=forced") inline
#endif

#define AVR_GPIO_ASSIGN(name, port, bit) \
__always_inline__ static void   GPIO_##name##_Set(void)            {PORT##port |= (1 << bit);}\
__always_inline__ static void   GPIO_##name##_Clr(void)            {PORT##port &= ~(1 << bit);}\
__always_inline__ static void   GPIO_##name##_Toggle(void)         {PORT##port ^= (1 << bit);}\
__always_inline__ static ucharGPIO_##name##_Read(void)         {return (PIN##port & (1 << bit)) != 0;}\
__always_inline__ static ucharGPIO_##name##_DdrRead(void)      {return (DDR##port & (1 << bit)) != 0;}\
__always_inline__ static void   GPIO_##name##_MakeOut(uint8 x)   {(x)?(PORT##port |= (1 << bit)):(PORT##port &= ~(1 << bit)); DDR##port |= (1 << bit);}\
__always_inline__ static void   GPIO_##name##_MakeIn(uint8 x)      {DDR##port &= ~(1 << bit); (x)?(PORT##port |= (1 << bit)):(PORT##port &= ~(1 << bit));}\
__always_inline__ static void   GPIO_##name##_MakePullup(void)   {GPIO_##name##_MakeIn(1);}
#endif
这样的话,在函数中,如果调用
AVR_GPIO_ASSIGN(LED_1,B,0);    //LED_1-------PORTB0
AVR_GPIO_ASSIGN(LED_2,B,1);    //LED_2-------PORTB1
AVR_GPIO_ASSIGN(KEY,B,2);      //KEY---------PORTB2
那么宏定义里面的数据就可以进行处理了。但是在ICC AVR上报错了。
可以教我怎么做吗 傻孩子,给点力了。

还有就是,现在我用宏定义较多,经常会忘记那些已经宏定义过了。在网上看到可以利用
#pragma message ("text")的语句来提示你是否进行了宏定义提示。
但是在ICC AVR上编译出现没有这个语法的用。所以,
有人可以帮我解释一下吗?

xkdwangcs 发表于 2011-4-11 23:07:02

最好可以帮我解释一下,#pragma的一些经常的用法,在ICCAVR当中。好像IAR的好多,但是我基本不用那个。所以希望傻孩子可以帮我解决一下这个难题了。
不胜感激

Gorgon_Meducer 发表于 2011-4-12 20:13:13

ICC没有那么高档。
#pragma对每一个编译器来说都是不一样的。
ICC非常呆,它没有inline的说法,或者说所有的宏他都是inline的……
详细的内容你还是要看icc的帮助文档哈

xkdwangcs 发表于 2011-4-13 18:33:30

嗯,傻孩子,我自己也看了ICC的帮助文档了。但是很少有介绍对于#pragma的用法的介绍的。
傻孩子可以提供一些,关于这个的用法吗
我看了#pragmamessage()对我很有用处的。所以,想让傻孩子帮个忙了。多谢了。

Gorgon_Meducer 发表于 2011-4-14 10:32:43

ICC没有#pragma message()这样的用法。
只有一些绝对定位用的。这个你在帮助文档里面能搜索到:
好像有
#pragma abs_address
#pragma text: ...
#pragma data:...

xkdwangcs 发表于 2011-4-14 18:27:54

好的。谢谢了。我自己在看看了。

zeropower 发表于 2011-4-22 11:17:24

#pragma message()不是所有编译器都有, 建议用#warning代替
页: [1]
查看完整版本: 新型IO口定义和#pragma message("")为什么不能在ICC AVR编译器中实现,求