【发布时间】:2021-08-18 01:00:30
【问题描述】:
我了解C启动代码是用于初始化C运行环境,初始化静态变量,设置堆栈指针等,最后分支到main()。
他们说这只能用汇编语言编写,因为它是特定于平台的。但是,这不能还是用C写,针对特定平台编译吗?
函数调用当然是不可能的,因为我们“很可能”在那个阶段没有设置堆栈指针。我仍然看不到其他主要原因。提前致谢。
【问题讨论】:
-
严格符合 C 代码不能初始化处理器寄存器(例如帧指针),因为 C 标准没有提供任何引用它们的方法。
-
@EricPostpischil 除了堆栈指针问题,还有什么其他严格的原因不能使用 C 代码行来编写 C 启动例程?
-
除了堆栈之外,您可能还必须使用 C 根本不支持的特殊指令进行初始化(例如切换模式、设置中断、内存模型等)
-
我认为 C 编译器可以很好地维护每个平台的启动程序集 sn-ps,然后按需放置它们,但 sn-ps 只能在一个地方使用,因此库(标准库)是更适合他们的地方(?)。
标签: c assembly embedded startup