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 ReceiveEasyLink_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数据时程序就会停在这里,另一块板子有没有在发数据,另外测一下数据有没有发过来