Chinaunix首页 | 论坛 | 博客
  • 博客访问: 493671
  • 博文数量: 223
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2145
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-01 10:23
个人简介

该坚持的时候坚持,该妥协的时候妥协,该放弃的时候放弃

文章分类

全部博文(223)

文章存档

2017年(56)

2016年(118)

2015年(3)

2014年(46)

我的朋友

分类: 嵌入式

2016-10-01 11:38:15

1、采用什么方式跃?
2、检验是否跃成功?

跳转方式
①相对跳转 b bl
②绝对跳转  ldr pc, =xxxxxxx

main.c
  1. #define GPBCON (volatile unsigned long*) 0x56000010          定义指针地址为0x56000010
  2. #define GPBDAT (volatile unsigned long*) 0x56000014          定义指针地址为0x56000014

  3. int gboot_main()
  4. {
  5.     *(GPBCON) = 0x15400;                                     
  6.     *(GPBDAT) = 0x6bf;

  7.     return 0;
  8. }
指针的地址一般都用unsigned long*类型,volatile是不用编译器优化

start.S中跳转到main

  1. ldr pc, =gboot_main                                     @跳转到gboot_main
修改Makefile

  1. all : start.o main.o                                    #加入main.o
  2.     arm-linux-ld -Tgboot.lds -o gboot.elf $^
  3.     arm-linux-objcopy -O binary gboot.elf gboot.bin

问题记录:
210的Led无法点亮。
210的将bootloader复制到内存中时,因为210的bootloader使用之前需要加16字节的头。
当把stepping stone中的文件复制到内存中时,所有的内容其实多拷贝了16字节。所有地址都多移动了16字节,指针指向的位置也全偏移了。
所以在copy_sdram时要考虑不复制16字节的头。


阅读(843) | 评论(0) | 转发(0) |
0

上一篇:BSS初始化

下一篇:C与汇编混合编程

给主人留下些什么吧!~~