使用Tracealyzer跟踪Amazon FreeRTOS TCP socket

浏览:1781来源:本站时间:2019-01-25
默认情况下,Tracealyzer记录器库(recorder library)可以跟踪两种信息:(1)RTOS内核事件,如上下文切换和RTOS API调用;(2)应用程序代码中的用户事件,如调试日志记录、状态更改和变量值。

新发布的Tracealyzer 4.2.9,添加了第三种方法-记录器扩展(recorder extensions)来跟踪应用。记录器扩展库中包含的自定义模块使得跟踪库函数调用变得很容易,例如跟踪中间件API、驱动程序API或您希望跟踪的任何其他的重要函数。下面是Tracealyzer的一个示例截图,使用扩展系统跟踪Amazon FreeRTOS中的“Secure Socket”API。


不需要对目标函数代码进行任何修改,使用跟踪API只需在应用程序源代码文件中添加一个#include预处理行,其余部分由预处理程序和跟踪记录器,根据扩展中的定义处理。



代码示例

Tracealyzer提供了为Amazon FreeRTOS创建的两个扩展示例,跟踪aws_secure_sockets.h 中的一些函数(SOCKETS_Connect, SOCKETS_Send, SOCKETS_Recv),以及aws_wifi.h中的一些函数 (WIFI_On, WIFI_Off, WIFI_ConnectAP)调用。每个扩展库有两个组件,一个带有目标端定义的头文件和一个带有主机端元数据的XML文件,告诉Tracealyzer如何解释事件,例如I/O操作的行为。通过这种方式,Tracealyzer可以理解事件的含义,并将它们包含在相关视图中,例如I/O图中。

要在Amazon FreeRTOS中启用这些扩展的跟踪功能,请确定使用的是Tracealyzer 4.2.9或更高版本,并遵循以下步骤:

1. 集成Tracealyzer用户手册中描述的跟踪记录器库,并将其配置为流模式。

2. 打开include/trcExtensions.h,并将 TRC_CFG_EXTENSION_COUNT设置为2。

3. 搜索应用中所有包含#include “aws_secure_sockets.h” 或  #include “aws_wifi.h”的源文件。

4. 在这些文件中添加 #include "trcExtensions.h",如下所示。不用修改包含硬件相关函数的源文件如aws_secure_sockets.c和aws_wifi.c。

#include ...

#include "aws_secure_sockets.h"  /* The traced API */

#include "trcExtensions.h"       /* Should be after, or last */

5. 重新编译代码,并在流模式下启用Tracealyzer跟踪,新增的函数调用事件会出现在跟踪记录当中。

如果遇到重复定义或类似的编译器错误,很可能*.c文件中 (例如aws_secure_sockets.c或aws_wi .c)已经通过它们的头文件间接包含了实现跟踪API的trcExtensions.h。将这种情况下的include语句删除。

如果需要,包含 trcExtensions.h的行可以留在代码中。这可以在禁用跟踪时仍然可以使用跟踪封装函数,但是由于它们只调用原始函数,因此编译器优化很可能会将它们排除。

工作原理

Tracealyzer扩展通常是针对特定的API进行的,例如,一组相关的函数,如设备驱动程序或中间件库,或应用程序的特定模块。自动跟踪功能依赖于扩展头文件中的预处理定义,它重新定义选定的函数名,以引用相应的跟踪封装函数。封装函数调用跟踪记录器库来存储相关的调用事件,然后调用原始函数。任何返回值都会被传回,跟踪在功能上是透明的。

易于集成和开发

Tracealyzer记录器扩展是自包含的,易于集成,便于分发。嵌入式软件供应商可以为他们的客户开发并提供定制的Tracealyzer扩展库,而不需要在他们现有的代码库中集成工具代码。关于扩展机制的更详细的描述可以在perceppio App Note PA-027 中找到。





京ICP备:京ICP备05011254号-1 版权归北京麦克泰软件技术有限公司所有
北京麦克泰软件技术有限公司