【ARMv7-A】——C 语言运行前的设置

本文详细介绍了在ARMv7-A架构下,C语言运行前的环境设置,尤其是SP寄存器的初始化。内容涵盖汇编语言启动、qemu环境下DDR内存的处理,以及初始化代码示例,旨在确保C语言程序能够正常调用函数并管理堆栈。总结了C语言运行环境主要是设置不同处理器模式下的SP指针,但实际应用还需考虑DDR、MMU和cache等初始化工作。
摘要由CSDN通过智能技术生成

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值