Tracealyzer 针对FreeRTOS和 Micrium µC/OS的记录器库可以配置成通过可用的通信接口(例如串口)来传输跟踪数据。用户通过提供一个自定义的“流端口”(stream port)来实现,需要在trcStreamingPort.h中实现这些I/O功能,供记录器库使用。流端口的示例在记录器库的“streamport”目录中提供。
流端口需要有足够的数据吞吐量,以保证传输的可靠。你在使用自己定义的流端口实现流跟踪时,如果Tracealyzer提示了“丢失事件”,那么你可以参照以下几种方法,来提升流端口的性能。
潜在的问题可以分成3类: 1、跟踪记录时没有足够的临时缓存空间; 2、系统产生的事件数据超过了流端口的处理能力; 3、传输时存在随机错误,比如波特率设置的太高。
缓存写满 我们先从第一类问题开始。多数情况下,流端口在记录器中使用了位于内部RAM的缓存,事件先存储在缓存,再由TzCtrl任务(Tracealyzer创建的专有任务,用于传输流数据)周期性的更新到流端口。这么做有两个目的:平滑数据输出速率和避免在RTOS内核中调用流端口函数。
内部的缓存被分成了几个部分,称之为页。记录器库的TzCtrl任务会定期的传输所有已经写满的页,但记录器正在写的页除外。所以,如果只使用了2个页的最小设置,TzCtrl任务每次运行只能传输一个页的内容。
内部缓存可以在trcStreamingConfig.h中进行配置: |