gpt4 book ai didi

c - 阻塞代码的替代方法

转载 作者:太空宇宙 更新时间:2023-11-04 03:31:56 24 4
gpt4 key购买 nike

尝试将 mbed OS 调度程序用于小型项目。

由于 mbed os 是异步的,我需要避免阻塞代码。

但是我的无线接收器的库使用了一条阻塞线:

while (!(wireless.isRxData()));

有没有其他方法可以在收到消息之前不阻塞所有代码?

static void listen(void) {
wireless.quickRxSetup(channel, addr1);
sprintf(ackData,"Ack data \r\n");
wireless.acknowledgeData(ackData, strlen(ackData), 1);
while (!(wireless.isRxData()));
len = wireless.getRxData(msg);
}

static void motor(void) {
pc.printf("Motor\n");
m.speed(1);
n.speed(1);
led1 = 1;
wait(0.5);
m.speed(0);
n.speed(0);
}

static void sendData() {
wireless.quickTxSetup(channel, addr1);
strcpy(accelData, "Robot");
wireless.transmitData(accelData ,strlen(accelData));
}

void app_start(int, char**) {
minar::Scheduler::postCallback(listen).period(minar::milliseconds(500)).tolerance(minar::milliseconds(1000));
minar::Scheduler::postCallback(motor).period(minar::milliseconds(500));
minar::Scheduler::postCallback(sendData).period(minar::milliseconds(500)).delay(minar::milliseconds(3000));
}

最佳答案

您应该删除 while (!(wireless.isRxData())); 循环中的 listen 函数。将其替换为:

if (wireless.isRxData()) {
len = wireless.getRxData(msg);
// Process data
}

然后,您可以在该 if 语句中处理您的数据,或者您可以在另一个将执行处理的函数上调用 postCallback

关于c - 阻塞代码的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35758969/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com