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.

[参考译文] CC1312R:使用信号器从回调写入UART

Guru**** 2540720 points


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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1103415/cc1312r-using-semaphore-to-write-uart-from-callback

部件号:CC1312R

我在回调中发现了Ter关于向UART写入的评论:

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/63.6545万/rtos-launchxl-cc1310-cc1310-transmit-and-receive-to-rf-from-spi-or-uarthttps://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/636545/rtos-launchxl-cc1310-cc1310-transmit-and-receive-to-rf-from-spi-or-uart</s>1310 131063.6545万13101310

TER对使用信号量与邮箱进行了以下评论:

对于RX,它有两个版本:

—使用信号量:其缺点是RX和UART使用相同的缓冲区。 在最终解决方案中,必须注意避免UART阻塞RX。

-使用邮箱。 缺点是邮箱的内存分配。

我现在正在代码中使用邮箱。  我只是想了解RX和UART使用相同缓冲区和UART阻止RX的Ter含义,应该避免。

我不明白UART如何阻止RX?

提前感谢。

tw

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

    高德

    如您所知,对讲机和UART使用不同的内核(M0用于射频内核,M4用于主CPU)。 因此,它们可以独立运行。 但是,RF命令是从M4内核计划的。 因此,如果M4内核在UART事务上花费大量时间,它可能无法在需要时安排RF命令(或处理来自RF内核的回调)。

    谢谢,

    Marie H

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

    玛丽:

      感谢您的解释。  是否有方法在接收时轮询RF而不是依赖回叫?

    我正在以非常固定的间隔传输标准大小的数据包。  基本上,我想以最快的方式了解是否存在

    已在固定时间间隔内接收到一个数据包(6字节)。

    tw

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

    高德

    我认为在您的案例中,如果没有回拨,是不可能做到的。 但是,您可以通过修改RF_cmdPropRx命令的以下参数来过滤出不符合您的限制的数据包,以便在M4端腾出处理时间:

    • RF_cmdProprx.maxPktLen = 6;
    • rf_cmdProprx.pktConf.bVarLen = 0;

    这只会在收到6字节数据包时调用回调,这是我知道的最快方式。

    此致,

    亚瑟

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

    亚瑟:

     谢谢。  我的RF_cmdPropRx中已有这些设置。  RF_pendCmd()是否提供数据包已接收的信息?

    我一直在使用该功能,而不是等待回拨。  

    tw

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

    德:

    是,RF_PendCmd返回事件标志,其中包括RF_EventRxOk。 但是,请记住,它将阻止流,直到发生指定的事件。

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

    我正在任务中运行RF_PendCmd。  UART写入正在不同的线程上运行。  在这种情况下,UART写入不会

    影响RX,因为我不使用回拨。  这是否合理?

    我还有一个问题: 如果我通过UART在另一个线程上发送大量数据,是否可以保留RF_PendCmd或回调。

    我注意到,经过长时间的运行后,RX回调不再发生,就像某件事被挂起一样。   

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

    玛丽:

      UART能否锁定对讲机接收回叫?  在我的代码中,我的回调函数将收到的6字节数据包排队到A中

    缓冲区。  在单独的线程中,当缓冲区充满96字节时,我通过UART将其发送到Raspberry Pi。  似乎是回调

    锁定,而线程仍可发送到UART。  主线程不再接收线程。  如何检查对讲机是否正在接收

    如果未发出回叫?

    tw