1. 程式人生 > >【DWM1000】 code 解密5一ACHOR 第一次回家Main 函數

【DWM1000】 code 解密5一ACHOR 第一次回家Main 函數

ica order 不為 delay process 內容 monit 開始 body

instance_run();

if((instance_data[0].monitor == 1) && ((portGetTickCnt() - instance_data[0].timeofTx) > instance_data[0].finalReplyDelay_ms))

ACHOR 返回到Main函數(其它設備代碼一樣)執行下面的判斷,我們先看monitor,看看之前有沒有初始化,我們前面分析代碼沒有設置monitor所以只能找初始化了。---沒有找到,我們認為它是0,所以不滿足條件。

if(instancenewrange())

{

進去看看

int instancenewrange(void)

{

if(instance_data[0].newrange)

{

instance_data[0].newrange = 0;

return 1;

}

return 0;

}

同理,變量newrange,我們也沒有找到初始化,所以認為它是0,所以最終也不滿足if,接著往後。

發現後面在我們開始刪減Main 函數,都刪空了,沒有內容。 感覺ANCHOR 第一次返回來什麽實際東西都沒有做。

由於while(1)循環,所以又會進入instance_run了

while(1)

{

instance_run();

instance_run

int done = INST_NOT_DONE_YET;

int message = instance_peekevent(); //get any of the received events from ISR

while(done == INST_NOT_DONE_YET)

{

//int state = instance_data[instance].testAppState;

done = instance_localdata[instance].testapprun_fn(&instance_data[instance], message) ; // run the communications application

//we‘ve processed message

message = 0;

}

與之前一樣,我們假定peekevent 還是沒有任何事件發生,message等於0。

由代碼可以看出,每次必然會執行testapprun_s。

再次進入testapprun_s,回想一下,與前面AHCOR二進宮類似,inst->testAppState = TA_RXE_WAIT ; 進去執行一樣的動作,打開接收器。然後退出,然後回到Main。然後在…… 感覺一直往復循環,是的,ANCHOR在這裏等待TAG發送數據量,因為接收器打開了。 那何時能退出這個無限循環呢,但接收到無線信號,產生一個事件,message不為0. 回頭再看一下之前的代碼。

if(message == 0) break;

假如我們接到無線數據,ANCHOR由於inst->testAppState 沒有改變,所以依然執行case TA_RXE_WAIT 部分代碼,但是最後沒有break了,會把下面的一個case也執行,我們看看代碼執行了啥

// end case TA_RXE_WAIT, don‘t break, but fall through into the TA_RX_WAIT_DATA state to process it immediately.

if(message == 0) break;

}

case TA_RX_WAIT_DATA : //already recive a message

// Wait RX data

//printf("TA_RX_WAIT_DATA %d", message) ;

switch (message)

會執行“already receive a message”,我們就不要無線循環ANCHOR了,我們該去看看TAG了

【DWM1000】 code 解密5一ACHOR 第一次回家Main 函數