您的位置 首页 汽车

Linux下ARM裸板程序编写

有些学习过Bootloader和内核的朋友肯定会知道,在调用C语言函数之前肯定会有一段汇编代码在前面铺路,进行一些必要的初始化工作;而那些…

 有些学习过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,#0x0STR R1,[R0]                @ 写入0,制止WATCHDOG,不然CPU会不断重启LDR SP,=0x0c001000        @ 设置仓库,留意:这时咱们是将程序直接烧录到SDRAM中,所以仓库要设置在SDRAM中@ 假如将程序烧在NAND FLASH中,需将仓库改为1024*4,由于NAND FLASH中的代码@ 在复位后会移到内部RAM中,此RAM只要4KBL    main                @ 调用C程序中的main函数halt_loop:B    halt_loop    

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

最终是Makefile文件。

CC=arm-linux-gccCFLAGS=-g -c -oled_on.bin:startup.s main.c$(CC) $(CFLAGS) startup.o startup.s$(CC) $(CFLAGS) main.o main.carm-linux-ld -Ttext 0x0c000000 -g startup.o main.o -o led_on_elfarm-linux-objcopy -O binary -S led_on_elf led_on.binclean:rm -f led_on.bin led_on_elf *.o

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/277057.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部