关于IAR的_no_init问题

2019-03-24 10:31发布

我定义一个结构体里面有一个100*100的二级数组。类似于
struct DATA
{
     unsigned char Data[100][100];
};
struct DATA   uart_data;
这样编译没有问题,仿真就不行了!
但我定义如下:
_no_init struct DATA   uart_data;
是可以仿真的,为什么呢? 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
传媒学子
2019-03-25 02:59
(百度上搜到的答案)
@是指定地址,__no_init 是一个SEGMENT,是给LINKER用的,定义到不初始化的块中去。
@就是指定地址,这个应该没什么好说的了,大部分编译器都这么用。你应该理解这个吧。
你定义全局变量的时候比如int char;  即使你没有赋值给他,编译器还是会给他一个初始化值0,编译的时候编译器把他分配到初始化为零的那个SEGMENG中去了。编译器默认的有几个块,初始化为零的块,初始化不为零的块,和不初始化的块,你可以定义自己的块,如你的PM0_XDATA,这个就是你自己定义的一个块,那你的这个块是个什么属性呢,就是,__no_init 属性,有了这个属性,编译器只给你分配空间,不给你初始化。

我的理解是:  你struct DATA   uart_data;时uart_data未赋值。正确的是:struct DATA   uart_data[100][100]={0}; 而__no_init 正好是不用赋值的。估计编译器比较严格。

一周热门 更多>

相关问题

    相关文章