C++ 嵌入式开发:启动流程、静态初始化与硬件驱动
1. 链接器与启动代码的关联
在跳转到 main()
函数之前,会进行三项初始化操作,包括清零 bss
段、初始化 bss
段中的静态变量以及调用 ctors
段中的所有静态构造函数。像 _bss_begin
、 _bss_end
以及 _ctors_begin
、 _ctors_end
这类方便使用的符号,是通过链接器定义文件(也称为链接脚本)创建的。链接器定义文件会明确所有程序组件的存储地址。
1.1 链接器定义文件示例
ENTRY(start)
MEMORY
{
ROM(rx) : ORIGIN = 0x08000000, LENGTH = 128K
RAM(rwx) : ORIGIN = 0x20000000, LENGTH = 8K
}
SECTIONS
{
/* Program code, read-only data and static ctors */
.text :
{
. = ALIGN(4);
KEEP(*(.isr_vector))
*( .text)
*( .text.*)
*( .rodata)
*( .rodata*)
_ctors_begi