Я использую встроенную систему для отправки данных с 25 датчиков на замазочный терминал на моем компьютере. Прекрасно работает.
Я хотел добавить функцию чтения из терминала во встроенную систему (чтобы я мог отправлять команды). Поэтому я попытался использовать getchar(), чтобы прочитать все, что я напишу на своем терминале шпатлевки. Сначала я просто хотел получить char и распечатать символ обратно на замазке. Это вроде работает, но данные моего датчика, которые должны печатать каждые 500 мс, не печатаются, пока я не наберу символ в замазке. Это как если бы мой код застрял на getchar() и застрял в цикле while, пока getchar() что-то не прочитает.
Вот мой вечный цикл в моем int main(). Я не делюсь остальным, так как он на самом деле не нужен и слишком громоздкий (это просто инициализация модулей). В этом цикле я считываю датчик, пытаюсь прочитать из замазки, записываю в замазку и начинаю следующее сканирование:
for(;;)
{
CapSense_ProcessAllWidgets(); // Process all widgets
CapSense_RunTuner(); // To sync with Tuner application
read_sensor(curr_elem); //read curr_elem
(curr_elem < RX4_TX4)?(curr_elem++):(curr_elem = 0, touchpad_readings_flag++);
// Here is the part to read I added which blocks until I type in something.
// If I remove this if and all of what's in it, I print to putty every 500ms
if(touchpad_readings_flag)
{
char received_char = getchar();
if (received_char) //if something was returned, received_char != 0
{
printf("%c", received_char);
}
}
//Here I write to putty. works fine when I remove getchar()
if (print_counter_flag && touchpad_readings_flag)
{
print_counter_flag = 0;
touchpad_readings_flag = 0;
for (int i = 0; i < 25; i++)
{
printf("\n");
printf("%c", 97 + i);
printf("%c", val[i] >> 8);
printf("%c", val[i] & 0x00ff); // For raw counts
printf("\r");
}
}
/* Start next scan */
CapSense_UpdateAllBaselines();
CapSense_ScanAllWidgets();
}