完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#ifndef CONFIG_SKIP_LOWLEVEL_INIT
cpu_init_crit: /* * flush v4 I/D caches */ mov r0, #0 mcr p15, 0, r0, c7, c7, 0 /* flush v3/v4 cache */ mcr p15, 0, r0, c8, c7, 0 /* flush v4 TLB */ /* * disable MMU stuff and caches */ mrc p15, 0, r0, c1, c0, 0 bic r0, r0, #0x00002300 @ clear bits 13, 9:8 (--V- --RS) bic r0, r0, #0x00000087 @ clear bits 7, 2:0 (B--- -CAM) orr r0, r0, #0x00000002 @ set bit 2 (A) Align orr r0, r0, #0x00001000 @ set bit 12 (I) I-Cache mcr p15, 0, r0, c1, c0, 0 /* * before relocating, we have to setup RAM timing * because memory timing is board-dependend, you will * find a lowlevel_init.S in your board directory. */ mov ip, lr bl lowlevel_init mov lr, ip mov pc, lr #endif /* CONFIG_SKIP_LOWLEVEL_INIT */ 1.倒数第4行,子函数cpu_init_crit是在调用lowlevel_init之前先将返回上一层函数的地址(lr当中的值)保存到ip当中 然后再去执行bl lowlevel_init,疑问1:请问一下lr的值一定是要保存在ip寄存器中吗?可不可以是其他的寄存器? 我在lowlevel_init中程序结尾看到mov pc, lr是从子函数lowlevel_init返回到cpu_init_crit,对吗? 2.执行完子函数lowlevel_init后,mov lr, ip 将函数返回地址放入lr, mov pc, lr同理的是不是返回调用cpu_init_crit的上一层呢? mov lr, ip mov pc, lr 这两句代码能不能合并为mov pc, ip呢?对汇编指令的使用特性不太了解,问的问题很小白,还请有经验的前辈解答一下,谢谢。 |
|
相关推荐
2个回答
|
|
疑问1:请问一下lr的值一定是要保存在ip寄存器中吗?可不可以是其他的寄存器?
可以是其它寄存器 我在lowlevel_init中程序结尾看到mov pc, lr是从子函数lowlevel_init返回到cpu_init_crit,对吗? 是的 我觉这俩可以合并 mov lr, ip mov pc, lr |
|
|
|
好的,明白了。结贴
|
|
|
|
只有小组成员才能发言,加入小组>>
197个成员聚集在这个小组
加入小组为什么点亮LED的例子放在NORFlash上跑会出现奇怪的现象?
2158 浏览 6 评论
1965 浏览 5 评论
韦东山老师推出的《玩转ARM裸机实战》课程将帮你以上问题一扫而光!
4522 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 17:05 , Processed in 0.867817 second(s), Total 80, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号