摘要:
其实ldr指令分两种:1)ldr r0,#100 这是ldr指令2) ldr r0,=10000 这是ldr伪指令 编译器在编译伪指令的时候会把伪指令编译成多条指令机器码 (伪操作是不会被编译成指令机器码的)这源于一个问题:ldr r0,#10000 在编译这条指令的时候,是会出错的,下面解释下为什么?在指令编码的时候,32位中有12位是用来表示立即数的,其中高4位表示循环右移的位数,后8位表示右移前的数,一个立即数是这样表示的:将低8位补0扩展为32位,然后循环右移X位,(X为高4位表示的无符号整数*2)例如:低12位为0x512,则表示的立即数是0x04800000其实这样表示的立即数的范 阅读全文
随笔档案-2012年05月
6410 u-boot stage 1
2012-05-14 20:59 by 至上, 1029 阅读, 收藏, 编辑
摘要:
6410UBOOT学习:上电开始,硬件自动取Bootloader前4K的内容放到Steppingstone中,Steppingstone其实是个SRAM,而不是SDRAM,大小8K。并且物理地址的零地址也映射在这儿,用于复位时用。这个sram也就是esram,原来物理地址是0x0c00_0000-0x0fff_ffff,用作nandflash启动时,会被重映射为零地址,就是2个物理地址映射到同一个地方。在Steppingstone中开始执行拷贝过来的代码,包括start.S(这只是bootloader的一部分),做了上图第一阶段的工作,其中拷贝的代码只是整个bootloader,拷贝到SDRA 阅读全文
linux设备驱动初学(二)
2012-05-04 10:43 by 至上, 352 阅读, 收藏, 编辑
摘要:
#include <linux/init.h>#include <linux/kernel.h>#include <linux/module.h>#include <linux/types.h>#include <linux/fs.h>#include <linux/mm.h>#include <linux/errno.h>#include <asm/segment.h>#include <linux/module.h>#include <linux/sched.h>#inc 阅读全文