#2
Сообщение
Boroda » 22.05.2016{, 23:09}
Ковыряюсь дальше. Поспешил я с выводами...
Блок "детектор изменения строки" работает корректно, выход "новые данные" тоже. При приеме четырех байт моргает четыре раза (если в данных есть не нулевой байт). Теперь создадим такую ситуацию: отправим с железного UARTa на софтовый четыре байта STRINGом (0x10,0x00,0xD7,0xF5) и отправим обратно на софтовый для контроля на ПК.
1. отправляем (0x10,0x00,0xD7,0xF5), получаем (0x10,0x00,0x06,0x00), далее меняем данные.
2. отправляем (0x10,0x01,0xD7,0xF4), получаем (0x10,0x01,0xD7,0xF4), далее меняем данные.
3. отправляем (0x10,0x00,0xD7,0xF5), получаем (0x10,0x00,0xD7,0xF4), далее меняем данные.
4. отправляем (0x10,0x02,0xD7,0xF7), получаем (0x10,0x02,0xD7,0xF7), далее меняем данные.
5. отправляем (0x10,0x06,0xD7,0xF3), получаем (0x10,0x06,0xD7,0xF3), далее меняем данные.
6. отправляем (0x10,0x00,0xD7,0xF5), получаем (0x10,0x00,0xD7,0xF3).
Почему-то все байты после нулевого берутся из предыдущей посылки, только если в данных присутствует ноль. Хотя буфер UART очищается после каждого приема.
Код приемника:
ok = false; // данные не пришли
out1 = 0; // обнуляем выходные данные
out2 = 0;
out3 = 0;
out4 = 0;
if ( en ) // пришли новые данные от блока UART?
{
if (in.length() == 4) // длина строки = 4 ?
{
out1 = byte( in.charAt(0) ); // вытаскиваем по одному байту из строки
out2 = byte( in.charAt(1) );
out3 = byte( in.charAt(2) );
out4 = byte( in.charAt(3) );
ok = true; // флаг "данные пришли"
in = String("");
}
}
Проект в приложении.
-
Вложения
-
- Bad_uart_null.rar
- (67.92 КБ) 91 скачивание
Последний раз редактировалось
Boroda 24.05.2016{, 10:04}, всего редактировалось 1 раз.