Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1271309
  • 博文数量: 482
  • 博客积分: 13297
  • 博客等级: 上将
  • 技术积分: 2890
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-12 16:25
文章分类

全部博文(482)

文章存档

2012年(9)

2011年(407)

2010年(66)

分类: 嵌入式

2011-01-19 13:35:13


  • 等 级:
  • 结帖率:
楼主发表于:2008-09-10 15:29:12
请教高手给指点一下几个宏定义的问题,一共有二:
1、
#define __IO_REG32_BIT(NAME, ADDRESS, ATTRIBUTE, BIT_STRUCT)\
  volatile __no_init ATTRIBUTE union \
  { \
  unsigned long NAME; \
  BIT_STRUCT \
  } @ ADDRESS
以上这个例子是一段ARM程序的例子,NAME ## _bit;代表什么意思?后面的@ ADDRESS又代表什么意思呢?
2、
#define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \
cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep, cmd, usage, help}
这段例子是u-boot中的程序,__u_boot_cmd_##name和#name有什么关系?
  • [0]
  • [0]
回复次数:6
  • (楼长)
  • 等 级:
#1楼 得分:1回复于:2008-09-10 15:37:16
UP
  • [0]
  • [0]
精华推荐:
  • (C Fans)
  • 等 级:
#2楼 得分:2回复于:2008-09-10 15:39:35
#define __IO_REG32_BIT(NAME, ADDRESS, ATTRIBUTE, BIT_STRUCT) \
#define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \

这两句的\前应该有空格吧  

  • [0]
  • [0]
精华推荐:
  • (飞翔的鱼)
  • 等 级:
  • 2

#3楼 得分:13回复于:2008-09-10 15:40:49
1.
NAME ## _bit NAME的内容和_bit连起来做为一个标识符、变量,例如:
NAME = test 则 NAME ## _bit =test_bit
@ ADDRESS 是不是ARM专有的?猜测是表示放在ADDRESS的地址上

2.
__u_boot_cmd_##name参照我上面的解释
#name则表示name所代表的按字符串解释,例如:
name = test 则 #name = "test"
  • [0]
  • [0]
精华推荐:
  • (知识需要沉淀)
  • 等 级:
#4楼 得分:4回复于:2008-09-10 15:40:57
应该是编译器预处理里 的标志粘贴 ,楼主可以看下关于预处理的文章
  • [0]
  • [0]
精华推荐:
  • 等 级:
#5楼 得分:0回复于:2008-09-10 15:58:03
我现在了解#和##的含义了,多谢xkyx_cn 的指点以及其他朋友的热情支持,现在只剩下第一个问题的@ ADDRESS不懂了,我先看看,要是哪位了解别忘了告诉我啊,多谢大家!
  • [0]
  • [0]
精华推荐:
  • (EDman_linux)
  • 等 级:
#6楼 得分:0回复于:2008-11-25 16:05:36
用于让RAM中的一个地址与寄存器之间产生映射关系 即你对这个地址的操作就是对相应寄存器的操作 例如:
#define __IO_REG32_BIT(NAME, ADDRESS, ATTRIBUTE, BIT_STRUCT)
  volatile __no_init ATTRIBUTE union  
  {   
  unsigned long NAME;   
  BIT_STRUCT NAME ## _bit;   
  } @ ADDRESS

__IO_REG32_BIT(CTIME0, 0xE0024014,__READ,__ctime0_bits);

阅读(1112) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2011-03-09 13:56:32

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com