节点主要程序如下
while(!Addr_Valid_Flag)
{
NodeAddr_TxPacket.dstAddr[0] = 0x4a;
NodeAddr_TxPacket.payload[0] = macAddrLsb;
NodeAddr_TxPacket.len = 1;
EasyLink_getAbsTime(&absTime);
NodeAddr_TxPacket.absTime = absTime + EasyLink_ms_To_RadioTime(RandomNum*20);
if(EasyLink_transmit(&NodeAddr_TxPacket) != EasyLink_Status_Success)
{
Display_printf(hDisplaySerial, 0, 0, "TX macaddr fail");
}
//set mac addr filter
concentratorAddress = 0x7a;
EasyLink_enableRxAddrFilter(&concentratorAddress, 1, 1);
// receive serial number
if(EasyLink_receiveAsync(echoRxCenterCb,0) != EasyLink_Status_Success)
{
Display_printf(hDisplaySerial, 0, 0, "RX serial number fail");
}
//wait 1s for RX
Semaphore_pend(echoDoneSem, 1000000 / Clock_tickPeriod);
}
while(1)
{
Display_printf(hDisplaySerial, 0, 0, "Done");
}
主要想实现节点给网关发送mac地址,网关再回给节点一个确认信号,这是节点的部分程序。现在在调试期间遇到一个问题,在上电的第一个while循环时,easylink_transmit发送没有问题,但是没有接收到网关回复的确认信号,按照我程序的逻辑,应该进行下一次while循环,但是在第二次while循环时,easylink_transmit函数的返回状态就不正确了,不为EasyLink_Status_Success,就发送失败。所以想请大家帮忙看看我程序哪里有问题。
Viki Shi:
easylink_transmit是阻塞调用,指令没有完成之前会block,原地等待结果
user5018061:
回复 Viki Shi:
那为什么在第一个while循环时,easylink_transmit没有问题,在进入第二次循环时就有 问题了呢
user5018061:
回复 Viki Shi:
我换成EasyLink_transmitAsync也还是有这个问题
TI中文支持网
