软件追踪技术主要应用在软件调试阶段上,这是一个非常牛叉的玩意儿,怎么讲,学习QP至今,最让我震惊的两门技术之一,最让人震惊的是,他是基于嵌入式方案的软件追踪,也就是在单片机上就能跑起来,当你在裸奔的年代,做着一些较为简单的应用,这玩意怎么说呢,有些鸡肋,因为你可以让你的所有代码都跑在你的小脑袋里,但当你感觉脑袋不够用了的时候,那你可以考虑上这个玩意儿了。
传统我们如何调试我们的代码,所谓的调试就是先让他跑起来,然后在既定输入下条件下,看看输出对不对,这种情况下,有个最强大的武器就是断点-单步调试,他很好用,非常好用,特别适合在一些裸奔或者顺序执行的情况下,因为这些操作虽然看不见,但是有一点能保证,那就是他是顺序执行的。
在多任务或者是事件驱动型系统中,单步调试写劣势就被放大了,因为系统在运行时,单步调试会带来一个最大的麻烦就是,系统被暂停了,因为这种情况下你很难捕捉在某一时刻到底放生了什么样的交互(这种交互在裸机里面是不存在的,因为没有那一坨看不懂的os造成的一个既定的指向),才导致代码执行到了这里。这个时候因为很难用小脑袋去模拟软件执行过程多个对象交互过程中真实的情况,所以你需要想办法动态的去调试,printf是一个非常不错的选择,但是很可惜他并不适用于单片机(因为有很多应用是不带屏幕的,同样printf会造成系统性能的大幅下降,本身硬件就不怎么快)。
软件追踪技术相当于针对嵌入式处理器的应用,在printf方案上的一个超级版本进阶,他不光解决了单片机没有屏,和性能执行的问题,最关键是,他告诉你需要追踪啥?(哪些东西才是真正需要追踪的,通过追踪记录,可以完美的展现你的代码执行轨迹,他们到底是干了啥怎么干的,有没有出格)。
QSPY有两部分组成,一个是所谓的主机,就是一个上位机软件,这个大佬已经帮忙写好,并把源代码开放给了你,另一部分是需要内置到的代码工程当中的宏,在你不用QSPY的时候,直接禁用掉相应的宏就可以了。他们如何通信,其实形式有很多,完全取决你的硬件,最常用的办法就是一根串口线。
书本上讲的大概是这样,他在一台电脑上启动QSPY主机,另一台电脑上模拟嵌入式目标设备,中间一根线通信,如下:
如何让其在自己的开发板上跑起来,并且根据我们内置的追踪记录一条一条的去分析一个真实的系统是如何执行的,是这篇文章的重点中的重点,因为可能有点长,分上下两篇吧,上篇讲移植,下篇讲追踪分析,可能和书本的内容不一致,书本上的内容过期很久了,所以此篇就以QP6.9.0的真实版本作为实例去分析。
首先祭出我们的目标板,这是参加研讨会时候送的F4的开发板:
板子有了,先调我们的目标板的代码,主机部分的代码基本不需要我们改,因为这颗芯片是F401,而没有合适的demo,所以就以QP提供的F407的demo为模板进行移植,说是移植,基本不怎么用改就能跑起来。先看看源码哪里需要改。
在调试的过程中遇到了两个问题,一个就是主频的问题,因为芯片不同,所以,一定要当心看看F401和F407之间到底有哪些区别。找区别,我不太习惯芯片手册了,还是CUBEMX用来顺手,熟悉STM32小伙伴应该都懂得。我在这个地方栽了一个跟头。
图片可能看不太清,这里说一下,401最快是84M的主频,407最快是168M的主频,都是F4,差别有点大,因为我们直接用的是407 所以要仔细去看看的时钟配置。
传不了图了,另开接此位置。。。请看中篇。