学习uboot遇到的几个问题
1、uboot第一阶段代码为什么一定要用汇编实现,可以用C实现吗?2、第一阶段结束后的跳转语句ldr pc, _start_armboot,执行此语句时代码应该在flash和ram中各有一份,那么这个跳转为什么不会跳到flash中的_start_armboot处呢?
1、不可以用C,因为前面一段跳转的代码没法用C来实现。
2、因为在编译连接时已经决定了那个函数的位置了,所以跳转的时候就会掉转到那个内存位置执行。 我觉得最主要的还是建立堆栈,不然c没法跑 1.你可以用C语言来写啊,设置好堆栈就OK了,注意地址无关,不过第一阶段功能比较简单,没有必要用C,直接用汇编还比C方便些,第二阶段程序开始复杂了,用C比较好。
2.和FLASH相比,RAM更适合用来执行代码。FLASH一般用来存放代码,而RAM用来执行代码。代码一般都是从FLASH上拷贝到RAM中再运行。CPU寻址是寻的RAM地址,和FLASH不直接打交道的。 最开始只能用汇编,因为最初时候c语言无法寻址,不能访问寄存器。汇编可以直接对硬件寄存器操作。 c语言无法寻址,那是不是开始volatile unsigned int *pdw = (volatile unsigned int *)0;像这样的语句不能执行呢?但是我看TQ2440uboot中bBootFrmNORFlash这个函数中就有这个语句,又是怎么回事呢?还是有点不太理解
页:
[1]