1

小さなプロジェクトに 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));
}
4

2 に答える 2