在嵌入式软件开发过程中,不可避免的会出现很多的 bug,比如串口通信异常、定时器无法输出脉冲、io 口无法输出、无法进入中断等等问题,导致这些问题的原因可能不仅仅只是某一个方面,也可能是综合的,可能是软件设计上的问题,也可能是硬件上的,如何锁定问题就成了关键。
学习 51 的时候,可能会采用 led 灯、数码管、lcd 屏等方式进行辅助调试(关于这个看不会 printf 怎么打印红外遥控数据?),也可能会使用类似 printf 函数的方式将数据打印至串口调试助手调试,但无一例外的是,这些方法都要在合适的地方插入合适的代码才行,而且还有可能因为插入了这些调试代码而导致本来没有问题的程序出现了问题,这都是有可能的。
51 开发的时候没有办法,硬件仿真调试功能太弱,只能采用这些方式,但如果说你在进行 stm32 开发时还在使用这些方法,那真的是守着莫大财富而不自知了。
现在简单理解一下 stm32 仿真调试的原理是什么。我们知道程序的运行主要依靠 cpu 还有各种外设,这就相当于一个人在工作,除了需要你的大脑(cpu)外,还需要你的手、脚、躯干等部分协调配合才能将一件事完成,否则光有强大的大脑(cpu)是不行的。
那么调试功能又是怎么怎么一回事呢?它就像是你的同伴,当你在工作的时候,他会实时记录你的工作信息,当别人(调试者)需要知道你的工作情况还有工作细节的时候,由你的同伴告知就行了,这样就能在不耽误你(cpu)正常工作的前提下,又能知道你在干什么。你的同伴拥有以下功能或权限:
1、实时记录你的工作过程,把你工作时的所思所想都记录下来(注意这种记录是实时的,只保留当前的信息,之前的信息会被当前信息覆盖,所以如果你需要记录所有的信息的话,需要把它打印出来才行)。
2、控制你的工作流程,比如暂停你的工作,工作到什么地方的时候让你停下来等等类似功能,但是不能更改你的工作顺序和工作内容(这点很重要)。
stm32 调试过程中最常用的的就是利用 watch 窗口查看变量的值,比如像这样:
你可以看到通过这个窗口,你可以查看 usart1 外设寄存器的值,也可以查看用户变量 num 的值,这样你就能实时的观察变量的变化,从而知道哪里有问题了。
还有很多时候我们需要看别人的代码,比如学长的代码,公司以前项目的代码,如果有相关文档和注释的话还好说,但是这些都没有的话,想要快速理解一个人的想法是很困难的事情。比如说一个变量变化了,那它是在哪个位置变化了?这个变量又在哪里被使用了?这些都是在看别人代码的时候经常会遇到的情况。常用的方法是用搜索功能搜索这个变量名,这样就就能把这个变量的所有出现的位置找出来,但是这里有一个问题,如果这个变量用的非常频繁,有的地方可能只运行一次就不再运行了,有的地方可能需要满足一定的条件才会运行,而有的地方可能会一直执行,这些情况怎么办?都打上断点吗?这确实是一种方法,但是接下来的系列文章将介绍一种更高效的方法,开启你不一样的调试之旅。
根据我多年的嵌入式开发经验,把这个系列的文章分为三个部分,基础部分的内容相信大家或多或少的都了解过,但第二部分和第三部分的内容(第三部分其实已经发布了,就是 itm)却很少人知道,比你盲目的调试和使用 printf 函数打印数据强的多,而且更加方便高效,相信当你掌握了这些调试方法后,你会爱上它的。
转发自:https://www.toutiao.com/i6671816129058439684/?timestamp=1554080731&app=news_article&group_id=6671816129058439684
分散控制系统硬件体系结构
关于Baker Hughes改进油气钻探设备的精度的分析和应用
直流电动机调速之H桥驱动简介
双十一狂卖1000万?南卡耳机为什么这么火?
AR能给汽车行业带来什么改变
为什么说你一定要掌握 KEIL 调试方法?
语音识别技术将让我们未来的生活更加智能
电线电缆的制造工艺比较复杂,具体是如何的
基于Matlab GUI的串口通信编程实现
三星家电2022年新品发布会成功举办
怎么搭建WSL+Vivado?又如何去使用?
南瑞集团将实施三型两网发展战略建设世界一流的能源互联网企业
MiniWare推出微型多模块线性的可编程数字电源
Firefly-RK3399--LED 介绍
pcb是半导体还是集成电路?好问题!进来看答案
1.5GHz双核高清屏 索尼LT29i即将亮相
车好多融资后 估值达66亿美元 几乎垄断二手车市场
施耐德电气以“透明工厂”携手中国制造业共铸新制造
高德智感:红外热成像技术在人体识别中的应用
诺基亚X6上线印度官网支持页_或将近期开售值得期待