快捷搜索: 王者荣耀 脱发

驱动开发之常见裸机调试方法

在开发任何程序时,调试是必不可少的事情,硬件驱动开发也一样需要调试。在硬件驱动开发里,如果是直接操作硬件,这种一般称为裸机开发,而在操作系统上进行的开发就称为驱动开发,所以常见的硬件驱动调试方法一般也分为裸机调试和驱动调试。

先说说裸机调试,裸机调试一般有如下方法:

1.点灯法 所谓点灯法就是在没有串口打印的情况下,如果要找到某段代码哪里出了问题,则用一段可使led灯亮的断码放在该段代码某处,如果led亮则证明该位置之前的断码没有问题,然后继续挪动点灯代码,直到找到一个led不能亮的位置,则该位置之前的代码就是问题代码。

2.串口输出法 串口输出就是在程序里面指定位置出输出字符串,如果该位置有字符串输出,证明前面代码没问题,否则就存在问题,其本质和点灯法差不多,只不过形式不同。注意一般字符出输出函数需要我们自己封装,因为这个输出用到了芯片内部串口功能,对于裸机来说就需要设置相关寄存器来初始化,并需要封装相关输出函数,不像应用程序那样直接调用库函数printf输出即可。

3.jtag调试 jtag是cpu内部的一个东西,cpu发出的地址和数据都要经过jtag,因此jtag可以用来控制cpu,方便调试,具体表现为: .当jtag的地址等于某个值时,让cpu停止(硬件断点) .当jtag的数据等于某个值时,让cpu停止(软件断点) .cpu停止后,可以使其重新运行 .cpu停止后,可以读取相关寄存器的值 .cpu停止后,可以直接访问相关外设 具体的使用方法为:芯片的开发板一般有jtag接口,然后通过jtag调试器(例如jLink)把开发板和电脑相连,在电脑上通过某些软件(l例如keil)来控制调试器,调试器发出命令(就是设置地址和数据值)给芯片内部jtag从而间接控制cpu,这样就可以读取寄存器的值来进行调试了。

jtag断点分为硬件断点和软件断点,硬件断点是比较地址,软件断点比较数据,arm9的jtag有两个硬件断点,加入这两断点的地址值分别是A和B

硬件断点流程为:就把jtag的地址值通过jtag调试器设置为A或B,此时程序执行到A或B地址时cpu就会停止。

软件断点流程为:如果需要把数据为123的某地址设为断点,那么就把地址A或B的数据修改为123即可,这样当运行到A或B地址处就会产生断点,当然这样做提前提前保存A或B地址处的值,断点后需要恢复A或B处的值。

注意:由于软件断点需要修改地址处的值,因此这种方法对nor、rom等存储芯片不适用,因为它们不能修改地址处值,硬件断点是可以的,但断点数量有限。

经验分享 程序员 微信小程序 职场和发展