打印
[疑难问答]

Keil MDK下怎么设置非零初始化变量

[复制链接]
2421|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。

使用特权

评论回复
5
mattlincoln| | 2024-8-6 15:50 | 只看该作者
设置非零初始化变量主要依赖于编译器扩展属性和分散加载文件的正确配置。

使用特权

评论回复
6
earlmax| | 2024-8-8 10:17 | 只看该作者
如果你想要设置非零初始化变量,你可以在变量声明时直接赋予初始值。

使用特权

评论回复
7
kmzuaz| | 2024-8-12 13:39 | 只看该作者
未显式初始化的全局和静态变量将被初始化为非零值。

使用特权

评论回复
8
adolphcocker| | 2024-8-13 08:16 | 只看该作者
初始化一个数组,可以在数组声明的右侧添加初始化列表。

使用特权

评论回复
9
biechedan| | 2024-8-13 16:30 | 只看该作者
需要保留复位前RAM中数据的工控产品中尤为重要。

使用特权

评论回复
10
fengm| | 2024-8-13 22:00 | 只看该作者
在C语言中,全局或静态变量如果没有显式初始化,它们会被编译器默认初始化为0。

使用特权

评论回复
11
timfordlare| | 2024-8-17 14:48 | 只看该作者
希望某些变量在复位时不被初始化为零,而是保持它们的值,你需要使用特殊的编译器指令和链接器设置。

使用特权

评论回复
12
hudi008| | 2024-8-17 16:47 | 只看该作者
在声明需要非零初始化的变量时,可以使用__attribute__((at()))来精确控制变量的存储位置。这样,这些特定的变量就可以被放置在之前定义的UNINIT执行域中,从而避免被初始化。

使用特权

评论回复
13
sdlls| | 2024-8-17 19:45 | 只看该作者
在分散加载文件中定义一个新的执行域(例如MYRAM),专门用于放置不需要零初始化的变量。这个新域应具备UNINIT属性,这样可以确保变量不会被自动初始化。

使用特权

评论回复
14
jtracy3| | 2024-8-17 20:05 | 只看该作者
通过在程序初始处添加检验代码,可以查看这些变量是否按照预期没有被零初始化。这可以通过简单的打印语句或者断点调试来完成。

使用特权

评论回复
15
fengm| | 2024-8-18 11:56 | 只看该作者
需要对这些非零初始化的变量进行额外的处理。

使用特权

评论回复
16
lihuami| | 2024-8-18 21:49 | 只看该作者
如果你使用的是其他编译器或需要更复杂的初始化(如使用外部数据文件初始化变量),可能需要查看编译器的文档来了解特定的设置或命令。

使用特权

评论回复
17
yangxiaor520| | 2024-8-19 07:51 | 只看该作者
最好的做法是定义变量的时候给赋一个初值

使用特权

评论回复
18
iyoum| | 2024-8-19 14:38 | 只看该作者
在源文件中,找到变量的声明位置。

使用特权

评论回复
19
yeates333| | 2024-8-19 22:49 | 只看该作者
为了避免在程序复位或启动时,这些变量被自动初始化为零。

使用特权

评论回复
20
pmp| | 2024-8-20 10:37 | 只看该作者
初始化并指定存储位置              

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

43

主题

1261

帖子

2

粉丝