3773|17

447

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

求解__no_init [复制链接]

__no_init  [数据类型]  变量名  @  地址
这个地址是必须有的吗?如果是,该怎么确定这个地址呢。__no_init的作用是不对变量进行初始化,那变量有值吗?

最新回复

看我的例子,里面有仿真测试  详情 回复 发表于 2014-8-8 15:29
 
点赞 关注

回复
举报

420

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
@是指定地址,__no_init 是一个SEGMENT,是给LINKER用的,定义到不初始化的块中去。
@就是指定地址,这个应该没什么好说的了,大部分编译器都这么用。你应该理解这个吧。
你定义全局变量的时候比如int char;  即使你没有赋值给他,编译器还是会给他一个初始化值0,编译的时候编译器把他分配到初始化为零的那个SEGMENG中去了。编译器默认的有几个块,初始化为零的块,初始化不为零的块,和不初始化的块,你可以定义自己的块,如XDATA,这个就是你自己定义的一个块,那你的这个块是个什么属性呢,就是,__no_init 属性,有了这个属性,编译器只给你分配空间,不给你初始化。

点评

这个“不初始化的块”如何确定呀?  详情 回复 发表于 2014-8-7 08:54
 
 

回复

1792

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 
地址不是必须的,
有带地址的一般和硬件相关,如头文件的寄存器的声明,而该地址在datasheet可查到
__no_init的作用是不对变量进行初始化,该变量在声明的同时不能初始化,但是声明过后可以对其赋值,所以该变量还是有值的

点评

[attachimg]164084[/attachimg] [attachimg]164085[/attachimg] 试着写了个小程序,出现问题,好像是没有给A分配空间,用的是MSP430F5438,请大侠再指点一下  详情 回复 发表于 2014-8-7 09:57
 
 
 

回复

447

帖子

0

TA的资源

纯净的硅(中级)

4
 
armcu 发表于 2014-8-6 16:45
@是指定地址,__no_init 是一个SEGMENT,是给LINKER用的,定义到不初始化的块中去。
@就是指定地址,这个 ...

这个“不初始化的块”如何确定呀?

点评

可以自己定义,具体定义方法看IDE的说明手册  详情 回复 发表于 2014-8-7 09:00
 
 
 

回复

420

帖子

0

TA的资源

一粒金砂(高级)

5
 
zzbaizhi 发表于 2014-8-7 08:54
这个“不初始化的块”如何确定呀?

可以自己定义,具体定义方法看IDE的说明手册

点评

你好,请问这个说明手册在哪里可以找到  详情 回复 发表于 2014-8-8 09:43
 
 
 

回复

447

帖子

0

TA的资源

纯净的硅(中级)

6
 
sint27 发表于 2014-8-6 16:47
地址不是必须的,
有带地址的一般和硬件相关,如头文件的寄存器的声明,而该地址在datasheet可查到
__no_ ...




试着写了个小程序,出现问题,好像是没有给A分配空间,用的是MSP430F5438,请大侠再指点一下

点评

我说的可以赋值是要在主函数里面赋值,你这个赋值看起来是在函数体外赋值的,你再改下试试,我亲测是没有问题的  详情 回复 发表于 2014-8-7 14:19
 
 
 

回复

1792

帖子

0

TA的资源

五彩晶圆(初级)

7
 
zzbaizhi 发表于 2014-8-7 09:57
试着写了个小程序,出现问题,好像是没有给A分配空间,用的是MSP430F5438,请大侠再指点一下

我说的可以赋值是要在主函数里面赋值,你这个赋值看起来是在函数体外赋值的,你再改下试试,我亲测是没有问题的

点评

大侠,我想再问一下。如果把A=0放进main中,程序复位后还会执行A=0这一句吗?如果会,使用__no_init的目的就是保证A不被初始化,使A保持跑飞时的值,可如果执行A=0这一句,那不又重新赋值了吗?如果不会,就是说程序  详情 回复 发表于 2014-8-7 16:23
 
 
 

回复

447

帖子

0

TA的资源

纯净的硅(中级)

8
 
sint27 发表于 2014-8-7 14:19
我说的可以赋值是要在主函数里面赋值,你这个赋值看起来是在函数体外赋值的,你再改下试试,我亲测是没有 ...

大侠,我想再问一下。如果把A=0放进main中,程序复位后还会执行A=0这一句吗?如果会,使用__no_init的目的就是保证A不被初始化,使A保持跑飞时的值,可如果执行A=0这一句,那不又重新赋值了吗?如果不会,就是说程序会自动跳过这些经__no_init声明的这些变量的赋值语句吗?

点评

例如AVR的单片机有复位寄存器,可以记录复位原因,这时候我们只需要写类似的代码,就能避免A被赋值了 void main(){ if(MCUCSR_Bit0==1){ // MCUCSR_Bit0是上电复位标志位 A=0; // 如果是上  详情 回复 发表于 2014-8-7 17:01
 
 
 

回复

1792

帖子

0

TA的资源

五彩晶圆(初级)

9
 
zzbaizhi 发表于 2014-8-7 16:23
大侠,我想再问一下。如果把A=0放进main中,程序复位后还会执行A=0这一句吗?如果会,使用__no_init的目 ...

例如AVR的单片机有复位寄存器,可以记录复位原因,这时候我们只需要写类似的代码,就能避免A被赋值了
void main(){
    if(MCUCSR_Bit0==1){ // MCUCSR_Bit0是上电复位标志位
       A=0;          // 如果是上电复位,则变量赋初值
        MCUCSR_Bit0=0; // 清空上电复位寄存器
    }

点评

[attachimg]164161[/attachimg] 设置前两个红点是为了想看下程序复位时的现象,结果程序根本没停下来,一直运行,想问问,问题出在哪  详情 回复 发表于 2014-8-7 17:35
 
 
 

回复

447

帖子

0

TA的资源

纯净的硅(中级)

10
 
sint27 发表于 2014-8-7 17:01
例如AVR的单片机有复位寄存器,可以记录复位原因,这时候我们只需要写类似的代码,就能避免A被赋值了
vo ...


设置前两个红点是为了想看下程序复位时的现象,结果程序根本没停下来,一直运行,想问问,问题出在哪

点评

没用过该芯片,所以不了解情况  详情 回复 发表于 2014-8-8 08:10
 
 
 

回复

1792

帖子

0

TA的资源

五彩晶圆(初级)

11
 
zzbaizhi 发表于 2014-8-7 17:35
设置前两个红点是为了想看下程序复位时的现象,结果程序根本没停下来,一直运行,想问问,问题出在哪

没用过该芯片,所以不了解情况
 
 
 

回复

2144

帖子

3

TA的资源

五彩晶圆(中级)

12
个人签名电工
 
 

回复

2144

帖子

3

TA的资源

五彩晶圆(中级)

13
 
__no_init 只是用于你来定位变量的 没啥用知道么

__no_init是在linker文件中指定的一个seg不要初始化,默认全局变量在main之前都会初始化为零的,可以进入cstart跟踪看下,iar都是封装好了

点评

你好,请问这个“地址”是RAM内的还是?  详情 回复 发表于 2014-8-8 14:59
 
个人签名电工
 
 

回复

447

帖子

0

TA的资源

纯净的硅(中级)

14
 
armcu 发表于 2014-8-7 09:00
可以自己定义,具体定义方法看IDE的说明手册

你好,请问这个说明手册在哪里可以找到

点评

所有的IDE都有help菜单,在这个菜单里面有个UserGuide,就是了。  详情 回复 发表于 2014-8-8 09:57
 
 
 

回复

420

帖子

0

TA的资源

一粒金砂(高级)

15
 
zzbaizhi 发表于 2014-8-8 09:43
你好,请问这个说明手册在哪里可以找到

所有的IDE都有help菜单,在这个菜单里面有个UserGuide,就是了。
 
 
 

回复

447

帖子

0

TA的资源

纯净的硅(中级)

16
 
lyzhangxiang 发表于 2014-8-8 08:33
__no_init 只是用于你来定位变量的 没啥用知道么

__no_init是在linker文件中指定的一个seg不要初始化, ...

你好,请问这个“地址”是RAM内的还是?

点评

变量就在ram中啊  详情 回复 发表于 2014-8-8 15:29
 
 
 

回复

2144

帖子

3

TA的资源

五彩晶圆(中级)

17
 
zzbaizhi 发表于 2014-8-8 14:59
你好,请问这个“地址”是RAM内的还是?

变量就在ram中啊
 
个人签名电工
 
 

回复

2144

帖子

3

TA的资源

五彩晶圆(中级)

18
 
看我的例子,里面有仿真测试
 
个人签名电工
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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