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

开发环境
系统: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:	
	ldr	r0,=0x56000010
	mov	r1,#0x00015400
	str	r1,[r0]
	ldr	r0,=0x56000014
loop:	mov	r1,#0x00000000
	str	r1,[r0]
	bl	delay
	mov	r1,#0x00000ff0
	str	r1,[r0]
	bl	delay
	b	loop

delay:
	mov	r4,#100
del1:	mov	r5,#1000
del2:	sub	r5,r5,#1
	nop
	cmp	r5,#1
	bne	del2
	sub	r4,r4,#1
	nop
	cmp	r4,#1
	bne	del1
	mov	pc,lr

反汇编程序;

leds_elf:     file format elf32-littlearm


Disassembly of section .text:

00000000 <_start>:
   0:	e59f0050 	ldr	r0, [pc, #80]	; 58 <del2+0x24>	//[]地址,pc的当前值加偏移地址[((pc=#8)+#80)]=&0x58=0x56000010
   4:	e3a01b55 	mov	r1, #87040	; 0x15400
   8:	e5801000 	str	r1, [r0]
   c:	e59f0048 	ldr	r0, [pc, #72]	; 5c <del2+0x28>	//[]地址,pc的当前值加偏移地址[((pc=0xC)+#72)]=&0x5C=0x56000014

00000010 <loop>:
  10:	e3a01000 	mov	r1, #0
  14:	e5801000 	str	r1, [r0]
  18:	eb000003 	bl	2c <delay>
  1c:	e3a01eff 	mov	r1, #4080	; 0xff0
  20:	e5801000 	str	r1, [r0]
  24:	eb000000 	bl	2c <delay>
  28:	eafffff8 	b	10 <loop>

0000002c <delay>:
  2c:	e3a04efa 	mov	r4, #4000	; 0xfa0

00000030 <del1>:
  30:	e3a05ffa 	mov	r5, #1000	; 0x3e8

00000034 <del2>:
  34:	e2455001 	sub	r5, r5, #1
  38:	e1a00000 	nop			; (mov r0, r0)
  3c:	e3550001 	cmp	r5, #1
  40:	1afffffb 	bne	34 <del2>
  44:	e2444001 	sub	r4, r4, #1
  48:	e1a00000 	nop			; (mov r0, r0)
  4c:	e3540001 	cmp	r4, #1
  50:	1afffff6 	bne	30 <del1>
  54:	e1a0f00e 	mov	pc, lr
  58:	56000010 	.word	0x56000010
  5c:	56000014 	.word	0x56000014



2:文件Makefile:

1_led.bin:1_led.s
	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
clean:
	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中运行 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值