打印

这样定义对不对

[复制链接]
1182|38
手机看帖
扫描二维码
随时随地手机跟帖
沙发
spark周| | 2018-4-16 11:34 | 只看该作者
用no_init与__no_init有没有区别

使用特权

评论回复
板凳
jiaxw|  楼主 | 2018-4-16 11:37 | 只看该作者
反正在IAR下编译好象都能编译通过。

使用特权

评论回复
地板
yszong| | 2018-4-16 11:40 | 只看该作者
用no_init主要是为了防止看门狗导致系统复位后数据重初始化。

使用特权

评论回复
5
jiaxw|  楼主 | 2018-4-16 11:43 | 只看该作者
目前我在系统中用no_init定义了两个标志位Flag1,Flag2以及其它几个no_init变量,初始化过程我作以下处理。
if((Flag1 != 0x5A) && (Flag2 != 0x5A))
{
     // 在此进行几个no_init变量初始化
     Flag1 = 0x5A;
     Flag2 = 0x5A;
}
这样防止看门狗复位时几个变量重新初始化。
更多操作

使用特权

评论回复
6
dengdc| | 2018-4-16 11:47 | 只看该作者
你有什么新发现吗

使用特权

评论回复
7
jiaxw|  楼主 | 2018-4-16 12:07 | 只看该作者
我采用这种方式处理时,有时候在系统掉电重新上电后发现某个no_int 定义数据会出现一个非正常值,如本来我应该初始化为0,但上电后发现这个值不为0,有没有可能这个变量根本就没有初始化,显示还是一个随机值呢。

使用特权

评论回复
8
jiahy| | 2018-4-16 12:12 | 只看该作者
一般是一些特殊数据!这些数据在系统复位(如看门狗复位或其他原因造成的复位)时的数值是不能改变的!定义这些变量时要修改*.XCL 文件!具体问问刘工吧!我也是从他那里学来的!

使用特权

评论回复
9
lizye| | 2018-4-16 12:15 | 只看该作者
请问你知道具体怎样修改xcl文件吗?

使用特权

评论回复
10
jiaxw|  楼主 | 2018-4-16 12:22 | 只看该作者
找到和你芯片型号相应的*.xcl文件。(最好复制一份,考到你程序的文件夹中,然后把这个文件配置到你的项目中)在这个文件中加入该语句!自己先要确定要定义的NO-INIT的字节数。

使用特权

评论回复
11
spark周| | 2018-4-16 12:29 | 只看该作者
会不会存在跟RAM内定义的其它变量地址重复的情况。

使用特权

评论回复
12
spark周| | 2018-4-16 12:33 | 只看该作者

_no_init第一次见啊,查了一下,学习了
_no_init 是一个SEGMENT,是给LINKER用的,定义到不初始化的块中去,编译器只给你分配空间,不给你初始化。

使用特权

评论回复
13
jiaxw|  楼主 | 2018-4-16 12:39 | 只看该作者

哦,那我就知道怎么回事了,多谢大家,结贴了哈

使用特权

评论回复
14
Thorald| | 2018-4-21 16:11 | 只看该作者
定义到不初始化的块中去,编译器只给你分配空间,不给你初始化。

那也就是说_no_ini不能初始化了

使用特权

评论回复
15
chuntian2016| | 2018-4-21 19:30 | 只看该作者
no_init,,,这个是啥作用的?

使用特权

评论回复
16
zhangbo1985| | 2018-4-21 22:42 | 只看该作者
灭这样用过的,也不知道的

使用特权

评论回复
17
smilingangel| | 2018-4-22 23:20 | 只看该作者
jiaxw 发表于 2018-4-16 11:43
目前我在系统中用no_init定义了两个标志位Flag1,Flag2以及其它几个no_init变量,初始化过程我作以下处理。
...

这一块的我参考下的

使用特权

评论回复
18
lefeng| | 2018-4-25 08:56 | 只看该作者
怎样修改xcl文件

使用特权

评论回复
19
Rangar| | 2018-4-27 19:04 | 只看该作者
RAM内定义的其它变量地址重复?

使用特权

评论回复
20
updownq| | 2018-5-3 21:59 | 只看该作者
__no_init 是一个SEGMENT

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

825

主题

9762

帖子

4

粉丝