高级会员

- 积分
- 981
- 金钱
- 981
- 注册时间
- 2016-3-8
- 在线时间
- 268 小时
|
发表于 2020-7-28 21:53:10
|
显示全部楼层
1.如楼上,你的假设对的。
2.bss段其实就是为了省code空间而设的。编译过程中把未初始化的或初始化为0的变量定义在这。 然后认为这里边都是0。。。但是这里是不是0呢?要知道芯片上电后RAM里的数据是不确定的。所以要写bss清零保证这里的变量初始是0。一般成熟的IDE会自己帮你分配好bss然后嵌入清零代码。你不需要去写清bss,因为编译器伴你写了。
3.32怎么初始化data?就一个个赋值咯。flash的code中用代码把一个个值写到对应地址。你可以认为就是一开始写了一堆 a=1;b=2;c=3;abc是变量,123是初始值。当然这些赋值代码成熟IDE会帮你写。你只管int a=xxx;
4.为什么bss不像data一样? 如上解释了data的初始化。如果bss也如data一样。你把bss看做一个大数组,比如bss[100000],按data的方式要一行一行的bss[0]=0;bss[1]=0;....
那肯定是写一段从bss_start-bss_end的请您函数要省空间吧。 |
|