TI中文支持网
TI专业的中文技术问题咨询交流网站

EasyLink_receive接收不到数据时卡死的问题

CC1310 模块,用EasyLink_receive接收数据,当接收不到数据时卡在result = RF_pendCmd(rfHandle, rx_cmd, RF_EventLastCmdDone);不动了

Kevin Qiu1:

修改了哪部分,看起来是参数没有传入成功,所以一直等待

user6340973:

回复 Kevin Qiu1:

直接这么调用的:
EasyLink_RxPacket rxPacket;rxPacket.absTime = 0;EasyLink_Status result = EasyLink_receive(&rxPacket);

Kevin Qiu1:

回复 user6340973:

我试了下没有问题,你是在哪里调用的

user6340973:

回复 Kevin Qiu1:

主循环中,写了一个状态机,先发送再切换频段接收

user6340973:

回复 Kevin Qiu1:

case SEND_DATA:

           if(sentcnt >= sent_cycle )

           {

               GetConfParam();

               send_temp = DS18B20_Get_Temp();

               //sentcnt = 0;

               if(resend_flag == 0)

               {

                   sprintf(senddata,"%2d",test_num);

                   test_num++;

                   if(test_num >= 100)

                   {

                       test_num = 0;

                   }

               }

               else

               {

                   resentcnt++;

               }

               GetPublishData(g_message);

               debug_print("\r\n publish message: %s",g_message);

               //receive_flag = NO_RECIVE;

               EasyLink_abort();

               device_TX();

               SetMainTaskState(RECEIVE_ACK);

               //memset(g_message,0,sizeof(g_message));

               //SetMainTaskState(TASK_END);

           }

           else

           {

               SetMainTaskState(TASK_END);

           }

       break;

       case RECEIVE_ACK:

           //EasyLink_abort();

           device_RX();

           if((send_status == SEND_FAIL) && (resentcnt <= RESEND_CNT))

           {

               resend_flag =1;

               SetMainTaskState(SEND_DATA);

           }

           else

           {

               send_status = SEND_FAIL;

               resentcnt =0;

               sentcnt = 0;

               resend_flag =0;

               memset(senddata,0,sizeof(senddata));

               SetMainTaskState(TASK_END);

           }

           memset(g_message,0,sizeof(g_message));

       break;

       case TASK_END:

           IntoStopMode();

          sleep(10);

           RecoverFromStopMode();

           SetMainTaskState(ADC_SAMPLE);

       break;

       default :

           SetMainTaskState(ADC_SAMPLE);

       break;

device_RX的实现如下:

void device_RX(void){        uint8_t i;

       if(frequence_to_RX() == 0)      {            frequence_to_RX();           debug_print("\r\n reconfig frequence to RX.");       }     else     {         mydelay_ms(10);         rfeasylink_rx();      }

       for(i = 0; i<12; i++)       {

             mydelay_ms(200);            if(send_status == SEND_SUCCESS)            {                       return;            }            rfeasylink_rx();        }

}

Kevin Qiu1:

回复 user6340973:

else{mydelay_ms(10);rfeasylink_rx();}for(i = 0; i<12; i++){mydelay_ms(200);if(send_status == SEND_SUCCESS){return;}rfeasylink_rx();}
 

测一下是卡在上面那个 rfeasylink_rx()还是下面那个

//Blocking Receive
 EasyLink_receive() 

user6340973:

回复 Kevin Qiu1:

第一个没收到就卡在里面了

Kevin Qiu1:

回复 user6340973:

rfeasylink_rx()里面怎么写的,贴一下代码

user6340973:

回复 Kevin Qiu1:

void rfeasylink_rx(void)
{
EasyLink_RxPacket rxPacket;rxPacket.absTime = 0;EasyLink_Status result = EasyLink_receive(&rxPacket);
if (result == EasyLink_Status_Success){debug_print("\r\n address = %x, absTime = %ld, lenth = %d,\r\n payload: %s, rssi = %d, rxTimeout = %ld \r\n",rxPacket.dstAddr[0] ,rxPacket.absTime,rxPacket.len,rxPacket.payload,rxPacket.rssi,rxPacket.rxTimeout);get_deviceid((char *)rxPacket.payload);receive_flag = NO_RECIVE;if(strcmp(g_appconf.devid,deviceid_RX) == 0){send_status = SEND_SUCCESS;return;
}else{send_status = SEND_FAIL;return;}
/* Toggle LED2 to indicate RX */// PIN_setOutputValue(pinHandle, Board_PIN_LED2,!PIN_getOutputValue(Board_PIN_LED2));}else{return;/* Toggle LED1 and LED2 to indicate error *///PIN_setOutputValue(pinHandle, Board_PIN_LED1,!PIN_getOutputValue(Board_PIN_LED1));// PIN_setOutputValue(pinHandle, Board_PIN_LED2,!PIN_getOutputValue(Board_PIN_LED2));}
}

Kevin Qiu1:

回复 user6340973:

EasyLink_receive()是阻塞的,没有收到Rx Packet数据时程序就会停在这里,另一块板子有没有在发数据,另外测一下数据有没有发过来

赞(0)
未经允许不得转载:TI中文支持网 » EasyLink_receive接收不到数据时卡死的问题
分享到: 更多 (0)