更上面ANCHOR发送信息时的RTLS_DEMO_MSG_ANCH_RESP, 咱们很快就能够找到以下代码ui
case RTLS_DEMO_MSG_ANCH_RESP:spa {ci |
这里面一部分是设置重要变量,一部分是保存ANCHOR发送来的TOF,准备显示出来了,先看这个部分get
inst->canprintinfo = 2;it inst->tof = 0;io memcpy(&inst->tof, &(messageData[TOFR]), 5);event inst->newrangeancaddress = srcAddr[0] + ((uint16) srcAddr[1] << 8);table inst->newrangetagaddress = inst->eui64[0] + ((uint16) inst->eui64[1] << 8);test |
具体显示咱们先不关注,看看重要变量,毕竟上面这个保存的数据是上次定位结果(其实咱们分析的才是第一次,没有所谓的上次,那么目前上面的结果应该都是没有意义的)变量
inst->anchorRespRxTime = dw_event->timeStamp ; //Response's Rx time inst->testAppState = TA_TXFINAL_WAIT_SEND ; // send our response / the final |
其中anchorRespRxTime 保存了接收到ANCHOR 这个信号的时间, 后面又是那个很是重要的变量,break后,咱们直接找吧。
case TA_TXFINAL_WAIT_SEND : //TAG:sent final message { memcpy(&(inst->msg.messageData[RRXT]), (uint8 *)&inst->anchorRespRxTime, 5); setupmacframedata(inst, RTLS_DEMO_MSG_TAG_FINAL);
|
后面是咱们比较熟悉的发送数据代码
dwt_writetxdata(inst->psduLength, (uint8 *) &inst->msg, 0) ; // write the frame data instancesendpacket(inst->psduLength, DWT_START_TX_DELAYED, inst->delayedReplyTime) |
以前分析过DWM1000 的逻辑问题
#define DWT_SUCCESS (0) #define DWT_ERROR (-1) |
因此,咱们假定它发送成功,那么后面的变量设定应该是
inst->testAppState = TA_TX_WAIT_CONF; inst->previousState = TA_TXFINAL_WAIT_SEND; inst->done = INST_DONE_WAIT_FOR_NEXT_EVENT; //will use RX FWTO to time out (set below) inst->timeofTx = portGetTickCnt(); inst->monitor = 1; |
变量timeofTX是咱们第一次遇到,先记录,看后面怎么用。 根据其它三个重要变量,咱们再找代码, case TA_TX_WAIT_CONF; 分析过不少次了,前面等待发送完成的部分就部分析了,直接找后的if。
if(inst->previousState == TA_TXFINAL_WAIT_SEND) { inst->testAppState = TA_TXE_WAIT ; inst->nextState = TA_TXPOLL_WAIT_SEND ; break; } |
前面还有个重要变量
inst->done = INST_NOT_DONE_YET; |
咱们先分析if 里面的代码,将testAppState 设置为TA_TXE_WAIT 下一步就是等数据,也就意味着TAG分析又告一段落,看似去找ANCHOR了。
可是发现nextState是TA_TXPOLL_WAIT_SEND,咱们这个state 好早以前就遇到过了,是的,没错, 这里是轮回,TAG发完这个数据又从新开始,但又不至于须要从新发blink找ANCHOR,因此回到了TAG收到blink response 后的状态了。 定位分析到这里对TAG代码来讲已经完事了。Oyeah!