Я использую встроенную систему для отправки данных с 25 датчиков на терминал замазки на моем компьютере. Отлично работает.
Я хотел добавить функцию чтения из терминала во встроенную систему (чтобы я мог отправлять команды). Поэтому я попытался использовать getchar (), чтобы прочитать все, что я напишу на моем терминале замазки. Сначала я просто хотел получить char и напечатать символ обратно на шпатлевке. Это вроде работает, но данные моего датчика, которые должны печататься каждые 500 мс, не печатаются, пока я не наберу в замазке символ. Как будто мой код застрял в getchar () и застрял на некоторое время l oop, пока getchar () что-то не прочитает.
Вот мой навсегда l oop в моем int main (). Я не делюсь с остальными, потому что это не очень нужно и слишком громоздко (это просто инициализация модулей). В этом l oop я читаю датчик, пытаюсь прочитать из putty, пишу в putty и запускаю следующее сканирование:
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();
}