启动文件 - 2022.1 Chinese

Vitis 统一软件平台文档 嵌入式软件开发 (UG1400)

Document ID
UG1400
Release Date
2022-04-26
Version
2022.1 简体中文

编译器在生成可执行文件时,会在最终链接命令中包含预编译的启动文件和结束文件。启动文件用于在执行应用代码之前,设置语言和平台环境。启动文件通常用于执行以下操作:

  • 按需设置任意复位矢量、中断矢量和异常矢量。
  • 设置栈指针、小型数据锚点和其它寄存器。请参阅下表以获取详细信息。
  • 将 BSS 存储器区域清零。
  • 调用语言初始化函数,例如,C++ 语言构造函数。
  • 对硬件子系统进行初始化。例如,要剖析程序,请初始化剖析定时器。
  • 为 main 过程设置实参,并调用此过程。

结束文件用于包含程序结束后必须执行的代码。结束文件通常用于执行以下操作:

  • 调用语言清理函数,例如,C++ 语言析构函数。
  • 对硬件子系统进行反初始化。例如,要剖析程序,请清理剖析子系统。

下表列出了 C 语言运行时文件中的寄存器名称、值和描述。

表 1. C 语言运行时文件中的寄存器初始化
寄存器 描述
r1 _stack-16 栈指针寄存器经初始化后,指向栈区域底部,且初始负偏移为 16 个字节。这 16 个字节可用于传入实参。
r2 _SDA2_BASE _SDA2_BASE_ 是只读小型数据锚点地址。
r13 _SDA_BASE_ _SDA_BASE is 是读写小型数据锚点地址。
其它寄存器 未定义 其它寄存器不含已定义的值。

以下小节旨在描述用于各种应用模式的初始化文件。此信息面向想要更改或者了解其应用的启动代码的高级用户。

对于 MicroBlaze,C 语言运行时初始化分为 2 个不同阶段。第一个阶段主要负责设置矢量,随后它将调用第二个阶段初始化。它还基于不同应用模式提供出口存根。