全局变量能不能在定义时初始化?

[复制链接]
5985|8
 楼主| pdrs 发表于 2013-1-20 19:37 | 显示全部楼层 |阅读模式
比如我现在定义全局变量:
int a=10;
这个初始化值10,如果我是把程序load到ram中,a的确是10,但如果我把程序烧写到falsh中去,则a的值没有被初始化。
我现在都是在main函数的开始加上一段给全局变量赋值的代码来初始化其值,可以有办法在定义时初始化全局变量值吗?

我用的是F2812,CCS3,以及TI标准的那个CMD文件。
zhangmangui 发表于 2013-1-21 09:37 | 显示全部楼层
那就把初始化代码放到main函数外面试试   最好贴出代码让大家帮你看看
jlass 发表于 2013-1-21 09:49 | 显示全部楼层
我现在都是在main函数的开始加上一段给全局变量赋值的代码来初始化其值

其实这样做更可靠,而且可移植性好,我都是这么做的。

楼主的问题我是否可以理解为仿真是对的,但烧到flash里去就错了。
airwill 发表于 2013-1-21 14:10 | 显示全部楼层
是的, 完全可以. 而且效率很高
不要担心, 启动代码会从 flash 里面帮你加载相应的值的
 楼主| pdrs 发表于 2013-1-21 19:03 | 显示全部楼层
比如代码:

int a=10;

main()
{
    while(1)
    {
        send(a);
        a++;
    }
}

如果是load,则a是从10开始,但如果烧写到F2812的flash中,从a从0开始
 楼主| pdrs 发表于 2013-1-21 19:04 | 显示全部楼层
airwill 发表于 2013-1-21 14:10
是的, 完全可以. 而且效率很高
不要担心, 启动代码会从 flash 里面帮你加载相应的值的 ...

如何实现,需要改CMD文件吗,我现在的问题就是没有加载相应的值。
airwill 发表于 2013-1-21 21:11 | 显示全部楼层
我手头的程序测试了一下, 用调速器看完全正常.
不过我的不是 F2812,CCS3 ,  而是 F28035, CCS5.1
还是不大相信会有你的问题.
optical85 发表于 2013-1-23 10:01 | 显示全部楼层
build option里面把run time initialization改成load time initialization

评分

参与人数 1威望 +1 收起 理由
pdrs + 1 真是这样,原来是link时的设置错了.

查看全部评分

bruceding 发表于 2013-1-23 14:35 | 显示全部楼层
设置正确的话,进入main之前,boot代码就会把变量初始化,具体的做法是把flash里面的数据值拷贝到.data seg
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

21

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部