Используйте события UART с Simplelink в Contiki-ng

На самом деле я пытаюсь получить сообщение последовательной линии, используя UART0 CC1310 с Contiki-ng.

Я реализовал функцию обратного вызова uart, которая сгруппирует все полученные символы в одну переменную и прекратит сбор, когда получит символ «\n».

      int uart_handler(unsigned char c)
{
  if (c == '\n')
  {
    end_of_string = 1;
    index = 0;
  }
  else
  {
    received_message_from_uart[index] = c;
    index++;
  }
  return 0;
} 

uart0 инициализируется в основном и единственном процессе системы, а затем ожидает в бесконечном цикле while, пока не установится флаг end_of_string.

      PROCESS_THREAD(udp_client_process, ev, data)
{

  PROCESS_BEGIN();
  uart0_init();
  uart0_set_callback(uart_handler);

  while (1)
  {
    //wait for uart message
    if (end_of_string == 1 && received_message_from_uart[0] != 0)
    { 
      LOG_INFO("Received mensaje\n");

      index = 0;
      end_of_string = 0;

      //  Delete received message from uart
      memset(received_message_from_uart, 0, sizeof received_message_from_uart);
    }
    etimer_set(&timer, 0.1 * CLOCK_SECOND);
    PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&timer));
  }
  PROCESS_END();
}

Как видите, цикл while останавливается на каждой итерации с минимальным временем события таймера. Хотя этот метод работает, я думаю, что это плохой способ, так как я читал , что существуют события uart, которые можно использовать, но я не смог ничего найти для CC1310.

Можно ли использовать UART CC1310 (или любой другой платформы simplelink) с событиями и прекратить выполнение ненужных итераций, пока сообщение не достигнет устройства?

0 ответов

Другие вопросы по тегам