硬汉嵌入式论坛

 找回密码
 立即注册
查看: 276|回复: 2
收起左侧

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

[复制链接]

2

主题

10

回帖

16

积分

新手上路

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

使用道具 举报

12

主题

153

回帖

204

积分

高级会员

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

使用道具 举报

2

主题

10

回帖

16

积分

新手上路

积分
16
 楼主| 发表于 2024-2-1 10:42:50 | 显示全部楼层
WZH 发表于 2024-1-31 19:28
没初始化才是正常的,C语言里全局变量初始值,是由C库在main函数开始前进行赋值的,你没在sct文件中标记这 ...

我了解这个初始化的流程,我现在认为可能是我只定义了这个变量的地址,没有定义这个变量的属性,在_main中并没有对它进行初始化,但是为什么Debug的时候这个值被初始化了呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-28 09:18 , Processed in 0.269991 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表