linux下程序简单编写_TQ2440第一裸板程序

来源:互联网 发布:电子处方软件免费版 编辑:程序博客网 时间:2024/05/01 10:11

开发环境
系统:ubuntu 12.04
单板:tq2440
编译器:arm-linux-gcc-4.4.3
搭建开发环境详见ubuntu 12.04开发环境配置。
使用命令:mkdir,vi,make,
目标:实现tq2440单板上4个led灯闪烁
第一个程序很简单,用汇编实现。硬件如下:
nLED_1——>GPB5
nLED_2——>GPB6
nLED_3——>GPB7
nLED_4——>GPB8
根据s3c2440手册编写代码,包括2个文件1_led.s和Makefile.

加了句:ldr pc,=0x33d00060   出现这个

TFTP from server 192.168.1.2; our IP address is 192.168.1.6
Filename 'leds.bin'.
Load address: 0x30000000
Loading: T #
done
Bytes transferred = 104 (68 hex)
## Starting application at 0x30000000 ...
nand_scan(): Cannot allocate oob_buf

一、编写源码
1:文件·1_led.s:

.text.global _start_start:ldrr0,=0x56000010movr1,#0x00015400strr1,[r0]ldrr0,=0x56000014loop:movr1,#0x00000000strr1,[r0]bldelaymovr1,#0x00000ff0strr1,[r0]bldelaybloopdelay:movr4,#100del1:movr5,#1000del2:subr5,r5,#1nopcmpr5,#1bnedel2subr4,r4,#1nopcmpr4,#1bnedel1movpc,lr

反汇编程序;

leds_elf:     file format elf32-littlearmDisassembly of section .text:00000000 <_start>:   0:e59f0050 ldrr0, [pc, #80]; 58 <del2+0x24>//[]地址,pc的当前值加偏移地址[((pc=#8)+#80)]=&0x58=0x56000010   4:e3a01b55 movr1, #87040; 0x15400   8:e5801000 strr1, [r0]   c:e59f0048 ldrr0, [pc, #72]; 5c <del2+0x28>//[]地址,pc的当前值加偏移地址[((pc=0xC)+#72)]=&0x5C=0x5600001400000010 <loop>:  10:e3a01000 movr1, #0  14:e5801000 strr1, [r0]  18:eb000003 bl2c <delay>  1c:e3a01eff movr1, #4080; 0xff0  20:e5801000 strr1, [r0]  24:eb000000 bl2c <delay>  28:eafffff8 b10 <loop>0000002c <delay>:  2c:e3a04efa movr4, #4000; 0xfa000000030 <del1>:  30:e3a05ffa movr5, #1000; 0x3e800000034 <del2>:  34:e2455001 subr5, r5, #1  38:e1a00000 nop; (mov r0, r0)  3c:e3550001 cmpr5, #1  40:1afffffb bne34 <del2>  44:e2444001 subr4, r4, #1  48:e1a00000 nop; (mov r0, r0)  4c:e3540001 cmpr4, #1  50:1afffff6 bne30 <del1>  54:e1a0f00e movpc, lr  58:56000010 .word0x56000010  5c:56000014 .word0x56000014


2:文件Makefile:

1_led.bin:1_led.sarm-linux-gcc -g -c -o 1_led.o 1_led.sarm-linux-ld -Ttext 0x00000000 -g 1_led.o -o 1_led_elfarm-linux-objcopy -O binary -S 1_led_elf 1_led.binarm-linux-objdump -D 1_led_elf > 1_led.disclean:rm -f 1_led.bin *.o 1_led_elf 1_led.dis


 二、编译

change@change:~$ cd /home/change/Si/tq2440/1_led/
change@change:~/Si/tq2440/1_led$ make
arm-linux-gcc -g -c -o 1_led.o 1_led.s
arm-linux-ld -Ttext 0x00000000 -g 1_led.o -o 1_led_elf
arm-linux-objcopy -O binary -S 1_led_elf 1_led.bin
arm-linux-objdump -D 1_led_elf > 1_led.dis
change@change:~/Si/tq2440/1_led$ ls
1_led.bin  1_led.dis  1_led_elf  1_led.o  1_led.s  Makefile

 

把1_led.bin下载到dram中运行 

原创粉丝点击