Thread 中讨论的其他器件:SysBIOS、 SysConfig
您好!
我偶然发现了调用 EasyLink_receiveAsync()后立即调用 EasyLink_abort()失败的问题,原因是 EasyLink_Status_Cmd_Error。 这似乎是特定于时序的、因为两个调用之间至少281us 的睡眠(在调试配置模式下)可以解决该问题。 我能够使用以下代码缩小其范围:
while (true){
成功= true;
状态= EasyLink_receiveAsync (receiveCallbackInternal、0);
Success &= status =EasyLink_Status_Success;
usleep(280);
status = EasyLink_abort();
Success &= status =EasyLink_Status_Success;
updateOutputLets (成功);
睡眠(2);
}
当然、这个示例本身并不合理、但在我的应用环境中、我确实碰巧在接收操作开始后不久就不得不中止它。
顺便说一下、不幸的是、论坛编辑器不允许我将上面的代码片段插入代码块中。 因此、版本很丑、但下面是完整的最小示例:
#include
#include
#include
#include
#include "ti_drivers_config.h"
#include "EasyLink/EasyLink.h"
#include
静态任务结构主任务;
静态 uint8_t mainTaskStack[1024];
静态 Task_Params mainTaskParam;
void updateOutputLetds (bool 成功){
if (成功){
GPIO_WRITE (CONFIG_GPIO_LED_GREEN_2、CONFIG_GPIO_LED_ON);
GPIO_WRITE (CONFIG_GPIO_LED_RED、CONFIG_GPIO_LED_OFF);
}
否则{
GPIO_WRITE (CONFIG_GPIO_LED_GREEN_2、CONFIG_GPIO_LED_OFF);
GPIO_WRITE (CONFIG_GPIO_LED_RED、CONFIG_GPIO_LED_ON);
}
GPIO_TOGGLE (CONFIG_GPIO_LED_GREEN_1);
}
静态空接收回调内部(EasyLink_RxPacket *数据包,EasyLink_Status 状态){
}
静态 void initial(){
GPIO_init();
GPIO_WRITE (CONFIG_GPIO_LED_GREEN_1、CONFIG_GPIO_LED_OFF);
GPIO_WRITE (CONFIG_GPIO_LED_GREEN_2、CONFIG_GPIO_LED_OFF);
GPIO_WRITE (CONFIG_GPIO_LED_RED、CONFIG_GPIO_LED_OFF);
EasyLink_Params EasyLink_params;
EasyLink_Params_init (&EasyLink_params);
EasyLink_init (&EasyLink_params);
}
void mainTaskFunction (UArg0、UArgarg1){
bool 成功;
EasyLink_Status 状态;
initialize();
while (true){
成功= true;
状态= EasyLink_receiveAsync (receiveCallbackInternal、0);
Success &= status =EasyLink_Status_Success;
usleep(280);
status = EasyLink_abort();
Success &= status =EasyLink_Status_Success;
updateOutputLets (成功);
睡眠(2);
}
}
int main (void){
Board_init();
Task_Params_init (mainTaskParam);
mainTaskParam.STACKSIZE = sizeof (mainTaskStack);
mainTaskParam.priority = 1;
mainTaskParam.stack = mainTaskStack;
Task_construct(&mainTask, mainTaskFUNIT, mainTaskParam,0);
BIOS_start();
返回0;
}
这是否是 EasyLink 中的错误? 至少这种行为看起来有点奇怪。
此致、
Benediktibk