This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC1310:在 rfPacketRX 中使用 RFQueue

Guru**** 1832870 points
Other Parts Discussed in Thread: WMBUS, CC1310
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/890092/cc1310-using-rfqueue-in-the-rfpacketrx

器件型号:CC1310
主题中讨论的其他器件:WMBUS

您好!

我们正在尝试在 rfPacketRX 示例的顶部实现 wmbus 项目。 现在它运行良好、但我对数据包的处理速度有一些考虑、以防止数据包丢失。

我已经向该项目添加了第二个任务来解析接收到的射频数据包。 现在我有2个正在运行的线程、第一个线程是  rfPacketRX 示例中的原始线程。 当我接收到一个新的数据包时、我将把它复制到一个新的缓冲区并发出一个标志。 第二个线程轮询此标志并解析接收到的数据包。

但是、当周围有很多 wmbus 器件时、有时我会在处理旧数据包之前收到一个新数据包。 我想添加 FIFO 结构。 我需要将接收到的数据包添加到 FIFO 中、并将它们拉入第二个线程中进行解析。  代码"rfPacketRx.c"文件中已经有一个 dataQueue_t 变量、回调中调用了"RFQueue_getDataEntry"和"RFQueue_nextEntry"函数。 我正在尝试了解这些功能的工作原理。 是否有任何有用的文档来解释这些内容? 我可以在另一个线程中轮询此队列吗?

谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    用户好!

    我指派了一名专家发表意见。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Erik、

    谢谢、我会等的。

    此致、

    Abdullah。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    阿卜杜拉,

    您是否在 rfPacketRx 示例之上实现了自己的 WMBUS 堆栈? 或者、您是否在 rfPacketRx 示例的基础上移植 TI 提供的 WMBUS 堆栈? 或者、您是否在多协议应用中并排拥有 WMBUS 堆栈和 rfPacketRx 示例?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Severin、您好!

    我们将实现自己的 wmbus 堆栈。 我们将受益于 TI 的 rfPacketRX 示例。

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    为什么不想使用 TI 提供的 WMBUS 堆栈? 它支持 CC1310。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    由于 StackForce 堆栈存在16个器件限制、因此我们无法获得有关 StackForce 堆栈的任何帮助。 我们需要侦听数百个器件、并在需要时添加器件滤波器。 上层即将完成,我们只想通过使用队列或 FIFO 实现来提高性能。 我可以编写一个、但我只是想了解有关 TI 实现的更多信息。 如果我们已经有一个队列可以使用、我不想在队列顶部添加另一个队列、并从射频 FIFO 复制到我的 FIFO。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Abullah

    无线电中不存在 RX FIFO;它都依赖于存储在 RAM 中的数据队列。 存在多种数据队列类型、所有数据队列类型在 TRM 中都有详细说明、但 RFQueue 实现使用的数据队列类型是 dataQueue_t 类型。 如果我的存储器为我提供了正确的服务、RFQueue 将 dataQueue_t 配置为具有 N 个条目的循环队列。 当条目准备就绪时、会使用 RF_EventEntryDone 事件调用射频回调、该事件指示驱动程序搜索条目的 dataQueue_t 实例。

    RFQueue 所做的只是提取 dataQueue_t 条目的分配、配置和队列初始化、以及保持当前条目并搜索下一个就绪条目。 就是这样。

    如果您需要增加 dataQueue_t 中的条目数、则 RFQueue.c 中的某个位置应指定要分配的条目数。 通常为4。

    根据我的经验、4个 dataQueue_t 条目通常足以支持任何堆栈。 此时、瓶颈通常是堆栈在此处理条目所需的时间、可能是堆栈执行者完成了一些糟糕的实现设计或编写了性能较差的代码。

    我希望这是清楚的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Severin、您好!

    感谢您的回答。 我将条目编号增加到4、结果看起来不错。 我使用 Smart RF Studio 数据包 TX 来充当真正的 wmbus 仪表。 我将在每70ms 向 CC1310器件发送1000个数据包、它可以收集这些数据包并很好地进行解码/解析。 有时、1000中会丢失2或3个数据包。

    由于我不熟悉 RTOS、我刚刚使用了与 TI-RTOS 一起使用的 rfPacketRX 和 uartEcho 示例项目。 在接收到的 RF 数据包任务中、我只是举一个标志并将接收到的数据包复制到另一个缓冲区。 在 UART 线程中、我将轮询此标志以解析数据包并将其打印到终端。 我不确定这是一个好的实现、我正在阅读 SYS/BIOS 内核用户指南、以了解使用信标、互斥量等的线程和线程之间的数据共享 我认为我可以使用其中一种方法会很好。 但我仍在尝试了解哪一个适合该应用。

    接下来、我要有3个线程。 射频 RX 线程将接收到的数据包添加到队列。 解析器线程将解析队列中的数据包并在另一个队列中对其进行序列化。 UART 线程将从串行队列打印解析的数据包/将其推送到 UART。 我正在尝试了解阅读内核用户指南的一些基本内容:

    -我应该使用哪种数据共享方法? 信号量、互斥量还是仅全局缓冲器/标志?

    -应该使用哪个队列或 FIFO?

    如何确定这三个线程应使用多少堆栈?  

    此致、

    Abdullah。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果您计划在线程之间共享数据、则应查看邮箱。 这本质上是一个 FIFO 条目队列、可以是任意数据。 请注意、邮箱不会在线程之间隐式复制数据、因此您应在通过邮箱发送接收到的数据之前将其复制。

    您可以使用 TI-RTOS ROV 检查所有堆栈的堆栈使用情况、包括检测堆栈溢出。 这将粗略估计您的任务所需的堆栈大小。 请参阅此处了解如何使用 ROV: https://processors.wiki.ti.com/index.php/Runtime_Object_View_(ROV)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Severin、您好!

    感谢您的回答。 这些信息对我来说已经足够了!

    此致。