Amazon FreeRTOS:幕后花絮

我最近为Embedded.com撰写了一篇文章,标题为“窥探Amazon FreeRTOS我开始分析运行在STM32F475 物联网发现节点上的Amazon FreeRTOS应用程序表现出的高级行为。在本文中,我将通过演示开发人员如何遵循通信流程并检查代码执行而无需查看任何一行代码来继续进行分析。

人们经常说一张图片值一千个字,即使在嵌入式软件中,这仍然是事实。我一直在使用Percepio Tracealyzer来了解Amazon FreeRTOS的运行时行为,而作为开发人员,我们应该感兴趣的一个重要方面是数据和通信如何在整个应用程序中流动。使用通信视图,Amazon FreeRTOS表现出以下行为:

在这幅图中,我们可以轻松地看到数据如何流经应用程序以及我们应该在源中寻找什么。例如,我们可以看到有:

  • 在MQTT和TmrSvc任务之间共享的单个互斥锁
  • 应用程序中有两个队列
  • MQTT和Echoing任务之间只有一个消息缓冲区可用于通信
  • TmrSvc,Echoing和MQTTEcho任务可以通过队列将信息发送到日志记录任务
  • 队列用于从回显向MQTT发送信息

由于Amazon FreeRTOS在文档中未包含任何此类信息,因此开发人员通常必须通过查看源代码自行重新创建这些信息。如果没有,他们可能无法全面了解软件的运行方式,并且修改代码库时引入错误的机会会大大增加。

看到通信流程是一回事,但是开发人员可能想更多地了解特定任务在做什么。为了更好地理解Echoing任务,我单击了最后一个实例,并查看了它执行时生成的事件。您可以在下面查看事件数据:

在事件数据中,开发人员应该能够看到与通信流匹配的事件。等待消息缓冲区,接收缓冲区,将数据发送到MQTT队列和日志记录队列,然后再次在消息缓冲区上等待。仔细检查确实可以发现在运行时发生了malloc事件。如果此应用程序对实时性有严格要求,我们可能要标记此内容,因为malloc通常是不确定的,并且可能导致其他性能问题,例如内存碎片。还要注意,我们只看到动态分配内存,而没有释放内存!因此,要么我们在应用程序中发生内存泄漏,要么此内存在应用程序中的其他位置释放。

跟踪free语句可能需要我们深入代码并匹配每个malloc和free语句。相反,我注意到该任务在2分7秒左右执行,并过滤了事件日志中的free实例。单击该事件,开发人员可以看到在Echoing中分配的内存用于存储日志记录任务也使用的信息。一旦记录任务完成了数据,它将释放内存位置。跟踪信息可以在下面看到:

滚动浏览事件日志,我估计在大约3分钟的执行时间内必须有数百个调用才能释放。出于好奇,我导出了日志,发现免费被称为57,769次!每秒有321个免费通话! (这引起了人们对堆可能变得碎片化的担忧)。对于生产系统,我们可能希望静态分配缓冲区或使用内存池来限制分配和释放内存的数量,这无疑会占用可用的CPU周期。

现在有最后一个项目,在结束这篇文章之前,我想进一步调查。几周前,我为DesignNews撰写了一篇文章,标题为“实时嵌入式系统的未知和隐藏行为”,我注意到FreeRTOS 9.0.0中的已删除任务从未完全删除。我发现这是一种奇怪的行为,想查看基于FreeRTOS 10.0.0的Amazon FreeRTOS是否表现出相同的行为。我使用事件查看器在应用程序中找到了vTaskDelete的仅两个实例,并对其进行了检查。跟踪可以在下面看到:

调用vTaskDelete函数后,回显和MQTTEcho任务不再出现在跟踪数据中。这意味着我在FreeRTOS 9.0.0中看到的幻像任务执行不再出现在FreeRTOS 10.0.0中,这很让人放心。

正如我们在整篇文章中所看到的那样,使用跟踪技术对于分析没有文档或者希望从执行角度更好地理解代码库非常有用。我们还发现,Amazon FreeRTOS的行为似乎是可预测的,并且还表现出一些从事生产意图系统的开发人员可能希望对其进行进一步调查的行为。

参考文献

6 thoughts 上 “Amazon FreeRTOS:幕后花絮”

    1. 好问题。 FreeRTOS内核确实保持开源状态,但是去年秋天,Amazon宣布了基于FreeRTOS内核的Amazon FreeRTOS。他们实质上是购买了FreeRTOS。 FreeRTOS的创始人Richard Barry现在在Amazon FreeRTOS产品组中为Amazon工作。亚马逊将Amazon FreeRTOS用作新的RTOS,其中包括FreeRTOS以及旨在简化连接到Amazon Web 服务(AWS)的多个库。

  1. 如果所使用的图像实际上足够大,可以阅读!对于那些不熟悉Tracealyzer的人来说,这篇文章会更有用!除此之外,谢谢您的分享。

    1. 感谢您的评论。您始终可以尝试按ctrl键并滚动以在浏览器中放大图像,或者下载并打开它们。分辨率在那里,但是标准页面边界限制了它们的宽度。

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.