天嵌 ARM开发社区

 找回密码
 注册
查看: 4234|回复: 5

学习uboot遇到的几个问题

[复制链接]
yeknight 发表于 2013-4-1 21:46:29 | 显示全部楼层 |阅读模式
1、uboot第一阶段代码为什么一定要用汇编实现,可以用C实现吗?

2、第一阶段结束后的跳转语句ldr        pc, _start_armboot,执行此语句时代码应该在flash和ram中各有一份,那么这个跳转为什么不会跳到flash中的_start_armboot处呢?
亚瑟王 发表于 2013-4-2 09:19:46 | 显示全部楼层
1、不可以用C,因为前面一段跳转的代码没法用C来实现。
2、因为在编译连接时已经决定了那个函数的位置了,所以跳转的时候就会掉转到那个内存位置执行。
回复

使用道具 举报

duanius 发表于 2013-4-2 09:56:36 | 显示全部楼层
我觉得最主要的还是建立堆栈,不然c没法跑
回复

使用道具 举报

Privia 发表于 2013-4-2 18:35:39 | 显示全部楼层
1.你可以用C语言来写啊,设置好堆栈就OK了,注意地址无关,不过第一阶段功能比较简单,没有必要用C,直接用汇编还比C方便些,第二阶段程序开始复杂了,用C比较好。
2.和FLASH相比,RAM更适合用来执行代码。FLASH一般用来存放代码,而RAM用来执行代码。代码一般都是从FLASH上拷贝到RAM中再运行。CPU寻址是寻的RAM地址,和FLASH不直接打交道的。
回复

使用道具 举报

夏雨 发表于 2013-4-2 19:10:28 | 显示全部楼层
最开始只能用汇编,因为最初时候c语言无法寻址,不能访问寄存器。汇编可以直接对硬件寄存器操作。
回复

使用道具 举报

 楼主| yeknight 发表于 2013-4-2 20:28:14 | 显示全部楼层
c语言无法寻址,那是不是开始volatile unsigned int *pdw = (volatile unsigned int *)0;像这样的语句不能执行呢?但是我看TQ2440uboot中bBootFrmNORFlash这个函数中就有这个语句,又是怎么回事呢?还是有点不太理解
回复

使用道具 举报

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

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2025-6-16 12:57 , Processed in 2.030503 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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