2019-03-24 10:31发布
a2656693 发表于 2015-1-28 14:21 430单片机默认上电是看门狗使能的。用户需要在32768个DCO时钟内进行设置或者关闭(这个可以在430的用户手册中找到。),DCO默认时钟视不同430型号而定。 楼主使用了100*100的大数组,单片机上电还在对这些变量初始化时,看门狗就已经复位,所以你的仿真是进不去的,因为看门狗一直在复位。 使用_no_init就是不对变量进行初始化,单片机上电迅速跳转到main中,就能实现仿真。 RAM占用小于单片机的RAM就没关系
最多设置5个标签!
@是指定地址,__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 正好是不用赋值的。估计编译器比较严格。
一周热门 更多>