打印

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

[复制链接]
5218|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 里面帮你加载相应的值的

使用特权

评论回复
5
pdrs|  楼主 | 2013-1-21 19:03 | 只看该作者
比如代码:

int a=10;

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

如果是load,则a是从10开始,但如果烧写到F2812的flash中,从a从0开始

使用特权

评论回复
6
pdrs|  楼主 | 2013-1-21 19:04 | 只看该作者
airwill 发表于 2013-1-21 14:10
是的, 完全可以. 而且效率很高
不要担心, 启动代码会从 flash 里面帮你加载相应的值的 ...

如何实现,需要改CMD文件吗,我现在的问题就是没有加载相应的值。

使用特权

评论回复
7
airwill| | 2013-1-21 21:11 | 只看该作者
我手头的程序测试了一下, 用调速器看完全正常.
不过我的不是 F2812,CCS3 ,  而是 F28035, CCS5.1
还是不大相信会有你的问题.

使用特权

评论回复
8
optical85| | 2013-1-23 10:01 | 只看该作者
build option里面把run time initialization改成load time initialization

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
pdrs + 1 真是这样,原来是link时的设置错了.
9
bruceding| | 2013-1-23 14:35 | 只看该作者
设置正确的话,进入main之前,boot代码就会把变量初始化,具体的做法是把flash里面的数据值拷贝到.data seg

使用特权

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

本版积分规则

5

主题

21

帖子

0

粉丝