搜索
bottom↓
回复: 6

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

[复制链接]

出0入0汤圆

发表于 2011-4-11 23:05:16 | 显示全部楼层 |阅读模式
前几天我看见有人在帖子上发表了一片,关于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 uchar  GPIO_##name##_Read(void)           {return (PIN##port & (1 << bit)) != 0;}\
__always_inline__ static uchar  GPIO_##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上编译出现没有这个语法的用。所以,
有人可以帮我解释一下吗?

出0入0汤圆

 楼主| 发表于 2011-4-11 23:07:02 | 显示全部楼层
最好可以帮我解释一下,#pragma的一些经常的用法,在ICCAVR当中。好像IAR的好多,但是我基本不用那个。所以希望傻孩子可以帮我解决一下这个难题了。
不胜感激

出0入296汤圆

发表于 2011-4-12 20:13:13 | 显示全部楼层
ICC没有那么高档。
#pragma对每一个编译器来说都是不一样的。
ICC非常呆,它没有inline的说法,或者说所有的宏他都是inline的……
详细的内容你还是要看icc的帮助文档哈

出0入0汤圆

 楼主| 发表于 2011-4-13 18:33:30 | 显示全部楼层
嗯,傻孩子,我自己也看了ICC的帮助文档了。但是很少有介绍对于#pragma的用法的介绍的。
傻孩子可以提供一些,关于这个的用法吗
我看了#pragma  message()对我很有用处的。所以,想让傻孩子帮个忙了。多谢了。

出0入296汤圆

发表于 2011-4-14 10:32:43 | 显示全部楼层
ICC没有#pragma message()这样的用法。
只有一些绝对定位用的。这个你在帮助文档里面能搜索到:
好像有
#pragma abs_address
#pragma text: ...
#pragma data:...

出0入0汤圆

 楼主| 发表于 2011-4-14 18:27:54 | 显示全部楼层
好的。谢谢了。我自己在看看了。

出0入0汤圆

发表于 2011-4-22 11:17:24 | 显示全部楼层
#pragma message()不是所有编译器都有, 建议用#warning代替
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-5 14:55

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表