Part5-核心初始化-Part5.1异常向量表

异常和平时讨论的异常一样,都是去执行异常中断程序,然后再回去执行原来的程序中断处。

 

这段代码放在start.s刚开始地方,和DSP中讲的一样,放在程序最前面的地方异常向量表

 

 

手把手教你写代码

1、start.s

2、gboot.lds

3、makefile

 

 

创建start.S文件(touch start.S)

更改权限,在win中编写

.text
.global _start
_start:
    b reset
    ldr pc,_undifined_instruction
_undifined_instruction: .word undifined_instruction//新开一个存储单元,将地址存进去,让上面的ldr指令变成内存操作指令,而不是伪指令
    ldr pc,_softwart_interrupt
    ldr pc,_prefetch_abort
    ldr pc,_data_abort
    ldr pc,_not_used
    ldr pc,_irq
    ldr pc,_fiq
//reset命令不用加


_softwart_interrupt: .word softwart_interrupt
_prefetch_abort: .word prefetch_abort
_data_abort: .word data_abort
_not_used: .word not_used
_irq: .word irq
_fiq: .word fiq




//下面是各个中断处理,现在什么都不做,用Nop代替
undifined_instruction://未定义中断
    nop
softwart_interrupt://软中断
    nop
prefetch_abort://预处理中断
    nop
data_abort://数据中断
    nop
not_used://不用
    nop
irq:
    nop
fiq:
    nop
reset:
    nop

 

 

 

创建gboot.lds文件(touch gboot.lds)

OUTPUT_ARCH(arm)//输出格式是arm格式
ENTRY(_start)//输出程序入口是在start标号处

SECTIONS{
    .=0x50008000;//这是起始地址,这里用的是6410的起始地址

    .=ALIGN(4);
    .text://这里先放的是start.o代码段,其他的放在后面
    {
    start.o(.text)
    *.text
    }
    
    .=ALIGN(4);
    .data:
    {
    *(.data)
    }
    
    .=ALIGN(4);
    bss_start=.;//这里有分号
    .bss:
    {
    *(.bss)
    }
    bss_end=.;

}

 

 

 

创建makefile规则

all:start.o
    arm-linux-ld -Tgboot.lds -o gboot.elf $^
    arm-linux-objcopy -O binary gboot.elf gboot.bin
%.o:%.S
    arm-linux-gcc -g -c $^
%.o:%.c
    arm-linux-gcc -g -c $^

.PHONY: clean
clean:
  rm *.o *.elf *.bin

 

运行make能得到.bin文件

 

 

 

对于210开发板

需要载入头文件

用辅助软件格式化,下载到nand flash中

再重新连接一次,make,./mkv210_image led.bin 210.bin

/home/dnw 210.bin 0x20000000

        这是加了头文件的情况

posted @ 2017-06-07 16:15  郁兴力  阅读(230)  评论(0)    收藏  举报