跟踪Amazon FreeRTOS 的操作步骤如下:
1、打开trcExtensions.h头文件并将TRC_CFG_EXTENSION_COUNT设置为2
2、搜索应用中所有包含#include “aws_secure_sockets.h”或#include “aws_wifi.h”的源文件
3、除了包含硬件相关的的源文件例如aws_secure_sockets.c和aws_wifi.c外,在上述搜索到的其他文件中,添加头文件包含语句#include “trcExtensions.h”。示例:
#include ...
#include "aws_secure_sockets.h" /* 要跟踪的API */
#include "trcExtensions.h" /* 在跟踪API之后,或最后*/
4、重新编译应用程序,并在流模式下启用Tracealyzer跟踪,新增的函数调用事件会出现在跟踪记录中。
5、如果遇到“duplicate defini
tions”重复定义或类似的编译错误,则很可能是在aws_secure_sockets.c和aws_wifi.c(或它们包含的头文件)中也包含了trcExtensions.h。将这种情况下的#include语句删除。
记录器扩展实现原理
Tracealyzer扩展通常是针对特定的API进行的,例如,一组相关的函数,如设备驱动程序或中间件库,或应用程序的特定模块。Tracealyzer对于这些API的跟踪功能依赖于扩展头文件中的预处理定义,它重新定义所跟踪函数的函数名,进而引用加入跟踪功能后重新封装的函数。
Tracealyzer记录器扩展的具体工作原理如下:
(1) 首先在扩展头文件中对要跟踪的API函数名进行了重定义,例如:
#define api_func api_func_trace
函数重定义后,预处理器将会把对api_func 函数的引用变为对api_func _trace函数的引用。api_func _trace ()是在扩展头文件中定义的小型内联函数,函数声明与原函数api_func一致,只是在名称中添加了后缀“_trace”。
(2) 在函数api_func_trace()中,将调用跟踪记录器库函数来保存相关的调用事件。
(3) 下图更清晰的演示了加入记录器扩展后的调用逻辑:
(4) 如虚线箭头所示,在应用程序application.c文件中,调用了名为api_func()的函数。这是应用程序中的调用关系。
(5) 实线部分的两个箭头表示Tracealyzer工作时实际的函数调用逻辑,由于在记录器扩展头文件中进行了预处理定义,对于api_func()函数的调用将替换为对api_func_trace()函数的调用。在api_func_trace()函数中,完成了如下工作: