1. 点灯法
1 led_flicker: 2 ldr r0,=0x56000050 3 ldr r1,=(1<<(4*2)) 4 str r1,[r0] 5 ldr r0,=0x56000054 6 ldr r1,=0 7 ldr r2,(1<<4) 8 loop: 9 str r1,[r0] 10 bl delay 11 str r2,[r0] 12 bl delay 13 b loop 14 delay: 15 ldr r3,=30000 16 1b: 17 sub r3,r3,#1 18 cmp r3,#0 19 bne 1b 20 mov pc,lr
可直接使用bl led_flicker来使用该程序。
2. 串口打印及栈初步分析
2.1 使用的前提是串口已经初始化完毕且可以正常使用
直接在需要定位错误的地方加上printk语句,看串口是否有相应的输出即可。
2.2 nand_setup的分析
a.栈和局部变量是临时生成的
b.局部变量的初始值在哪?函数一开始的部分读出这些值,用来初始化局部变量
3. JTAG调试器
工作原理:
a.CPU发出的地址/数据信号都通过JTAG
b.JTAG可以控制CPU
当Addr=xxx,停止CPU(硬件断点,两个,主要用于调试nor/rom上的程序)
当Data=xxx,停止CPU(软件断点,无数个,该地址是可写的,所以无法调试nor/rom上的程序)
c.让JTAG直接访问外设
3.1 命令行调试
3.2 源码级别的调试
前提
a. 程序必须已经重定位好,位于它的链接地址
a.1 如果程序的链接地址是SDRAM, 使用openocd初始化SDRAM
a.2 使用arm-linux-gdb/arm-elf-gdb下载程序
b. 链接脚本必须把text,rodata,data,bss等分开存放
c. 被调试的程序为ELF格式,内含调试信息(即编译时有-g选项)