什么是裸机程序
代码量比较少,不带操作系统的单片机程序就是所说的裸机程序。
裸机程序里可以看到直接对处理器(所说的MCU)的寄存器、内存、I/O端口等进行读写操作。
一、硬件调试
假如你是在Keil或IAR等开发软件上开发程序,大部分处理器支持使用专用下载器进行Debug,比如J-Link,ST-Link等仿真器/下载器。
调试过程中通常采用设置断点、单步执行、查看寄存器、变量内存值等方法,可以直观看到运行过程中的实时数据,快速排查问题,提高开发效率。
二、串口调试
如果条件有限,比如手上没有仿真器或处理器不支持硬件调试,那么可以采用串口打印自定义信息进行调试,看看程序运行情况,卡在哪里,实际数据等。
串口打印可以使用标准库函数 printf,查看变量的值,但是它比较占用内存空间。
printf("temp:%d\r\n",i_temp); //标准库打印函数,占用内存较大
串口打印还可以使用自定义串口函数,比如uart0_send_bytes(…),打印字符串或ASCII值,占用内存小。
void uart0_send_bytes(uint8_t *buff, uint32_t length); //占用内存小
两种串口打印方式各有所用。
三、指示灯调试
硬件上预留有指示灯,代码运行过程中,在要观察的代码行之间加入控制指示灯亮或灭的代码,指示程序的不同阶段或状态。
四、仪器调试
在出现数据错误、不稳定或死机等奇怪问题时,需要查看原始信号是否正常,可以使用示波器、逻辑分析仪、万用表等设备,观擦硬件中的电信号,如时钟信号、脉冲信号等是否存在失真,电压异常等问题,排除根本原因。