yangwei1840 发表于 2020-11-23 14:00:01

STM32F103RC变量初始化问题

定义长度为7的短整型数组:u16 ArryTest;
再定义一个短整形变量 u16 Test0 = 0;
编译后,如果Test0的地址被编译到数组ArryTest的下一个地址,则Test0变量的值一直是0x03,并且无法被初始化其他值。
例如:ArryTest的地址为0x20000200,Test0 的地址为0x2000020e,则Test0 的值无法被修改,一直为0x03.
有哪位朋友遇到过这样的问题没有?

wenyangzeng 发表于 2020-11-23 15:06:39

可能是数组定义后没有初始化,而变量先于数组初始化了所引起的。这个变量在RAM的位置当然不在数组后面哦!
建议定义数组后马上初始化看看:
u16 ArayTest={0x0000,0x0000,0x000,0x0000,0x0000,0x0000,0x0000};

发表于 2020-11-23 15:17:52

楼主再什么情况下确认值不变的?建议在线仿真,进入MAIN函数后,看一下test值,单步运行,同时再watch窗口看一下test的值。

tanic 发表于 2020-11-23 18:43:45

如楼主描述,不会出现此种情况,肯定现象没搞对

wudianjun2001 发表于 2020-11-23 19:46:37

这么低级的问题应该不会有的,单步仿真看看,或者初始化再单步看看,到什么时候变的,还是其他原因引起的

陌路夕颜 发表于 2020-11-25 13:53:48

建议直接上代码,不想上代码就打印变量的地址,或者在线调试

toofree 发表于 2020-11-25 14:35:45

变量定义时指定地址要谨慎,不要占用系统栈空间。

edmundlee 发表于 2020-11-25 15:16:54

还是贴代码吧。这应该是对齐的问题, 你可以试一下把7改为8, 问题就会解决了, 信不?

ts2000 发表于 2020-11-25 17:17:24

数组只定义不初始化的话,是不会占用内存的。

butterflyspring 发表于 2020-11-30 10:46:23

编译有很多条件的,没有具体代码,编译器和版本,以及选项,大家很难判断和验证的。目前看起不应该发生这样的问题。
页: [1]
查看完整版本: STM32F103RC变量初始化问题