声明一个变量导致编译出来的文件加载不起来的问题

suncs2001 2014-06-26 11:55:50
在正常的代码基础上,在某个c文件中声明了一个32位变量并且赋初值,发现编译过的bin文件加载不起来,而且是在加载的很早的阶段就复位了。 把这个变量去掉再编译加载又没问题了。如果声明这个32位变量并且不赋值,也没有问题。
怀疑是因为多声明了一个变量,导致数据发生了偏移,怀疑踩到了什么东西,导致在加载过程中错乱。现在有反汇编文件,不知道这样的问题该如何分析是哪里出了问题。 大家有没有什么好的思路啊。
...全文
606 点赞 收藏 7
写回复
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
woquNOKIA 2014-11-18
编译器不支持在语句后边定义变量,必须把变量的定义放到语句的前边
回复
ghyd 2014-06-30
给你个提示,不知道有用没,全局变量声明后不赋值时,是放在代码的bss段的,声明的同时赋值的,放在data段,是不是还是你的代码data段空间有泄漏呢? 你可以尝试把全局变量改一下,用静态局部变量替代,看是否还有这个问题。
回复
熊已出没 2014-06-29
你不把代码放上来怎么说了清楚. 就算你说清楚了,也不见得听了清楚.
回复
suncs2001 2014-06-27
没说清楚,不是编译内核,相当于是编译应用程序,最终会编译出bin文件,放到硬件的板子上加载,这个bin文件就是硬件板子上运行的所有软件代码。 另外就是那个变量是定义,不是单纯的声明,是要赋初值的。定义的变量和声明的变量所在内存中的位置不一样。定义的话应该是在代码段我记得。 当时就是怀疑因为定义这个变量导致后面的空间里的东西踩到什么地方的。但是整个地址空间很大,不知道怎么分析了。
回复
chenxu24511 2014-06-27
没接触过vxwork,但想学,小弟新手,全局只初始为0,不初始化一般默认0。局部就可以下面初始化吗。
回复
woshi_ziyu 2014-06-27
查看一下变量定义之后所分配的地址空间
回复
jackydi 2014-06-27
楼主的问题说的很模糊,你是编译的应用程序,还是内核?如果是内核的话,是否可能与内核中原本的变量名冲突?如果是应用程序的话,怎么编译出bin文件呢? 只有定义变量的时候才可以初始化,声明变量的时候不能初始化,否则就变成定义变量了。
回复
发动态
发帖子
VxWorks
创建于2007-09-28

2048

社区成员

xworks是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统。
申请成为版主
社区公告
暂无公告