idea6410裸调led蜂鸣器的方法

平台:idea6410

编译器:arm-linux-gcc-4.3.2


当我们没有jtag等工具是也还是可以裸机调试的,不过的借助uboot;

下面是源码及步骤:

1、start.S

.text
.global _start


_start:
    ldr r0,=0x7e004000     //关看门狗
    mov r1,#0x0
    str r1,[r0]


    ldr sp,=0xc0008000     //设置运行时栈
    bl main               //跳转主函数

stop:
    b stop

2、led.c

    > File Name: led.c
    > Author: hcm
    > Mail: [email protected] 
    > Created Time: 2013年12月21日 星期六 00时43分26秒


#include <stdio.h>
#include <string.h>
#include <stdlib.h>


#define GPFCON (*(volatile unsigned long *)0x7F0080A0)
#define GPFDAT (*(volatile unsigned long *)0x7F0080A4)
#define GPMCON (*(volatile unsigned long *)0x7F008820)
#define GPMDAT (*(volatile unsigned long *)0x7F008824)


void delay(int n);


int main(void)
{   
    GPFCON |= (1<<30);                
    GPFDAT |= (1<<15);                   //蜂鸣器一直响
    GPMCON = 0x0;
    GPMCON |= (1<<0)|(1<<4)|(1<<8)|(1<<12);
    while(1)                          //四个led一闪一闪
    {
        GPMDAT |= 0xf;
        delay(200000);
        GPMDAT &= ~0xf;
        delay(200000);
    
    }


    return 0;
}


void delay(int n)             //延时
{
    int i;
    for(i=0; i<n; i++)
        ;
}


3、Makefile

led.bin:start.S led.c

arm-linux-gcc -c -nostdlib start.S -o start.o

arm-linux-gcc -c -nostdlib led.c -o led.o

arm-linux-ld -Ttext c0008000 start.o led.o -o led.elf

arm-linux-objcopy -O binary -S led.elf led.bin

clean:

rm *.o *.elf *.bin 


4、make编译

5、将led.bin烧写到已经烧写好uboot的板子上,命令:

dnw c0008000

go c0008000

这样你就可以看到效果了(*^__^*) 嘻嘻……

注意:

在编译的时候如果不加上-nostdlib选项那么将出现:

ARM.exidx+0x0): undefined reference to `__aeabi_unwind_cpp_pr0'
make: *** [led_on_c.bin] Error 1

的错误!


提示的错误信息是EABI不支持导致的,建议编译裸奔程序时使用3.4.5的交叉编译器,EABI使用的很多代码(特别是汇编)可能会出错,目前网络上还没有找到专门介绍EABI编译器的编程的文档。修改etc/profile文件的配置,然后source /etc/profile即可

 arm-linux-gcc加上-nostdlib选项也OK

因为-nostdlib不连接系统标准启动文件和标准库文件,只把指定的文件传递给连接器。这个选项常用于编译内核、bootloader等程序,它们不需要启动文件、标准库文件。



你可能感兴趣的:(idea6410裸调led蜂鸣器的方法)