Хранить массив символов в очереди? - PullRequest
1 голос
/ 03 апреля 2019

Я не могу найти то, что хочу, так как не знаю, как обратиться к тому, что хочу сделать, поэтому я просто опишу это. Я думаю, что знания о mbed на самом деле не нужны, так как я плохо объясню эту часть.

У меня есть функция прерывания в моей программе mbed, которая выполняется каждый раз, когда поступает вход от последовательной связи на ПК.

Serial pc(USBTX,USBRX); //makes a serial link with pc

int main() {
    pc.attach(&newCommand);    //everytime input from pc is detected, this interrupt will make scheduler go to function called 'newCommand'

    //here, fetch one array of chars to work with, the oldest in the queue and analyse the command. If there is none available, wait for one to become available
}


void newCommand() {
    int inputCount = 0;
    int inputBuff[64];
    while (pc.readable()) {    //check if there is anything to read
        if (inputCount  < 64) // check for buffer overflow, maximum 64 ints
          inputBuff[inputCount] = pc.getc(); 
        else
          pc.getc();   // ran out of space, just throw the data away.
        inputCount++;
    }

    //store this char array (inputBuff) in a sort of queue, with the oldest at the front   
}

Какую очередь я бы искал? Я думал, что, может быть, у меня может быть глобальный векторный контейнер, в котором хранятся эти массивы, а затем основная программа выбирает самый старый, но я не уверен, как это сделать?

Edit: я думаю, я мог бы также сделать вектор вместо массива для хранения символов, как в someVect.push_back (pc.getc ()). Будет ли это проще хранить в очереди векторных типов?

1 Ответ

0 голосов
/ 04 апреля 2019

Вектор векторов действительно был бы вариантом, но я думаю, что фундаментальная проблема заключается в том, что вы ожидаете, что полная команда будет готова, когда произойдет последовательное прерывание.Это не гарантируется.

Другим способом будет использование BufferedSerial и использование разделителя (например, \n) между командами.Затем просто разделите буфер по символу разделителя.Недостатком является то, что вам нужно опросить, но было бы просто запатентовать обратный вызов в библиотеку.

...