Yhlr 发表于 2024-1-31 17:40:08

如果在sct中未定义内存分配,但是在程序中做了强制定义数据地址,脱机状态和调试状态的值不一样

求助:是这样的,我在STM32H750VBT6上使用了sct分散加载,但是我在sct中并没有定义0x20000000开头的地址块,但是我在程序中强制定义了一个放在0x20000000地址的全局变量数据(对sct不太熟悉,所以就模仿公司之前的代码写的)。当我在使用Jlink在调试状态下,我看到这个数据是被正常初始化为0,但是我在脱机状态下,用Jscope观察到这个数据,像是一个NOINIT未被初始化的值,以下是我的sct截图,jscope截图,调试状态下的截图,最终的表现就是脱机状态下的值和调试的值不一样。

WZH 发表于 2024-1-31 19:28:21

没初始化才是正常的,C语言里全局变量初始值,是由C库在main函数开始前进行赋值的,你没在sct文件中标记这个全局变量的属性,那C库很可能不管这个变量了,自然会在初始化出现一点问题,可以在main函数里直接赋值试一试。
赋初值分为两种情况,第一种是仅仅定义了变量,这时变量值为默认为0。第二种是定义了变量,并赋予初值。注意这两种情况下变量分配的地方是不同的。

Yhlr 发表于 2024-2-1 10:42:50

WZH 发表于 2024-1-31 19:28
没初始化才是正常的,C语言里全局变量初始值,是由C库在main函数开始前进行赋值的,你没在sct文件中标记这 ...

我了解这个初始化的流程,我现在认为可能是我只定义了这个变量的地址,没有定义这个变量的属性,在_main中并没有对它进行初始化,但是为什么Debug的时候这个值被初始化了呢?
页: [1]
查看完整版本: 如果在sct中未定义内存分配,但是在程序中做了强制定义数据地址,脱机状态和调试状态的值不一样