工具与软件:
您好!
我有一个关于 EasyLink API 附带的不同传输函数的问题。
我尝试在每次 Transmission 时发送一定数量的数据包,并想使用 EasyLink API ( EasyLink_transmitCcaAsync())中的 Listen befor Talk 函数。 我必须发送的最小数据包数量有两个、如下所示:
EasyLink_transmitAsync(&lbtPacket_1, lbtDoneCb);
EasyLink_transmitAsync(&lbtPacket_2, lbtDoneCb);
由于这会导致一些奇怪的行为、我基本上通过使用二进制信标使这个调用阻塞。 这种方法是有效的,但只在一秒钟的发送间隔,如果 intervall 变得更大,我必须发送每个数据包至少两次,所以总共4个数据包,我再次得到未定义的行为。
这是用于一秒钟对讲机的代码 IAM:
EasyLink_transmitAsync(&lbtPacket_1, lbtDoneCb); Semaphore_pend(lbtDoneSem, BIOS_WAIT_FOREVER); // Hack but works Semaphore_pend(lbtDoneSem, BIOS_WAIT_FOREVER); counter++; Semaphore_post(lbtDoneSem); EasyLink_transmitAsync(&lbtPacket_2, lbtDoneCb); Semaphore_pend(lbtDoneSem, BIOS_WAIT_FOREVER);
对于较长的 Intervalls、将在 for 循环中调用此代码。
是否有人知道为什么不能按该顺序调用这些函数、为什么只能使用一秒钟的 intervall?
从 System_printf()输出、持续5秒:
Output: mainTask: Start EasyLink_Status_Success && Semaphore_post Count: 1 EasyLink_Status_Success && Semaphore_post Count: 2 EasyLink_Status_Success && Semaphore_post Count: 2 Expected output: mainTask: Start EasyLink_Status_Success && Semaphore_post Count: 1 EasyLink_Status_Success && Semaphore_post Count: 2 EasyLink_Status_Success && Semaphore_post Count: 1 EasyLink_Status_Success && Semaphore_post Count: 2
从 System_printf()输出1秒的 intervall:
Output = expected Output: mainTask: Start EasyLink_Status_Success && Semaphore_post Count: 1 EasyLink_Status_Success && Semaphore_post Count: 2 EasyLink_Status_Success && Semaphore_post Count: 1 EasyLink_Status_Success && Semaphore_post Count: 2
提前感谢
GBU