|
uart+dma |
|
|
|
Feb 7 2016, 08:47
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

|
Цитата(scifi @ Feb 7 2016, 08:36)  лучше без всяких DMA на 10 мегабит прерывания уже зашиваются Цитата(ViKo @ Feb 7 2016, 07:48)  Задавайте в начале каждого пакета его длину. т.е. я должен запустить дма, принять второй-третий байт, остановить, дма, перепрограммировать счётчики, запустить дма... ? за это время уже не один пакет проскочит и ведь главное, это никак не защищает от битых пакетов и зависоне на ожидании "всех" данных
|
|
|
|
|
Feb 7 2016, 08:58
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(scifi @ Feb 7 2016, 13:36)  А лучше без всяких DMA передавать человеческим текстом "var=val" и разделять "\r\n". Так отлаживать удобнее: подцепил терминал - и всё сразу видно. a) избыточный траффик; б) избыточные траты на парсинг. Да и вопрос был не про уровень протокола, а про уровень взаимодействия с железом. Цитата(Огурцов @ Feb 7 2016, 14:47)  на 10 мегабит прерывания уже зашиваются UART - не лучший выбор для 10-мегабитного потока. Ещё поди и на STM, где никакого FIFO и в помине нет.....
|
|
|
|
|
Feb 7 2016, 09:14
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

|
Цитата(AHTOXA @ Feb 7 2016, 06:52)  Если это STM32, то добавьте прерывание по IDLE. а будет ли работать в многопроцессорном режиме ? когда в один пакет заряжено несколько субпакетов для слейвов ? Цитата(jcxz @ Feb 7 2016, 09:58)  UART - не лучший выбор для 10-мегабитного потока. какой же лучший ? Цитата(jcxz @ Feb 7 2016, 09:58)  Ещё поди и на STM, где никакого FIFO и в помине нет..... поди stm как-то считал, что пара регистров у него таки есть, в один принимает, другой в это время читаем - чем не фифо ? Цитата(Огурцов @ Feb 7 2016, 10:05)  а будет ли работать в многопроцессорном режиме ? а чего бы ему и не работать, надо попробовать прерывания по смене адреса не хватает, вот тогда бы да
Сообщение отредактировал Огурцов - Feb 7 2016, 09:06
|
|
|
|
|
Feb 7 2016, 15:08
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(Огурцов @ Feb 7 2016, 14:14)  а будет ли работать в многопроцессорном режиме ? когда в один пакет заряжено несколько субпакетов для слейвов ? Разлеплять склеенные пакеты и собирать пакеты из кусочков - это уже другой уровень. IDLE просто позволяет не зависнуть в ожидании пакета, если байтов поступило меньше, чем ожидается. В принципе, это просто частный случай тайм-аута. Буфер побольше, прерывания на пол-буфера, на полный буфер, и на IDLE. По любому из этих прерываний - разгребаем принятое. Вот тут коллега выкладывал пример. Я применял такой подход на скорости 5МБит, сбоев не было. На 10 МБит были редкине сбои, возможно, проблемы линии связи. Выяснять не стал, спустился на 5МБит, хватило. Вот мой вариант.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Feb 7 2016, 16:33
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

|
тут вопрос в другом - будет ли генерироваться idle, если внутри пакета придёт новый адреса слейва ? было бы правильнее иметь прерывание именно по смене адреса, что абсолютно однозначно указывает на конец пакета Цитата(mantech @ Feb 7 2016, 14:45)  Ethernet? это очень медленный интерфейс с огромных оверхедом мне надо 62.5 килопакета в секунду, а на эзернете реально получается где-то 25, при 100% загрузке и ещё его нет в бюджетных камнях Цитата(mantech @ Feb 7 2016, 14:45)  фиксированной длины потенциально это можно, если бы оно только решало Цитата(ViKo @ Feb 7 2016, 14:30)  передавайте сначала заголовок пакета, в нем размер. По нему настройте ПДП. А затем передавайте сам пакет. нет
Сообщение отредактировал Огурцов - Feb 7 2016, 16:34
|
|
|
|
4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0
|
|
|