只有经验丰富的工程师才知道答案的问题

[复制链接]
4002|9
 楼主| pp12061206 发表于 2009-6-30 10:29 | 显示全部楼层 |阅读模式
#define DEFW(name, address) __no_init volatile unsigned short name @ address;

以上程序是msp430的一段程序.没有搞懂程序员把defw()函数定义成了什么?
__no_init 以前没有见过, volatile 倒是见过, name@address是个什么东西?
inter_zhou 发表于 2009-6-30 11:45 | 显示全部楼层

华而不实

huangqi412 发表于 2009-6-30 11:45 | 显示全部楼层

把个普通 单元定义成个类似不初始化的特殊积存器

flead 发表于 2009-6-30 13:08 | 显示全部楼层

是C语言的东西,

#define DEFW(name, address) __no_init volatile unsigned short name @ address; 

1:这是带参数的宏定义,name,address,是参数。(和函数的参数类似)。
2:__no_init 没有具体见过,有可能是C编译器自带的宏,也有可能是讲某个C编译器自带的宏重新命名过的。
yilusuiyuan 发表于 2012-10-7 22:07 | 显示全部楼层
这个东西到底什么意思哟?
xjtu悬崖路 发表于 2012-10-7 22:25 | 显示全部楼层
1.__no_init指示linker将此变量放到不初始化的块中去
2.volatile指示此变量可能在其他地方被改变
3.@地址,将变量强制定义到地址
4.整句宏定义一个address地址处的不需初始化的unsiged short寄存器变量.
znmcu 发表于 2012-10-8 10:18 | 显示全部楼层
__no_init 是IAR编译器的一个关键字,用于定义某块内存不进行初始化
volatile防止编译器优化,保证你访问的确实是物理地址上的数据
@内存绝对地址定位

此宏用于 在 address地址上定义一个 名为name的变量,并不经初始化。
ayb_ice 发表于 2012-10-8 10:29 | 显示全部楼层
这是SFR的定义
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

27

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部