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中运行
- linux下程序简单编写_TQ2440第一裸板程序
- 在Linux下编写C++程序 简单的小程序
- Linux下编写程序
- Linux下编写第一个c语言程序hello world
- Linux下C语言程序简单的编写和调试
- Ubuntu下编写第一个C程序
- linux下编写C#程序
- linux 下串口程序编写
- linux下编写C++程序
- Linux下编写OpenGL程序
- 简单uboot下可执行程序编写笔记
- 在eclipse下编写简单mapreduce程序
- ubuntu下编写简单的helloworld程序
- ubuntu下编写简单的helloworld程序
- 在Linux下用QT5编写第一个串口调试程序
- 简单使用Eclipse编写第一个Java程序
- 简单使用Eclipse编写第一个Java程序
- Ubuntux下QT编写 linux嵌入式开发板的程序
- 剖析MFC的文档视图结构
- Sencha Touch 扩展集合
- VC环境下基于MFC框架的OpenGL的编程环境的配置
- SQLServer助手类
- SVN版本库的分支和Tag
- linux下程序简单编写_TQ2440第一裸板程序
- 开源的源代码编辑控件Scintilla的使用
- c++开源机器学习库(更新中)
- HashSet,TreeSet和LinkedHashSet的区别
- 在svn中如何使用tag,branch,trunk等功能
- 设置Session超时
- NORFlash与NAND Flash的区别
- 研磨JavaScript系列(三):函数的魔力
- 面试题10:二进制中1的个数