DSP

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

2019-07-13 16:20发布

对于一个标准C程序所用到的全局和静态变量都是定位在固定的内存空间,在程序启动时必须赋予确定的数值,对于程序中没有赋初值的变量,编译器默认赋值为0。对于__no_init限定的变量则不会被初始化。 对于一个标准的C程序中用到的变量类别如下 Categories of declared data 所示,


L(1) 初始化过程 需要初始化为0sectionILINK中放置在RAM中。需要被初始化的section需要放置在initialize指令列表中,不包括初始化为0section 通常在链接中,需要被初始化的块分为两个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 };