C 语言运行前的设置
C 语言环境就是保证 C 语言能够正常运行,C 语言中涉及到入栈与出栈,所以把栈指针设置好之后,C 语言运行环境就设置好了。
SP 寄存器设置
对于 Cortex-A 芯片来讲,大部分芯片在上电以后 C 语言环境还没准备好,所以第一行程序肯定是汇编的,至于要写多少汇编程序,那就看你能在哪一步把 C 语言环境准备好。
所谓的 C 语言环境就是保证 C 语言能够正常运行。C 语言中的函数调用涉及到出栈入栈,出栈入栈就要对堆栈进行操作,所谓的堆栈其实就是一段内存,这段内存 SP 指针访问,SP 指针指向栈顶。芯片一上电 SP 指针还没有初始化,所以 C 语言没法运行,对于有些芯片还需要初始化 DDR,因为芯片本身没有 RAM ,用户代码需要放到 DDR 中去运行。
qemu
对于 qemu 来说,DDR 模式的内存地址默认是能够能够访问的所以不需要关心 DDR 初始化的代码
例如如果在第一条语句就设置 SP 指针,然后就跳到 main 中运行的代码如下
_start:
ldr sp
本文详细介绍了在ARMv7-A架构下,C语言运行前的环境设置,尤其是SP寄存器的初始化。内容涵盖汇编语言启动、qemu环境下DDR内存的处理,以及初始化代码示例,旨在确保C语言程序能够正常调用函数并管理堆栈。总结了C语言运行环境主要是设置不同处理器模式下的SP指针,但实际应用还需考虑DDR、MMU和cache等初始化工作。
订阅专栏 解锁全文
2077

被折叠的 条评论
为什么被折叠?



