代码看到这里
while(1) {
#ifdef RFEASYLINKRX_ASYNC
EasyLink_receiveAsync(rxDoneCb, 0);
/* Wait 300ms for Rx */
if(Semaphore_pend(rxDoneSem, (300000 / Clock_tickPeriod)) == FALSE)
{
/* RX timed out abort */
if(EasyLink_abort() == EasyLink_Status_Success)
{
/* Wait for the abort */
Semaphore_pend(rxDoneSem, BIOS_WAIT_FOREVER);
}
}
#else
1.在EasyLink_receiveAsync(rxDoneCb, 0);中已经有回调函数行使Semaphore_post,那之后的Semaphore_pend(rxDoneSem, (300000 / Clock_tickPeriod)) 不是会立即触发?怎么样在没有收到数据的时候等待300ms?
2.我记得在rfpacket例程中进入接收模式是永久性的,EasyLink_receiveAsync是否也是一样?还是接收完数据会退出接收模式?
3.Semaphore是确保同步的逻辑吧?函数中为什么会使用Async字眼呢?
也许问题问的很菜鸟,还请ti工程师们不吝赐教,O(∩_∩)O谢谢
xin wang22:
求解答
Yan:
回复 xin wang22:
xin wang22,
在RFEASYLINKRX_ASYNC 模式下,是300ms开窗RX,然后结束,循环模式。
不是在RFEASYLINKRX_ASYNC下,则是一直RX,不停。
xin wang22:
回复 Yan:
我调试了一下,在RFEASYLINKRX_ASYNC模式下接收函数接收到了后会触发回调函数,回调函数中有post解除占用,此时接收已经结束了吧。另外在等待接收的过程中是否可以执行主程序?一段时间后再检查信号量是否post以实现异步?
xin wang22:
回复 Yan:
明白了,谢谢解答,另外task是否是根据优先级循环顺序执行的?如果一个task中死循环就不会执行其他task了是吗?
xin wang22:
回复 Yan:
好的,谢谢解答