目录
1. 编译 + 调试
2. 复位 + 全速运行
3. 单步调试
4. 逐步调试
5. 跳出调试
6. 运行到光标处
7. 跳转到暂停行
8. 调试窗口
首先为什么需要在 MDK 中进行程序的调试呢?
在 MDK 中进行程序调试的主要目的是识别和解决程序中的问题和错误。
比如说找到程序中的逻辑错误。错误的条件判断、循环问题或错误的算法实现。通过观察和分析程序在调试器中的执行过程,可以确定程序执行的路径是否符合预期,从而找到潜在的逻辑错误。
同时可以观察程序在执行过程中变量值的变化。这对于检查变量是否包含正确的数据是非常有用的。通过在程序中设置断点并使用调试工具查看变量的值,可以确保程序在运行时正确的操作变量。
同时调试可以帮忙识别有关内存的问题。比如说内存泄露、非法内存访问或栈溢出。
优化性能。可以通过调试程序,了解程序的性能瓶颈和效率问题。识别并找到导致程序效率低下的部分。使用调试信息和性能分析工具来优化代码,以改善程序的执行速度和资源利用率。
总之,在 MDK 中进行程序调试可以帮助我们检测和解决程序中的问题,提高程序的质量、性能和可靠性。通过调试,可以客观的了解程序的运行情况,并进行必要的修改和优化,以确保程序达到预期并满足需求。
1. 编译 + 调试
在线调试主要分为软件在线调试和硬件在线调试。随着现代技术的发展,硬件的成本普遍比较低,一般我们都使用硬件在线调试,也就是在 MDK 中编译好程序后,将程序下载到单片机的芯片中。在 MDK 中进行硬件调试。(进入调试界面的要求是必须先将程序下载到芯片中)
打开软件工程 ---> 编译 ---> 下载 ---> 调试,如下图的步骤:
进入调试以后的界面如下图所示:
2. 复位 + 全速运行
首先先进行复位,将程序复位到初始值处;然后 F5 进行全速运行,我们可以在很多的地方打断点,这样 F5 全速运行就会到达断点位置,到达断点位置对应程序也就停止了。前提是程序从初始状态到断点位置中间没有错误,能运行到断点位置。
复位以后的界面如下图所示:
在此设置四个断点,F5 全速运行,或者点击 RESET 旁边的图标全速运行,如下图所示:
3. 单步调试
顾名思义,单步调试就是每点一次按钮,程序就运行一步,遇到函数会进入函数。
点击下图中的图标进行单步调试,或者使用快捷键 F11。(这里取消上面的断点)
在具体的使用过程中,就会明白什么叫没点一次,程序就运行一步,遇到函数进入函数。(比如说 main 函数,main 开始时首先 delay_init(168); F11 来到这一行时,就会进入函数 delay.c 中,将 delay_init 函数运行完以后,又会重新返回主函数 main 中,运行下一个 usart_init(115200);之后又会进入 usart.c 中,进入 usart_init 函数中,如此进行循环)
4. 逐步调试
逐步调试也是一行一行的进行运行,也就是每点一次按钮,程序运行一行。但是遇到函数不会进入函数。
点击下图中的图标,或者使用快捷键 F10。
5. 跳出调试
跳出调试就是跳出函数调试,也就是每点一次按钮,程序跳出一个函数,直到跳出最外面的的函数为止(main 函数)。点击图标按钮,或者按快捷键 Ctrl + F11。
6. 运行到光标处
运行到光标处即将光标放在某一处,点击该按钮(或者 Ctrl + F10),程序执行到光标的位置就会停止下来(当然前提是程序可以运行到光标处)
7. 跳转到暂停行
跳转到暂停行这个功能在程序停止运行时有效,主要的作用就是我们打开了很多文件,这个时候不知道程序运行到哪里了,点击该按钮,就可以找到我们程序暂停的位置。
8. 调试窗口
调试窗口是在调试的时候可以查看的窗口,进入调试模式后,点击 View 菜单,即可查看下面的窗口菜单。
其中用的比较多的有:
Memory Windows:内存窗口,也就是我们查看变量的窗口。
System Viewer:系统外设窗口,查看外设寄存器数值的窗口。(这对于我们查看寄存器值是非常有帮助的!)