全局变量的数组初始化不是由你的程序执行的,这就意味着初始数据需要有一个存放的地方,编译器选择了RO-Data区,事情就这么简单。
作为局部变量,如果不加上static,编译器选择增加一段程序,使用立即数的方式对数 ...
香水城 发表于 2012-5-17 11:50 
大错特错了。
RO是常量,在flash里面,不占用ram。如const uint8_t i55[5]={0,1,2,3,4};
RW是初始化变量,即占用flash也占用ram。如uint8_t i55[5]={0,1,2,3,4};
数组的初值在flash里面,上电后搬运到ram里面。
不需要初始化的变量时ZI,不占用flash只占用ram。如uint8_t i55[5];
ZI也就是bss段,上电后初始化程序对其清零。
如果是IAR,可以用__no_init关键字阻止初始化程序对相应的ZI清零,MDK也有类似关键字,记不住了,自己查help吧。
|