adnega 11 22 июля Опубликовано 22 июля · Жалоба 2 минуты назад, jcxz сказал: Не очень понятно - что мешает отправить в нужном порядке? Что гарантирует прием в нужном порядке? Отправить не проблема. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 231 22 июля Опубликовано 22 июля · Жалоба 5 минут назад, adnega сказал: Можно часть ID выделить под счетчик (размером не менее числа mailbox на приемной стороне). Если протокол позволяет) Можно выделять можно и не выделять. Так как при отправке хвостовой (или головной) кадр пакета кадров можно отправить последним. Сам делал такой протокол. Без дополнительных счётчиков. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 22 июля Опубликовано 22 июля · Жалоба 3 минуты назад, jcxz сказал: Приёмная сторона примет их точно в том порядке, в котором они будут передаваться по шине. Ибо - другое невозможно по определению. Примет, разложит по mailbox`ам. Как узнать какой mailbox принят раньше? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 51 22 июля Опубликовано 22 июля · Жалоба 7 minutes ago, Arlleex said: Хреновенько. Жаль. Тогда буду отводить байт под некий счетчик последовательности и остальные 7 байт юзать под данные. Велосипед с треугольными колесами v100500 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 231 22 июля Опубликовано 22 июля · Жалоба 1 минуту назад, adnega сказал: Что гарантирует прием в нужном порядке? Отправить не проблема. В смысле? А почему они должны приняться не в том порядке, в котором следуют по шине? Никаких роутеров, с ретрансляцией очевидно у ТС-а на шине нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 51 22 июля Опубликовано 22 июля · Жалоба 2 minutes ago, jcxz said: В смысле? А почему они должны приняться не в том порядке, в котором следуют по шине? Никаких роутеров, с ретрансляцией очевидно у ТС-а на шине нет. Хорошая теория. Но в жизни - иначе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 231 22 июля Опубликовано 22 июля · Жалоба 9 минут назад, adnega сказал: Примет, разложит по mailbox`ам. Как узнать какой mailbox принят раньше? Зависит от конкретного МК и от протокола. Могу сказать как в XMC4xxx. Надо? В XMC4xxx достаточно для каждого mailbox-а указать маску адреса - какие CAN-ID в него принимать. А если все кадры - с одинаковыми CAN-ID, то можно например соединить mailbox-ы в цепочку FIFO. Которое будет заполняться по порядку. Ну и другие способы можно придумать.... например - при помощи DMA и FIFO уже в общей памяти. Хотя для XMC4700, с его 256 майлбоксами, это не нужно. Это уж не говоря о том, что можно просто тупо реагировать на каждое прерывание о приёме каждого нового кадра. И делать всё программно. 6 минут назад, x893 сказал: Хорошая теория. Но в жизни - иначе. А как в жизни - расскажете? У вас биты по CAN гуляют сами по себе, куда вздумается? 11 минут назад, x893 сказал: Велосипед с треугольными колесами v100500 Кроме пустых общих фраз, есть что по делу сказать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 22 июля Опубликовано 22 июля · Жалоба 5 минут назад, jcxz сказал: А как в жизни В жизни ни у всех есть аппаратный FIFO. У многих это просто три коробки. При приеме пакета выставляется флаг. Далее в обработчике смотришь какая коробка заполнена и помещаешь содержимое в программный FIFO. Бывает, что заполнено сразу несколько коробок - и вот это не гарантирует порядок пакетов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 231 22 июля Опубликовано 22 июля · Жалоба 1 минуту назад, adnega сказал: В жизни ни у всех есть аппаратный FIFO. У многих это просто три коробки. При приеме пакета выставляется флаг. Далее в обработчике смотришь какая коробка заполнена и помещаешь содержимое в программный FIFO. Бывает, что заполнено сразу несколько коробок - и вот это не гарантирует порядок пакетов. Тогда: 9 минут назад, jcxz сказал: Это уж не говоря о том, что можно просто тупо реагировать на каждое прерывание о приёме каждого нового кадра. И делать всё программно. не пропуская прерываний. Или вместо прерываний - DMA. Ну или действительно - выделить часть CAN-ID под индекс кадра внутри мульти-кадра. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 59 22 июля Опубликовано 22 июля · Жалоба On 7/22/2024 at 3:44 PM, x893 said: Это если SDO blob transfer. CiA 301 7.2.4.3.10 Protocol SDO block download sub-block 7.2.4.3.14 Protocol SDO block upload sub-block Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 22 июля Опубликовано 22 июля · Жалоба Кста, я когда звук поверх CAN в низкоприоритетном потоке передавал сделал просто передачу четных и нечетных выборок в соседних пакетах. Т.е. при потере пакета просто полоса сигнала резалась. И, вроде, был у меня tog-бит в ID.. Но там можно было пакет потерять) И частота была небольшая, что несколько боксов с этим ID не забивались) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 59 22 июля Опубликовано 22 июля · Жалоба On 7/22/2024 at 3:50 PM, Arlleex said: Хреновенько. Жаль. Тогда буду отводить байт под некий счетчик последовательности и остальные 7 байт юзать под данные. https://en.wikipedia.org/wiki/ISO_15765-2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 51 22 июля Опубликовано 22 июля · Жалоба 18 minutes ago, jcxz said: не пропуская прерываний. Или вместо прерываний - DMA. DMA для CAN не везде есть Прерывания никто и не пропускает. Но это не помогает. 32 minutes ago, jcxz said: А как в жизни - расскажете? У вас биты по CAN гуляют сами по себе, куда вздумается? В жизни есть протоколы (canopen/ isobus / ...), для коня в вакууме делайте как хотите. Мне в вакууме не надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 231 22 июля Опубликовано 22 июля · Жалоба 1 минуту назад, x893 сказал: Прерывания никто и не пропускает. Но это не помогает. Почему не помогает? Если в МК имеется 2+ шт. MO для приёма, то этого достаточно для двойной буферизации. И если не пропускать прерывания, то порядок приёма не будет нарушен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 59 22 июля Опубликовано 22 июля · Жалоба On 7/22/2024 at 3:50 PM, Arlleex said: Хреновенько. Жаль. Тогда буду отводить байт под некий счетчик последовательности и остальные 7 байт юзать под данные. Заюзайте CAN-FD, а лучше CAN-XL Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться