这篇文章是咬牙坚持写的,目标是让你能看懂,写完发现的确是很难懂,全是我的错,其实录个视频讲一讲可能就明白了(后面一定补上,我保证。。。),关于软件追踪,可能是我们在研发阶段中最重要的收尾环节,希望这篇文章像一粒种子一样,种在你的小脑袋瓜里,不求看懂,大体知道还有这么一个玩意儿,等你真正想要应用它到你的项目当中时,我强烈建议你点个收藏,memeda,下面开启复杂难懂的正文。
软件追踪其实最重要的并不是如何移植,这个相对来讲比较简单,最重要的是如何在目标板你需要的追踪内容,并根据输出的最终记录分析你的系统动态运行的轨迹,看看是否符合你的状态机图设计,确保程序的健壮性。建议先往后拉,文章的末尾有这个软件demo的状态图,设计的原图,有点本末倒置,见谅,大体有个数,然后再继续我们的讲解。
这里如何通过软件追踪记录来分析软件的执行流程,正常来讲其实应该先讲一下,这个软件大概的一个功能,有了大体的理解以后再去讲追踪记录,这里我想尝试一下在不了解这个软件功能的情况下,对比源代码来看一下软件执行流程。进一步了解状态机的状态迁移及执行流程。
1.初始化记录,bsp.c文件中相关的记录与源代码对应:
2.初始化记录,Philo.c文件中相关记录与源代码对应:
===RTC===> St-Init (完成了状态机的init初始化,RTC的意思是,运行到完成,可理解为连续执行,后面的->Philo_thinking为状态转换,也是就是执行Q_TRAN的目标状态),状态机在进行状态转换的时候,到目标状态,要执行目标状态的进入处理。
3. 初始化记录,Philo.c文件中相关记录与源代码对应:
下面进行关键部分的分析,就是这个软件是怎么跑起来的,这是事件驱动型的系统,所以有输入的部分,才会激活这个系统,例如系统定时发送一个事件给目标对象:
目标对象接收事件追踪记录:
接下来我们根据记录,找到源代码,看看这个状态处理函数,如何处理这个事件,然后按照我们的执行流程去对比追踪记录的反馈,看看是否一致?状态处理函数如下:
到这里程序运转的流程基本上从源代码的方向分析完了,接下来对比一下QSPY的追踪记录是否吻合,先贴出这块的追踪记录,再逐条分析一下,看看状态到底是不是这样转换的。
整个系统执行反馈的记录完美的与我们程序设计的转换执行路线相同,确定软件是我们设计的运行轨迹进行状态转换的。到这里整篇软件追踪就结束了,有兴趣的同学可以研究研究原文,在对照我做的分析做下参考。最后送上我们的QM生成的状态图,其实我们的代码都是这个QM状态图自动生成的,只是部分内容我们自己填写,如下: