硬汉嵌入式论坛

 找回密码
 立即注册
查看: 447|回复: 1
收起左侧

[其它] 关于ARM启动流程的疑问

[复制链接]

12

主题

68

回帖

104

积分

初级会员

积分
104
发表于 2023-11-5 21:02:01 | 显示全部楼层 |阅读模式
硬汉哥,最近在看关于arm启动流程到相关内容,一般都是说从启动地址的0地址处去的MSP的值,从4地址取得PC的值,然后从PC的初始值开始运行。

但是如果芯片本身没有flash,使用的外部启动的流程,程序运行先要把程序拷贝到ram中然后运行。

那么这个时候MSP的值和PC的值是从哪里取?


问题:
目前使用的是瑞萨的芯片,flash的起始地址是0x60000000, 芯片有两个RAM(BTCM(0x00100000-0x00110000)和ATCM(0-0x80000))

flash中0x60000000-0x6001FFFF地址是用的放的是startup的,startup内容是配置cache mpu、stack等,运行在BTCM中

中断向量表就放在0x60020000起始位置,用户程序是放在0x60020000值后的


程序一进来就是这个system_init(0x00102000),去看了此时的PC寄存器的值,的确是这个函数的地址,但是这个也是不是我flash中断向量地址偏移04的内容

下载 (8).png


这里是ICF的文件设置

下载 (9).png

这是这个芯片到启动流程
下载 (10).png

是不是他这个取PC和MSP的值的过程发生在芯片的Bootrom中?然后跳转到0x00102000这地方执行,而我代码里的关于__Vectors 部分实际上是没有用的是吗?



下载 (11).png




我看在system_init 里有吧中断向量表地址写成0了,但是这一段到低有啥用呢

下载 (12).png



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2023-11-6 10:08:18 | 显示全部楼层
这个玩法跟iMX RT系列差不多,一个玩法。

他这个Bootrom应该是还可以配置的,配置从各种地方启动,你这种的应该也是配置的一种启动模式,进入到你自己的程序了就可以随意设置了。启动过程就是bootrom里面已经固定了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 21:42 , Processed in 0.169250 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表