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.

[参考译文] CC1352R:接收到异步后立即中止

Guru**** 2555630 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/990723/cc1352r-immediate-abort-after-receiveasync

器件型号:CC1352R
Thread 中讨论的其他器件:SysBIOSSysConfig

您好!
我偶然发现了调用 EasyLink_receiveAsync()后立即调用 EasyLink_abort()失败的问题,原因是 EasyLink_Status_Cmd_Error。 这似乎是特定于时序的、因为两个调用之间至少281us 的睡眠(在调试配置模式下)可以解决该问题。 我能够使用以下代码缩小其范围:

   while (true){
       成功= true;

       状态= EasyLink_receiveAsync (receiveCallbackInternal、0);
       Success &= status =EasyLink_Status_Success;

       usleep(280);

       status = EasyLink_abort();
       Success &= status =EasyLink_Status_Success;

       updateOutputLets (成功);
       睡眠(2);
   }

当然、这个示例本身并不合理、但在我的应用环境中、我确实碰巧在接收操作开始后不久就不得不中止它。

顺便说一下、不幸的是、论坛编辑器不允许我将上面的代码片段插入代码块中。 因此、版本很丑、但下面是完整的最小示例:

#include
#include
#include
#include
#include "ti_drivers_config.h"
#include "EasyLink/EasyLink.h"
#include

静态任务结构主任务;
静态 uint8_t mainTaskStack[1024];
静态 Task_Params mainTaskParam;

void updateOutputLetds (bool 成功){
   if (成功){
       GPIO_WRITE (CONFIG_GPIO_LED_GREEN_2、CONFIG_GPIO_LED_ON);
       GPIO_WRITE (CONFIG_GPIO_LED_RED、CONFIG_GPIO_LED_OFF);
   }
   否则{
       GPIO_WRITE (CONFIG_GPIO_LED_GREEN_2、CONFIG_GPIO_LED_OFF);
       GPIO_WRITE (CONFIG_GPIO_LED_RED、CONFIG_GPIO_LED_ON);
   }

   GPIO_TOGGLE (CONFIG_GPIO_LED_GREEN_1);


静态空接收回调内部(EasyLink_RxPacket *数据包,EasyLink_Status 状态){


静态 void initial(){
   GPIO_init();
   GPIO_WRITE (CONFIG_GPIO_LED_GREEN_1、CONFIG_GPIO_LED_OFF);
   GPIO_WRITE (CONFIG_GPIO_LED_GREEN_2、CONFIG_GPIO_LED_OFF);
   GPIO_WRITE (CONFIG_GPIO_LED_RED、CONFIG_GPIO_LED_OFF);

   EasyLink_Params EasyLink_params;
   EasyLink_Params_init (&EasyLink_params);
   EasyLink_init (&EasyLink_params);


void mainTaskFunction (UArg0、UArgarg1){
   bool 成功;
   EasyLink_Status 状态;
   initialize();

   while (true){
       成功= true;

       状态= EasyLink_receiveAsync (receiveCallbackInternal、0);
       Success &= status =EasyLink_Status_Success;

       usleep(280);

       status = EasyLink_abort();
       Success &= status =EasyLink_Status_Success;

       updateOutputLets (成功);
       睡眠(2);
   }


int main (void){
   Board_init();

   Task_Params_init (mainTaskParam);
   mainTaskParam.STACKSIZE = sizeof (mainTaskStack);
   mainTaskParam.priority = 1;
   mainTaskParam.stack = mainTaskStack;
   Task_construct(&mainTask, mainTaskFUNIT, mainTaskParam,0);

   BIOS_start();

   返回0;

这是否是 EasyLink 中的错误? 至少这种行为看起来有点奇怪。

此致、
Benediktibk

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

    您好 、Benediktibk、  

    我们将对此进行研究、并将尽快返回给您。  

    谢谢、  
    ELIN  

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

    你(们)好

    您是否已使用最新的 SDK 对此进行了测试?

    我尚未对您的代码进行测试、因为它不会编译(不知道您是如何配置 SysConfig 的。 我以 rfEasyLinkRX 为例、在 EasyLink_receiveAsync 之后添加了一个 EasyLink_abort、这两个函数都称为 Reported EasyLink_Status_Success:

    while (1){
    #ifdef RFEASINKRX_ASYNC
           rxStatus = EasyLink_receiveAsync (rxDoneCb、0);
           ABortStatus = EasyLink_abort();

           //等待接收*/的300ms
           if (semaphore_pend (rxDoneSem、(30000 / Clock_tickPeriod))= false)

    在使用最新 SDK 测试时、您是否有任何问题?

    如果您有要共享的代码、请使用其中一个 EasyLink 示例作为起点、以便我知道需要如何设置 SysConfig 来测试与您相同的操作、

    BR

    Siri