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.

[参考译文] CC1314R10:从阻塞模式切换到取消阻塞模式的简单方法

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1536569/cc1314r10-simplest-way-to-switch-from-blocking-to-unblocking-i-o

器件型号:CC1314R10
主题:SysConfig 中讨论的其他器件

工具/软件:

您好:

我正在调试数据包转发、使 UART “饱和“。 由于我通常的无线电吞吐量要高得多、因此我决定了

从而无法进行任何流量控制。 然而、在数据包改编的过程中、它们堆叠起来、我遇到了阻止 UART2 输出的问题。

在此“调试版本“中、我没有操作系统、FreeRTOS 端口待处理。

为了防止 nortos 程序在阻止 UART2 输出时停止太长时间、我一直在寻找消除“阻止等待“的方法。

在 UART (115.200) 速率与空气速率之间的较低速率的情况下、一个“长“字符包会破坏在时的实时响应

执行阻塞 UART 写入期间、CPU 处于空闲状态。

我当前的估计是、我只是将 I/O(写入)更改为取消阻止、我可以通过比较来确定 IO 已完成  

bytecount 与“bytesWriten",“,并且他们总是必须是平等的 UART 驱动程序是免费的,我可以去队列包和制作

新写入。 这将解决“群起“的问题与一个小牺牲的内存中的队列.

我已经阅读了有关驱动程序信令、用于唤醒程序的信标和示例的信息、但没有参考

传输完成的回调、这可能是解决此问题的方法。

有了更详细的驱动程序知识,你认为我简单的比较方案会起作用,有没有更好的方法?

还是应该使用回调来启动下一次写入?

在这种情况下、是否只是将其设置为类似于 rfUARTbridge 示例中使用的 readcallback?

此致

Gullik

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

    如果我只是将模式更改为非阻塞、并定期监视 对象->writeInse 参数(在 UART2 句柄中找到??) 我可以确定是不是

    最后 IO 完成了、对吗?

    这将是从队列中发出另一个 I/O 的信号、

    我不明白的一件事是  

    使用阻塞机制时、数据传输是通过 DMA 从 userbuffer 传输或传输到 userbuffer。 这是自然的预期方式。

    使用非阻塞机制时、 代码和描述指示 I/O 是从 RX/TX 环形缓冲区完成的、这是否意味着每个 I/O 仅是环形缓冲区大小、或

    驱动程序是否向/从用户缓冲区“重新填充“? 环形缓冲区只有 32 字节(???) 他们能增加吗? 在何处更改以使 Sysconfig 不能“更正“?

    Gullik

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

    尊敬的 Gullik:

    感谢您的提问。 让我们从问题的总体角度开始。

    从 UART 驱动程序文档 (uart.h) 中、我建议您在回调模式下使用 UART。 在回调模式下、它是非阻塞的、您可以使用事件完成标志来检查操作(读取或写入)是否已完成。

    缓冲区大小可以根据您的需求进行调整、但如果不需要、我不会增加缓冲区大小。

    请告诉我这种方法是否可行。

    此致、
    Theo

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

    谢谢 Theo、

    这似乎是合理的,回调可以设置一个“完成“标志,指示一个新的队列元素

    数据可能会出队并写入 UART。 然而,我不能让这个工作,新的尝试要做。

    您的建议是 eventCallback 还是只是 writeCallback?  

    在 writeCallback 的情况下,这是我给它的整个缓冲区,还是只是 ringbuffer 可以包含什么?

    因为你说“操作(读或写)我假设 eventCallback、对吧? 检查写入事件吗?

    Gullik

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

    尊敬的 Gullik:

    请参阅以下 uart.h 文档: https://dev.ti.com/tirex/explore/content/simplelink_cc13xx_cc26xx_sdk_8_30_01_01/docs/drivers/doxygen/html/_u_a_r_t2_8h.html 

    对于写入回调、您可以检查 UART2_EVENT_TX_FINISED 以确保发送了数据。

    读取回调可以通过部分数据读取或完成读取来触发。 在您的应用程序或回调中、您需要检查读取是否按预期完成、如果不取消读取、以确保 UART 处于正常状态。  



    此致、
    Theo

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

    现在实现了写回调、最后的调试和测试正在进行中。

    这仅适用于写入情况、读取情况良好、但我们现在正在调查丢弃的数据包  

    输出。 它们在数据包处理的所有阶段进行检查、因此我们很快就会完成。

    此致、

    Gullik