上一节我们概述了连接器脚本的作用,并且结合data段,bss段和text段的各一个例子解释了和程序中的对应关系,那么这一节,我们结合具体的stm32l431来看看系统的boot阶段。在讲解之前这里要讲一个上一届遗留的问题,上一届我们提到了一个图是最终可执行程序的布局,这个里面有bss段,实际上的可执行文件里面的bss段是不占用磁盘空间的,大家想一下为什么,因为bss段里面本来就是脏数据,没有有效数据,所以如果留出来空间就是对磁盘空间的浪费,可执行文件只需要记录bss段的区间大小就行。不过当程序到内存中之后,却是需要根据这个相对地址留出来一段内存用作bss段的,因为bss段里面定义的变量是在程序执行的过程中实实在在需要使用的变量。
并且同时我们知道连接器脚本决定了程序布局,并且连接器脚本里面可以定义程序中使用的变量,这一点很重要,程序执行初始化的时候就是通过这些变量辅助的找到段,或者也有可能其他的辅助的变量。这个和我们通常变量的定义在源代码中会感觉到有一点诧异。大家记住这一点
上一节我们概述了连接器脚本的作用,并且结合data段,bss段和text段的各一个例子解释了和程序中的对应关系,那么这一节,我们结合具体的stm32l431来看看系统的boot阶段。在讲解之前这里要讲一个上一届遗留的问题,上一届我们提到了一个图是最终可执行程序的布局,这个里面有bss段,实际上的可执行文件里面的bss段是不