ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
9 мая
1517097 Топик полностью
VLLV (Сегодня, 06:04, просмотров: 33) ответил Lem на Наверное я плохо формулирую + видимо влияет то, что я разным людям в разных местах отвечаю. Нет, значение с АЦП берётся по таймеру(в обработчике прерываний), в том же таймере данные эти значения заносятся в область данных объекта сообщений, который настроен на передачу, а передаёт он их по запросу из вне. Так что да, он берёт последнее значение АЦП, которое измеряется в цикле(ну только это не основной цикл main). Я пробовал имитировать показания скорости (вместо показаний с
Отлично, прогресс. Датчик ни при чём, АЦП ни при чём. "Если шлю константу - то всё нормально, если шлю медленно меняющийся сигнал видны сбои". Чисто программный баг. Сопоставить полученную сбойную информацию с отправленной можно? Допустим вместо 1000 приходит 1256, значит та самая "атомарность доступа", о которой пишет Nikolay_Po. Вот подозрительное место "значение с АЦП берётся по таймеру(в обработчике прерываний), в том же таймере данные эти значения 

заносятся в</i>

область данных объекта сообщений</i>". Область данных, насколько я понимаю, это массив байтов, в случайное относительно передачи время в пакет для отправки кладётся ПОБАЙТНО значение для отправки. Идет передача, отправили один байт данных, а тут приходит прерывание, и значение обновилось, а там произошел перенос из младшего байта в старший, значение было 0xff, стало 0x100, а в канал ушло 0x1ff. Нужно копировать данные через промежуточный буфер и запрещать одновременный доступ к нему из двух мест. Ну или что-то еще, но для начала стоит проверить эту версию.