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:有关 EasyLink 传输功能阻塞和非阻塞的问题

Guru**** 2468610 points
Other Parts Discussed in Thread: CC1310

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1442875/cc1310-question-about-easylink-transmit-functions-blocking-and-non-blocking

器件型号:CC1310

工具与软件:

您好!  
我有一个关于 EasyLink API 附带的不同传输函数的问题。
我尝试在每次 Transmission 时发送一定数量的数据包,并想使用 EasyLink API ( EasyLink_transmitCcaAsync())中的 Listen befor Talk 函数。 我必须发送的最小数据包数量有两个、如下所示:

 EasyLink_transmitAsync(&lbtPacket_1, lbtDoneCb);
 EasyLink_transmitAsync(&lbtPacket_2, lbtDoneCb);
           

由于这会导致一些奇怪的行为、我基本上通过使用二进制信标使这个调用阻塞。 这种方法是有效的,但只在一秒钟的发送间隔,如果 intervall 变得更大,我必须发送每个数据包至少两次,所以总共4个数据包,我再次得到未定义的行为。
这是用于一秒钟对讲机的代码 IAM:
EasyLink_transmitAsync(&lbtPacket_1, lbtDoneCb);
Semaphore_pend(lbtDoneSem, BIOS_WAIT_FOREVER);

// Hack but works
 Semaphore_pend(lbtDoneSem, BIOS_WAIT_FOREVER);
counter++;
Semaphore_post(lbtDoneSem);

 EasyLink_transmitAsync(&lbtPacket_2, lbtDoneCb);
 Semaphore_pend(lbtDoneSem, BIOS_WAIT_FOREVER);

对于较长的 Intervalls、将在 for 循环中调用此代码。
是否有人知道为什么不能按该顺序调用这些函数、为什么只能使用一秒钟的 intervall?  

从 System_printf()输出、持续5秒:

Output:
mainTask: Start
EasyLink_Status_Success && Semaphore_post Count: 1
EasyLink_Status_Success && Semaphore_post Count: 2
EasyLink_Status_Success && Semaphore_post Count: 2

Expected output:
mainTask: Start
EasyLink_Status_Success && Semaphore_post Count: 1
EasyLink_Status_Success && Semaphore_post Count: 2
EasyLink_Status_Success && Semaphore_post Count: 1
EasyLink_Status_Success && Semaphore_post Count: 2

从 System_printf()输出1秒的 intervall:
Output = expected Output:
mainTask: Start
EasyLink_Status_Success && Semaphore_post Count: 1
EasyLink_Status_Success && Semaphore_post Count: 2

EasyLink_Status_Success && Semaphore_post Count: 1
EasyLink_Status_Success && Semaphore_post Count: 2


提前感谢
GBU

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

    尊敬的 GBU:

    请查看有关 CC1310的简单链接 TX 示例、其中展示了如何同步   EasyLink_transmitASYNC (): https://dev.ti.com/tirex/explore/node?node=A__AEnagmTscfJV575Q.-KiGw__com.ti.SIMPLELINK_CC13X0_SDK__eCfARaV__LATEST

    我认为这里的问题与时序有关、因为我不确定是否有足够的时间完成 TX。

    您还可以使用调试器来查看代码的哪个部分被跳过或处于保持状态。

    如果您可以重新组织同步、请告诉我。

    此致、
    等等


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

    尊敬的 Theo:
    我已经检查了链接和一些其他资源,我认为它是定时和缺少 Semaphore_pend ()的组合。 但我现在让它运行起来。

    谢谢
    GBU

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

    尊敬的 GBU:

    太棒了!

    如前所述、时序始终至关重要、因此最好查看示例中的代码、因为它展示了不同场景的"最佳实践"。

    此致、
    等等