李明老师的视频教程
http://v.youku.com/v_show/id_XMjAzMTgzNjcy.html
1接好串口电源,打开超级终端,开关从nandflash启动,上电,任意键进入bootloader提示
键入q退出进入类似shell的界面;
2 输入 loadb 之后 显示ready for binary (kermit) download to 0x50000000
之后点超级终端的发送,发送文件,协议改成kermit 发送编译好的bin文件;
发送完后,输入 go 0x50000000;即运行;
二 在windows在通过cmd即dos模拟终端来编译汇编文件,不用ads的IDE;
将MAKE.EXE 拷到ADS安装目录的ARM\ADSv1_2\Bin中,自己的工程目录(如1-led)下编写
汇编文件如led.s 再新建一个Makefile文件
led.s
AREA led, CODE, READONLY
ENTRY
ldr r0, =0x7f008800 //led灯在gpk4——gpk7
gpk地址为0x7f008800
ldr r1, =0x10000000
str r1,[r0]
ledd
ldr r0, =0x7f008808
ldr r1, =0x4000
str r1,[r0]
bl delay
ldr r0, =0x7f0080a4
ldr r1, =0x0
str r1,[r0]
bl delay
b ledd
delay
mov r2,#0x100000
dd
sub r2,r2,#1
cmp r2,#0
bne dd
mov pc,lr
b .
end
Makefile
all:
armasm led.s -o led.o
armlink led.o -o led.axf
fromelf -bin led.axf -o led.bin
fromelf -c led.axf -o led.txt
dir *.bin
之后从终端中进入工程目录,make 即可生成.bin文件,可以将其烧进板子;
三 在windows在通过cmd即dos模拟终端来编译C文件,不用ads的IDE;
C语言中程序应该在准备好C环境(__main作用)后跳到main函数执行;
但不在IDE中编译的话,在这编译C文件并不会跳到main函数,而是顺序执行,先执行delay
函数,这不是我们想要的,所以还需要一个start.s的汇编文件来辅助一下;
led.c
void delay(void);
int mymain(void)
{
volatile int *p = (volatile int *)0x7f008800;
*p = 0x11110000;
p = (volatile int *)0x7f008808;
while(1)
{
*p = 0x0;
delay();
*p = 0xf0;
delay();
}
return 0;
}
void delay(void)
{
int i;
for(i = 0;i<0x1000000;i++)
;
}
start.s
AREA led, CODE, READONLY
import mymain
ENTRY
;mov sp, #0x50008000 ;r13 fu chu zhi
b mymain
end
Makefile
all:
armasm start.s -o start.o //汇编
armcc -c led.c -o led.o //预处理 、编译、汇编
armlink start.o led.o -first start.o -ro-base 0x50000000 -o led.axf // 连接
fromelf -bin led.axf -o led.bin //从axf文件中生成bin文件
fromelf -c led.axf -o led.txt //将axf文件保存成txt文件
dir *.bin
ADS编译出来的是axf格式
axf/elf文件里面包含了符号表,汇编等。BIN文件是将elf文件中的代码段,
数据段,还有一些自定义的段抽取出来做成的一个内存的镜像。由于elf文件
的信息比较全,所以可以用来以单步跟踪的方式运行。
则也可以生成.bin文件;