[疑难问答] Keil MDK下怎么设置非零初始化变量

[复制链接]
3883|23
 楼主| saservice 发表于 2024-7-20 07:43 | 显示全部楼层 |阅读模式
Keil MDK下怎么设置非零初始化变量?
sesefadou 发表于 2024-8-4 09:29 | 显示全部楼层
在“Target”选项卡中,你会看到一个名为“Code Rom Size”的设置项。这里可以设置代码的大小。
louliana 发表于 2024-8-4 10:19 | 显示全部楼层
没有特殊的编译器设置来控制非零初始化变量的行为。
wengh2016 发表于 2024-8-4 12:22 | 显示全部楼层
一个ARM映像文件包含代码和数据,数据部分又分为已经初始化的数据和未经过初始化的存储区域。已经初始化的数据存放于RW属性输入节,而未初始化的数据(即ZI属性输入节)在启动时会被自动初始化为0。
mattlincoln 发表于 2024-8-6 15:50 | 显示全部楼层
设置非零初始化变量主要依赖于编译器扩展属性和分散加载文件的正确配置。
earlmax 发表于 2024-8-8 10:17 | 显示全部楼层
如果你想要设置非零初始化变量,你可以在变量声明时直接赋予初始值。
kmzuaz 发表于 2024-8-12 13:39 | 显示全部楼层
未显式初始化的全局和静态变量将被初始化为非零值。
adolphcocker 发表于 2024-8-13 08:16 | 显示全部楼层
初始化一个数组,可以在数组声明的右侧添加初始化列表。
biechedan 发表于 2024-8-13 16:30 | 显示全部楼层
需要保留复位前RAM中数据的工控产品中尤为重要。
fengm 发表于 2024-8-13 22:00 | 显示全部楼层
在C语言中,全局或静态变量如果没有显式初始化,它们会被编译器默认初始化为0。
timfordlare 发表于 2024-8-17 14:48 | 显示全部楼层
希望某些变量在复位时不被初始化为零,而是保持它们的值,你需要使用特殊的编译器指令和链接器设置。
hudi008 发表于 2024-8-17 16:47 | 显示全部楼层
在声明需要非零初始化的变量时,可以使用__attribute__((at()))来精确控制变量的存储位置。这样,这些特定的变量就可以被放置在之前定义的UNINIT执行域中,从而避免被初始化。
sdlls 发表于 2024-8-17 19:45 | 显示全部楼层
在分散加载文件中定义一个新的执行域(例如MYRAM),专门用于放置不需要零初始化的变量。这个新域应具备UNINIT属性,这样可以确保变量不会被自动初始化。
jtracy3 发表于 2024-8-17 20:05 | 显示全部楼层
通过在程序初始处添加检验代码,可以查看这些变量是否按照预期没有被零初始化。这可以通过简单的打印语句或者断点调试来完成。
fengm 发表于 2024-8-18 11:56 | 显示全部楼层
需要对这些非零初始化的变量进行额外的处理。
lihuami 发表于 2024-8-18 21:49 | 显示全部楼层
如果你使用的是其他编译器或需要更复杂的初始化(如使用外部数据文件初始化变量),可能需要查看编译器的文档来了解特定的设置或命令。
yangxiaor520 发表于 2024-8-19 07:51 来自手机 | 显示全部楼层
最好的做法是定义变量的时候给赋一个初值
iyoum 发表于 2024-8-19 14:38 | 显示全部楼层
在源文件中,找到变量的声明位置。
yeates333 发表于 2024-8-19 22:49 | 显示全部楼层
为了避免在程序复位或启动时,这些变量被自动初始化为零。
pmp 发表于 2024-8-20 10:37 | 显示全部楼层
初始化并指定存储位置              
您需要登录后才可以回帖 登录 | 注册

本版积分规则

43

主题

1544

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部