Bare-Metal C:为什么某些IDE启动文件做事crt0.s无论如何都要处理?

时间:2015-01-10 17:37:17

标签: c gcc startup crt bare-metal

我正在使用Em::Blocks IDE为ARM Cortex-M3微控制器STM32F4编写裸机C软件。

Here's the content of the startup_stm32f429x.S file which is included with the IDE.

  • 在第169到192行,您会看到.data部分已填充初始值。
  • 在第199行,它分支到_start符号,该符号在我的GCC toolchain
  • 的crt0.s文件中定义
  • 第211至223行提供了自己的代码,用于清除.bss部分。 (这里,_start再次被定义,但很弱。因此,只有_start符号未在其他任何地方定义时,此代码才有效。)

我的问题是:

  • 为什么启动文件提供初始化.data和清除.bss的代码?我以为这是crt0.s的工作?!
  • 正如我所提到的,清除.bss的代码似乎只有在缺少crt0.s的情况下才会激活。
    • 听起来有时crt0.s可能会丢失。为什么缺少crt0.s?为什么你不能依赖它?在哪种情况下会丢失?
    • 与此相反,.data部分的初始化总是处于活动状态,与crt0.s是否可用无关?

更新

我刚才读到,设置异常向量is another thing crt0.s is responsible for。再说一遍:为什么我的startup file在第41行到第151行完成了?

1 个答案:

答案 0 :(得分:0)

完全是因为你不想在裸机微控制器上使用gcc的crt0,如果你不需要它的功能。如果你不使用crt0,那么你必须自己做。