《程序是调试出来的》嵌入式Keil5的调试技巧 您所在的位置:网站首页 msp432延时函数 《程序是调试出来的》嵌入式Keil5的调试技巧

《程序是调试出来的》嵌入式Keil5的调试技巧

#《程序是调试出来的》嵌入式Keil5的调试技巧| 来源: 网络整理| 查看: 265

程序是调试出来的 Keil5的调试技巧1.注释//2.既然板子在手,不如软硬结合3.善用调试小工具4.休息一下,出去走走,理清程序思路

Keil5的调试技巧

    调试手段是教不会的,而是自己亲身实践出来的。那笔者撰写这篇文章的意义何在?一个人的发展始终会受限于自己的眼界,会当凌绝顶,一览众山小,笔者想要带你们览下群山风景,至于最终能不能攀登上来就看你们各自的本事和毅力,本文只是起到一个抛砖引玉的作用罢了。

    在笔者的经历中,用到Keil5调试的板子当属STM32单片机,当然,Ti芯片的集成调试环境CCS这方面也不错,当时的快速查看函数定义和显示函数调用层次比Keil5更胜一筹。本文主要结合Keil5工具讲一下调试技巧。当初学到一定阶段,苦于找不到问题之处及如何验证自己的想法而烦恼不已,后来偶得机缘,幸得良师指点,通宵调试加上后天实践才有了自己一些浅谈技巧,后来我有了想写下这篇博客的想法。

1.注释//

    此方法简单且效果明显,十分的好用。当你不知道这段代码的作用,先别急着看源码,不如注释掉,编译下载到开发板看看效果,这一招注释//我屡试不爽,虽谈不上高深,却胜在实用。

//Gui_DrawFont_GBK16(9,5,BLUE,GRAY0,"AD TEST: "); Gui_DrawFont_GBK16(10,25,BLACK,GRAY0,"Light:"); Gui_DrawFont_GBK16(115,25,BLUE,GRAY0,"%"); DisplayButtonUp(5,25,80,45); //x1,y1,x2,y2 DisplayButtonUp(85,27,125,45); //x1,y1,x2,y2 2.既然板子在手,不如软硬结合

    调试以笔者而言,简单分为软件调试和硬件调试及软硬结合调试

硬件调试:简单下载程序,观察板子现象,常常与第一条技巧注释结合使用,如果程序写的是这个现象,下载板子上亦是这个现象,则程序正确。软件调试:在没有开发板得情况下,利用模拟环境(Keil5,CCS都具备)进行调试获得结果,脑补出板子现象。例如:假设板子LED是高电平点亮,软件中我们能知道这个值为1,则我们认定(脑补)LED灯点亮。软硬结合调试:程序在集成环境中(如Keil5/CCS)运行,同步测试开发板,常通过单步调试,“一步一程序,对应一步一现象”。现在笔者常用的便是此种细腻的方法,归根结底是此方法可简单使用,亦可加入各种调试手段融入其中,使其极具调试性,快速找到问题所在。———–>既然板子在手,不如软硬结合还有一点,算是笔者看程序的喜好,接手别人项目,看源码时,总喜欢在main函数中用单步调试来快速理清程序的脉络。毕竟“一动不动的看”容易打瞌睡,精神不集中。不如“当成调试程序的看源码”,看看程序一步步动起来,眼光也跟着动,慢慢的就’‘钻进去了’‘,专注起来。 3.善用调试小工具

    Keil5集成开发环境中给了许多的调试工具和查看窗口,其实调试这方面有很多值得注意的,但确实不是拿来直接说教的,任何教学手段不如你的亲身实践,带我学习嵌入式的大学老师,给我的建议就是“多折腾”

3.1 这八个基本调试按键应该都很熟悉吧,如何不知道如何进入调试及这些按钮含义请自行百度,调试怎么能不动手呢。

在这里插入图片描述

3.2 断点的设置要学会,把断点设置到你认为当前问题所在之处,运行程序来验证

在这里插入图片描述

/* 核心板的PA1连接到WIFI模块的A2 状态:PC8指示灯闪烁提示系统运行 屏幕上显示光照百分比 屏幕接线: GND 电源地 VCC 接5V或3.3v电源 SCL 接PA5(SCL) SDA 接PA7(SDA) RES 接PB0 DC 接PB1 CS 接PA4 BL 接PB10 */ #include "stm32f10x.h" #include "main.h" #include "delay.h" #include "usart1.h" #include "timer2.h" #include "led.h" #include "global.h" #include "stdio.h" #include "math.h" #include "string.h" #include "LCD_calculate.h" #include "Lcd_Driver.h" #include "usart1.h" #include "adc.h" int main(void) { u8 adcx=0; char txt[20]; Delay_Init(); //延时功能初始化 Usart1_Init(9600); //串口1功能初始化,波特率9600 LED_Init(); //LED初始化 TIM2_Init(); //定时10mm Lcd_Init(); Lcd_Clear(RED); //清屏 LCD_LED_SET; //通过IO控制背光亮 Adc3_Init(); Lsens_Init(); Gui_DrawFont_GBK16(9,5,BLUE,GRAY0,"AD TEST: "); Gui_DrawFont_GBK16(10,25,BLACK,GRAY0,"Light:"); Gui_DrawFont_GBK16(115,25,BLUE,GRAY0,"%"); DisplayButtonUp(5,25,80,45); //x1,y1,x2,y2 DisplayButtonUp(85,27,125,45); //x1,y1,x2,y2 //TO while(1) { if(timecount>30) //300毫秒刷新一次 { timecount=0; adcx=Lsens_Get_Val(); sprintf(txt, "%d", adcx); Gui_DrawFont_GBK16(90,25,BLUE,GRAY0,txt); LED1=!LED1; } } }

3.3 会用窗口来观察变量的值变化(如图adcx),甚至可以观察数组每个元素的值变化,软硬结合调试的方式会发现变量的值在不断的变化。 窗口的位置可以根据自己喜好移动和缩放

在这里插入图片描述

3.4其他的还有一些串口窗口也是我们经常调试程序的手段。 我们常常用printf函数来打印一些信息来帮助我们调试。写C语言时,打印信息是直接显示在PC命令行窗口上,但注意在单片机调试中则不行,需要串口重定向,原理相同,具体代码请百度(STM32和MSP432的串口重定向代码不同)

在这里插入图片描述

4.休息一下,出去走走,理清程序思路

    当上面方法没有找到问题所在时,先不要着急,如果情绪变得越来越烦躁,建议即刻停下工作,出去走走,先让自己的脑子冷静下来---->脑袋很混乱,你发现和解决问题的能力会严重下降,不如出去看看风景!

该文章为原创,转载请注明出处和作者



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有