打印
[应用方案]

启动代码中关于变量的初始化

[复制链接]
600|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Puremr|  楼主 | 2019-3-29 17:52 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
对于一个标准C程序所用到的全局和静态变量都是定位在固定的内存空间,在程序启动时必须赋予确定的数值,对于程序中没有赋初值的变量,编译器默认赋值为0。对于__no_init限定的变量则不会被初始化。

对于一个标准的C程序中用到的变量类别如下 Categories of declared data 所示,



L(1) 初始化过程

需要初始化为0的section由ILINK中放置在RAM中。需要被初始化的section需要放置在initialize指令列表中,不包括初始化为0的section。

通常在链接中,需要被初始化的块分为两个section。一个section变量的名字,一个section保存变量的初始值。例子,一个.data section被分割为.data 和.data_init



包含常量的section不用初始化,放置在ROM/FLASH中



以__no_init指令定义的变量不需初始化,因此将.noinit放在 do not initialize指令列表下,这些变量放置在RAM中



L(2) 在icf中,关于数据的链接内容例下



do not initialize { section .noinit };

/* Initialize RW sections,exclude zero-initialized sections */

initialize by copy { readwrite };



/* Place startup code at a fixed address */

place at start of ROM { readonly section .cstartup };



/* Place code and data */

/* Place constants and initializers in ROM: .rodata and .data_init */



place in ROM { readonly };

/* Place .data, .bss, and .noinit  and STACK */

place in RAM { readwrite, block STACK };



使用特权

评论回复

相关帖子

沙发
零三翟邢止胃| | 2019-3-30 08:17 | 只看该作者
真是个好帖子!我要顶住啊! 感谢分享啊! 真是不错啊!

使用特权

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

本版积分规则

24

主题

215

帖子

1

粉丝