裸机C:为什么有些IDE启动文件要做crt0.s会处理的事情?

裸机C:为什么有些IDE启动文件要做crt0.s会处理的事情?,c,gcc,startup,crt,bare-metal,C,Gcc,Startup,Crt,Bare Metal,我正在为ARM Cortex-M3微控制器STM32F4编写裸机C软件 在第169行到第192行,您可以看到.data部分填充了初始值。 在第199行,它分支到_开始符号,该符号在my的crt0.s文件中定义 第211到223行提供了自己的代码,用于清除.bss部分。在这里,重新定义了启动,但很弱。因此,只有在其他地方未定义_开始符号时,此代码才有效。 我的问题是: 为什么启动文件提供初始化.data和清除.bss的代码?我以为那是crt0.s的工作?! 正如我提到的,clearing.bss的

我正在为ARM Cortex-M3微控制器STM32F4编写裸机C软件

在第169行到第192行,您可以看到.data部分填充了初始值。 在第199行,它分支到_开始符号,该符号在my的crt0.s文件中定义 第211到223行提供了自己的代码,用于清除.bss部分。在这里,重新定义了启动,但很弱。因此,只有在其他地方未定义_开始符号时,此代码才有效。 我的问题是:

为什么启动文件提供初始化.data和清除.bss的代码?我以为那是crt0.s的工作?! 正如我提到的,clearing.bss的代码似乎只有在crt0.s丢失的情况下才是活动的。 听起来crt0.s有时可能会丢失。为什么crt0.s会丢失?为什么你不能依赖它的可用性呢?在什么情况下它会丢失? 与此相反,为什么.data节的初始化总是活动的,与crt0.s是否可用无关? 使现代化
我刚刚读过,设置异常向量。所以再说一遍:为什么我在第41行到第151行这样做?

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