yeknight 发表于 2013-4-1 21:46:29

学习uboot遇到的几个问题

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这个函数中就有这个语句,又是怎么回事呢?还是有点不太理解
页: [1]
查看完整版本: 学习uboot遇到的几个问题