3624|6

407

帖子

3

TA的资源

纯净的硅(初级)

楼主
 

关于IAR的_no_init问题 [复制链接]

我定义一个结构体里面有一个100*100的二级数组。类似于
struct DATA
{
     unsigned char Data[100][100];
};
struct DATA   uart_data;
这样编译没有问题,仿真就不行了!
但我定义如下:
_no_init struct DATA   uart_data;
是可以仿真的,为什么呢?

最新回复

楼上的太精辟了,长见识了  详情 回复 发表于 2015-1-28 14:24
 
点赞 关注

回复
举报

63

帖子

0

TA的资源

一粒金砂(中级)

推荐
 
430单片机默认上电是看门狗使能的。用户需要在32768个DCO时钟内进行设置或者关闭(这个可以在430的用户手册中找到。),DCO默认时钟视不同430型号而定。
楼主使用了100*100的大数组,单片机上电还在对这些变量初始化时,看门狗就已经复位,所以你的仿真是进不去的,因为看门狗一直在复位。
使用_no_init就是不对变量进行初始化,单片机上电迅速跳转到main中,就能实现仿真。
RAM占用小于单片机的RAM就没关系

点评

豁然开朗啊,原来如些,谢谢你的指点。我刚刚还在纠结呢!我想我空间肯定是够的,原来是这个原因!虽然能用,但总要知道为什么才能用着安心!非常感谢!  详情 回复 发表于 2015-1-28 14:27

赞赏

2

查看全部赞赏

 
 

回复

1412

帖子

15

TA的资源

版主

沙发
 
是不是空间不够分配?把100*100改小点试试?
 
个人签名https://bbs.eeworld.com.cn/thread-471646-1-1.html
欢迎加入我的团队
 
 

回复

530

帖子

4

TA的资源

一粒金砂(高级)

板凳
 
(百度上搜到的答案)
@是指定地址,__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 正好是不用赋值的。估计编译器比较严格。
 
 
 

回复

1291

帖子

0

TA的资源

纯净的硅(中级)

4
 
是不是你分配的太大了
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

6
 
楼上的太精辟了,长见识了

赞赏

1

查看全部赞赏

 
 
 

回复

407

帖子

3

TA的资源

纯净的硅(初级)

7
 
a2656693 发表于 2015-1-28 14:21
430单片机默认上电是看门狗使能的。用户需要在32768个DCO时钟内进行设置或者关闭(这个可以在430的用户手册中找到。),DCO默认时钟视不同430型号而定。
楼主使用了100*100的大数组,单片机上电还在对这些变量初始化时,看门狗就已经复位,所以你的仿真是进不去的,因为看门狗一直在复位。
使用_no_init就是不对变量进行初始化,单片机上电迅速跳转到main中,就能实现仿真。
RAM占用小于单片机的RAM就没关系
豁然开朗啊,原来如些,谢谢你的指点。我刚刚还在纠结呢!我想我空间肯定是够的,原来是这个原因!虽然能用,但总要知道为什么才能用着安心!非常感谢!



 
个人签名我在想
我知道什么
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表