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

对于一个标准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 };



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值