246°

arm 汇编与c语言

1.text
2.global _start
3_start:
4        LDR        R0,=0X56000010 //表示把一个地址写到某寄存器中
5
6
7        MOV        R1,#0X00000400 //表示把一个地址写到某寄存器中
8        STR        R1,[R0] //把R1的值,存入到R0对应地址空间上(*R0 = R1)
9        LDR        R0,=0X56000014 //表示把一个地址写到某寄存器中
10
11        MOV        R1,#0X00000000 //表示把一个地址写到某寄存器中
12
13        STR        R1,[R0]
14MAIN_LOOP:
15          B        MAIN_LOOP //死循环

 

上述arm汇编相当于下面的c语言

#define GPBCON        (*(volatile unsigned long *)0X56000010)
#define GPBDAT        (*(volatile unsigned long *)0x56000014)

int main()
{
    GPBCON     =0x00000400;
    GPBDAT    =0x00000000;
    return 0;
}

===================================================

.text
.global _start
_start:
                ldr        r0,=0x56000010 //WATCHDOG 寄存器地址
                mov        r1,#0x0
                str        r1,[r0]    //写入0,禁止WATCHDOG,否则CPU会不断重启
                ldr        sp,=1024*4//设置堆栈,注意:不能大于4kb,因为现在可用的内存只有4kb,nand flash 中的代码在复位后会移到内部
                bl        main    //调用c程序中的main函数
halt_loop:
                b        halt_loop    


 

本文由【天王盖地虎626】发布于开源中国,原文链接:https://my.oschina.net/u/920274/blog/2907131

全部评论: 0

    我有话说: