|
|
  |
Нарушается порядок приема данных Mob |
|
|
|
Dec 1 2012, 14:02
|

Знающий
   
Группа: Участник
Сообщений: 626
Регистрация: 3-12-07
Пользователь №: 32 910

|
Отсылаются данные в цикле. (AT90CAN128) Опрашиваю свободные Mob по состоянию из CANEN. Загружаю в свободный данные и отправляю.
На приемной стороне порядок следования перемешивается. Отправленный ранее моб извлекается позже, данные не теряются, тестовый последовательный счётчик выглядит так: ...0, 2, 1, 3, 6, 4, 5 итд. Вопрос, надо ли софтово сортировать данные из приемных мобов по штампу времени прихода или это происходит аппаратно? Может что-то не верно сконфигурил?
--------------------
|
|
|
|
|
Dec 5 2012, 08:43
|
Местный
  
Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315

|
Не скажу точно про AT, А в Silabs сделано так: есть 32 буфера, часть из них настраивается на прием, часть на передачу. Так вот при передаче данных наибольшей приоритет имеет буфер с меньшим номером. Если в буфера пачкой записать 3-4 сообщения, а потом (скажем по прерыванию от передатчика) дописывать в освободившиеся. то получиться аналогичная картина. Пример пусть буфера 1,2,3,4 содержат для отправки сообщения с соответствующими контрольными счетчиками. После передачи данных в канал из буфера 1 возникает прерывание, если в этом прерывании искать освободившийся буфер и записать в него следующее сообщение (а это будет буфер 1 со счетчиком 5), то будет следующее: поскольку уже началась передача из буфера 2, тогда сперва отправиться сообщение с номером 2, затем сообщение из буфера 1, как более приоритетного, с номером 5. На приемной стороне и получиться, что сообщения отправлены все, но порядок их прихода не соответствует порядку передачи (точнее записи в CAN контроллер). Может это наведет на мысли по аналогии. Поскольку это относится к SiLabs/
--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
|
|
|
|
|
Dec 5 2012, 08:54
|

Знающий
   
Группа: Участник
Сообщений: 626
Регистрация: 3-12-07
Пользователь №: 32 910

|
Да... именно так. Если оправлять unsigned char счётчик, загружая по 1 байту в Mob(0) сразу отправляя его. И затем ждать пока передатчик его отправит, то всё работает абсолютно правильно. Но если не дожидаться окончания отправки и начинать загружать следующий тик счётчика в Mob(1) и т.д., то в зависимости от различных факторов, данные на приемной стороне начинают перемешиваться.... вот засада. По идее, приемник как-то должен аппаратно сортировать данные или нет? Иначе получается серьёзная загрузка ядра на приемной стороне.
Сообщение отредактировал sevstels - Dec 5 2012, 08:55
--------------------
|
|
|
|
|
Dec 7 2012, 07:16
|
Местный
  
Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315

|
Цитата Вернее заполнить можно, но запускать на передачу нельзя... хитрый менеджер отправки надо писать. А еще этот менеджер должен будет помнить последовательность в которой он заносил данные: 1- пакет в 3-й Mob попал, 2-й в 4-й, 3-й в 6-й Если других передач нет, то можно использовать все Mоb, а в менеджере смотреть, все свободны, тогда запускаем новую партию посылок (максимально заполнить по порядку). Если помимо нумерованых пакетов надо отправлять еще и прочие данные, тогда проще реализовать менеджер с параметром - отправлять через фиксированный Mob для нумерованых пакетов, все прочие данные через любой свободный. Я бы реализовывал второй вариант.
--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
|
|
|
|
|
Jan 9 2013, 17:07
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 27-10-08
Пользователь №: 41 225

|
Вы еще учтите что у вас на линии может стоять репитер, который будет ложить все принятые сообщения по своим буферам, и тоже будет их перемешивать. Без нумерации пакетов, в многопакетной посылке никак.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|