摘要:
1.MMU功能解析 先来看一个例子: 1testMMU.c的代码: 2testMMU.c的代码: 两个代码同时运行的效果如下图: 可以看到两个同时运行的程序使用的是同一个地址0x80496a4,是不是程序运行出错了,怎么一个地址单元,同一时间可以被两个程序使用?其实呢这就是今天的重点,虚拟地址,0x 阅读全文
摘要:
37.C与汇编混合编程 新建light.c: 修改start.S: 修改Makefile:加light.o 最后make成功,烧写成功。 同样,我们也可以在C函数里调用我们的汇编里面的函数: 修改start.S:把light_led申明为global: 在light.c中被调用: Make编译烧写到 阅读全文
摘要:
36.从汇编到C(bl1到bl2) 从汇编跳转到C必须使用绝对跳转: 工程代码: 在Makefile中加入main.o: Start.S: Make编译: Main.c代码: #define GPKCON (volatile unsigned long*)0x7F008820 //volatile指 阅读全文
摘要:
35.BSS段的知识 在C语言中,初始化的全局变量是存在数据段的,初始化的局部变量是存在栈中的,用malloc分配的空间是存在堆里的,未初始化的全局变量是存在bss段。 Hello.c: #include <stdio.h> int bssdata; int main(){ bssdata = 20 阅读全文
摘要:
33.代码搬移 这节里的代码搬移是针对SRAM的: 起始地址: 2440的起始地址是0 6410的起始地址是0x0c000000. 210的起始地址是0x 6410: 210: 链接起始地址: 2440:0x30008000 6410:0x50008000 210:0x20008000 终点:就是l 阅读全文
摘要:
34.栈的初始化 前面知道,uboot的第一阶段是用汇编代码来对硬件等进行初始化的。第二阶段是用C语言的。但是此时没有C语言的运行环境。而C语言的运行需要堆栈等资源。所以这一节是第二阶段的C语言环境运行的栈的初始化。 1.栈:是一种具有先进先出性质的数据组织方式,也就是说后存进去的先取出,后存进去的 阅读全文
摘要:
32.210内存的知识 210可寻址的空间是4GB大小,内存的起始地址是20000000,前面知道2440使用的内存是SDRAM,6410使用的内存是DDR,这里210使用的是DDR2.在210的地址空间中零地址处跟6410一样也是映射镜像区,例如当选择从NandFlash启动的使用,就会把IROM 阅读全文
摘要:
31.6410内存的知识 6410的地址空间分布: S3C6410处理器拥32位地址总线,其寻址空间为。其中高为保留外设区,低2GB区域又可划分为两部分:主存储区和外设区。 外设主要是寄存器所在的地址。 主存储区分为:Boot镜像区、内部存储区、静态存储区、保留区、动态存储区: Boot镜像区:这个 阅读全文
摘要:
30.2440内存的知识 首先看2440的地址线:mini2440原理图.pdf 2440的芯片提供了27根地址线=128M。 S3c2440芯片对外提供的引脚上,只给出了27根地址线addr[0:26].这27根引脚地址线,只能访问128M的外设空间。 为了扩大外设的访问范围,S3c2440芯片又 阅读全文
摘要:
29.内存的基础知识 内存的分类: 内存由于具备访问速度快,访问方式简单等优点,成为了PC或者是嵌入式硬件平台上不可或缺的元件。在开始学习如何使用内存之前,非常有必要先了解一下内存的分类: DRAM:它的基本原件是小电容,电容可以在两个极板上保留电荷,电容就是通过电荷来保存信息的,为了保持数据不丢失 阅读全文