我想设定一个500ms的接收窗口,请问正确的写法是什么的,基于easylink库
我通过例程看到如下代码
//数据接收回调 void RxDoneCb(EasyLink_RxPacket * rxPacket, EasyLink_Status status) {if (status == EasyLink_Status_Success){}else if(status == EasyLink_Status_Aborted){}else{}Semaphore_post(RcvDoneSem); }
//打开接收EasyLink_receiveAsync(RxDoneCb, 0);//等待500msif(Semaphore_pend(RcvDoneSem, (JOINACK_RCV_TIME_US / Clock_tickPeriod)) == FALSE){/* 无应答 */if(EasyLink_abort() == EasyLink_Status_Success){/* Wait for the abort等待关闭完成 */Semaphore_pend(RcvDoneSem, BIOS_WAIT_FOREVER);}}
该代码在500ms中没有接收到数据时则会调用EasyLink_abort来关闭异步的发送和接收,这儿就可以关闭接收窗口,但是有个问题是,如果有数据了之后,在数据回调中会产生RcvDoneSem这个信号量,则以第一个if为true,程序直接向下运行了,接收窗口就一直没用关闭么? 我想无论有没有数据,来几组数据,接收窗口都只打开500ms,还不影响功耗,请问应该如何编写呢?
谢谢
Viki Shi:
感谢反馈正确解答