这样定义对不对

[复制链接]
1861|38
sanfuzi 发表于 2018-5-3 22:00 | 显示全部楼层
@就是指定地址,这个应该没什么好说的了,大部分编译器都这么用。
gygp 发表于 2018-5-3 22:00 | 显示全部楼层
在宏定义里面都有一个关键字__no_init
chenci2013 发表于 2018-5-3 22:00 | 显示全部楼层
__no_init是IAR扩展语法里面的一个扩展关键字
biechedan 发表于 2018-5-3 22:01 | 显示全部楼层
@是一种语法。那么它的作用很明显就是将变量放置到对应的地址中。
wangdezhi 发表于 2018-5-3 22:01 | 显示全部楼层
@是指定地址
isseed 发表于 2018-5-3 22:02 | 显示全部楼层
后面不加@指定地址没有问题。
xietingfeng 发表于 2018-5-3 22:03 | 显示全部楼层
__no_init 不初始化
suzhanhua 发表于 2018-5-3 22:03 | 显示全部楼层
__no_init 是两个宏,这个是编译器定的
mituzu 发表于 2018-5-3 22:03 | 显示全部楼层
no_init用于变量声明。 以 MSP430系列单片机为例, 在默认情况下, MSP430的 C 语言 编译器将变量存放在主 RAM 中, 并在启动时对其进行初始化。
updownq 发表于 2018-5-3 22:04 | 显示全部楼层
定义到不初始化的块中去。
wangdezhi 发表于 2018-5-3 22:04 | 显示全部楼层
定义全局变量的时候比如int char;  即使你没有赋值给他,编译器还是会给他一个初始化值0
biechedan 发表于 2018-5-3 22:04 | 显示全部楼层
使用@,一个变量可以明确的制定一个存储地址。
chenci2013 发表于 2018-5-3 22:04 | 显示全部楼层
用是声明一个non-volatile类型的内存地址(Support non-valotile memory)。
gygp 发表于 2018-5-3 22:04 | 显示全部楼层
查看了《MSP430 IAR C/EC++ Compiler Reference Guide》内的IAR Language Extension Overview
sanfuzi 发表于 2018-5-3 22:04 | 显示全部楼层
define DEFC(name, address) __no_init volatile unsigned char name @ address;
#define DEFC(name, address) sfrb name = address;
这两种定义是等价的
suzhanhua 发表于 2018-5-3 22:04 | 显示全部楼层
具体什么意思我不大清楚。
xietingfeng 发表于 2018-5-3 22:04 | 显示全部楼层
@ address  指定具体存储位置,volatile 非易失性的。
isseed 发表于 2018-5-3 22:04 | 显示全部楼层
用no_init主要是为了防止看门狗导致系统复位后数据重初始化。
mituzu 发表于 2018-5-3 22:04 | 显示全部楼层
在 no_init变量的声明中,不能含有初始化。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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