你有没有想过这么一个事情,定义一个全局变量的时候,直接在定义的时候赋值,这个变量是在RAM里面的,可是这个值是编译在代码里面的,也就是在flash里面的,那什么时候这个变量等于这个值的呢.
MDK我不清楚,但是IAR中定义了一个段叫做readwrite,也就是全局变量段,链接文件中会指明init by copy属性,也就是Reset之后,SystemMain之前会有一个编译器函数(data_init3)将readwrite的段里面存储的数据拷贝到对应的ram空间,形成了全局变量.
ITCM的函数也是这个道理,IAR里面叫做ramcode段,也会指明init by copy属性,把flash的函数代码拷贝到对应的ram地址,程序里面对这个函数的调用实际上是对ram地址的调用. |