zoukankan      html  css  js  c++  java
  • 【转】Linux下ARM裸板程序编写

     有些学习过Bootloader和内核的朋友肯定会知道,在调用C语言函数之前肯定会有一段汇编代码在前面铺路,进行一些必要的初始化工作;而那些只学过单片机而没有学过ARM的朋友肯定会觉得很奇怪,在单片机中写C代码,前面完成可以不用任何汇编代码。这是为什么呢?

      这主要是因为我们的开发环境(这里主要是指编译环境)的不同,在开发单片机程序的时候,开发环境(如KEIL)会在编译C代码的时候,给我添加启动代码(startup-51)或者在编译时已经由编译器在后台为我们初始化好了。而在开发ARM程序时,ARM处 理器支持多种模式,多种功能,而在不同的领域不同的项目里面,我们可以有选择的、适当的选择这些功能,这时,编译器就不知道我们需要什么功能,需要什么模 式,编译器也就无法给我们提供默认的“初始化”代码,所以,编译器干脆就“不管”这些了,把这些工作交由我们开发者来处理。

     这里最简单的启动代码。

    复制代码
    @****************************************
    @ File: startup.s
    @ function: start up
    @ author: pang123hui
    @****************************************
    .text
    .global _start
    _start:
    LDR R0,=0x7E004000 @ WATCHDOG寄存器地址
    MOV R1,#0x0
    STR R1,[R0] @ 写入0,禁止WATCHDOG,否则CPU会不断重启
    LDR SP,=0x0c001000 @ 设置堆栈,注意:这时我们是将程序直接烧录到SDRAM中,所以堆栈要设置在SDRAM中
    @ 如果将程序烧在NAND FLASH中,需将堆栈改为1024*4,因为NAND FLASH中的代码
    @ 在复位后会移到内部RAM中,此RAM只有4K
    BL main @ 调用C程序中的main函数
    halt_loop:
    B halt_loop
    复制代码

    这里要注意的一点是S3C6410中RAM的地址,见datasheet,如图。

    最后是Makefile文件。

    复制代码
    CC=arm-linux-gcc
    CFLAGS=-g -c -o
    led_on.bin:startup.s main.c
    $(CC) $(CFLAGS) startup.o startup.s
    $(CC) $(CFLAGS) main.o main.c
    arm-linux-ld -Ttext 0x0c000000 -g startup.o main.o -o led_on_elf
    arm-linux-objcopy -O binary -S led_on_elf led_on.bin
    clean:
    rm -f led_on.bin led_on_elf *.o
    复制代码

      东西很简单没什么好说的,在此记录,以免忘记,如有疑问或发现本文有何错误,欢迎提出。

    ---------------------------------------------------------------------------------------------------------------------------------------

    作者:庞辉

    出处:http://www.cnblogs.com/pang123hui/

    本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名庞辉(包含链接).



    每天不用多,进步一点点就够了
  • 相关阅读:
    POJ3683 Priest John's Busiest Day
    POJ3678 Katu Puzzle
    洛谷4782 【模板】2-SAT 问题
    BZOJ2330或洛谷3275 [SCOI2011]糖果
    POJ1236或洛谷2746或洛谷2812 Network of Schools
    POJ2230 Watchcow
    POJ2942 Knights of the Round Table
    POJ3694 Network
    BZOJ1123或洛谷3469 [POI2008]BLO-Blockade
    animition动画的加入
  • 原文地址:https://www.cnblogs.com/tobeprogramer/p/3030388.html
Copyright © 2011-2022 走看看