реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
Огурцов
сообщение Feb 6 2016, 22:18
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



как наименьшими телодвижениями организовать приём пакетов ?
пока видится только один вариант - сделать все пакеты одинаковой длины
но даже он не решает полностью - может прийти полпакета или наоборот, больше
после чего остальные пакеты перестанут попадать на границу и прерывание будет вызываться не по концу пакета, а где-то по середине
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Feb 7 2016, 05:52
Сообщение #2


фанат дивана
******

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



Если это STM32, то добавьте прерывание по IDLE.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 7 2016, 06:48
Сообщение #3


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Задавайте в начале каждого пакета его длину.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Feb 7 2016, 07:09
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Для любого МК:
При старте rx-DMA, кроме разрешения прерывания по окончанию DMA-транзакции, запустить ещё выдержку времени таймаута, по окончании которого, принудительно останавливать DMA-транзакцию (с определением кол-ва фактически принятых данных).
Таймаут можно отслеживать также в каком-либо периодическом прерывании.
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 7 2016, 07:36
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



А лучше без всяких DMA передавать человеческим текстом "var=val" и разделять "\r\n". Так отлаживать удобнее: подцепил терминал - и всё сразу видно.
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Feb 7 2016, 08:47
Сообщение #6


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(scifi @ Feb 7 2016, 08:36) *
лучше без всяких DMA

на 10 мегабит прерывания уже зашиваются



Цитата(ViKo @ Feb 7 2016, 07:48) *
Задавайте в начале каждого пакета его длину.

т.е. я должен запустить дма, принять второй-третий байт, остановить, дма, перепрограммировать счётчики, запустить дма... ?
за это время уже не один пакет проскочит
и ведь главное, это никак не защищает от битых пакетов и зависоне на ожидании "всех" данных
Go to the top of the page
 
+Quote Post
jcxz
сообщение Feb 7 2016, 08:58
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 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 и в помине нет.....
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Feb 7 2016, 09:14
Сообщение #8


Гуру
******

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 7 2016, 09:41
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Можно посмотреть на LIN. Там есть Break.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 7 2016, 13:30
Сообщение #10


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Огурцов @ Feb 7 2016, 11:47) *
т.е. я должен запустить дма, принять второй-третий байт, остановить, дма, перепрограммировать счётчики, запустить дма... ?
за это время уже не один пакет проскочит
и ведь главное, это никак не защищает от битых пакетов и зависоне на ожидании "всех" данных

передавайте сначала заголовок пакета, в нем размер. По нему настройте ПДП. А затем передавайте сам пакет.
От зависона спасут таймауты.
Go to the top of the page
 
+Quote Post
mantech
сообщение Feb 7 2016, 13:45
Сообщение #11


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(Огурцов @ Feb 7 2016, 12:14) *
UART - не лучший выбор для 10-мегабитного потока.

какой же лучший ?


Ethernet? например laughing.gif

ЗЫ. В любом случае даже если это и уарт или спи, в режиме дма, при таких скоростях нужно делать пакетно ориентированную передачу данных с пакетами фиксированной длины, либо передавать несколько пакетов кратной длины.

Сообщение отредактировал mantech - Feb 7 2016, 13:49
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Feb 7 2016, 15:08
Сообщение #12


фанат дивана
******

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



Цитата(Огурцов @ Feb 7 2016, 14:14) *
а будет ли работать в многопроцессорном режиме ? когда в один пакет заряжено несколько субпакетов для слейвов ?

Разлеплять склеенные пакеты и собирать пакеты из кусочков - это уже другой уровень. IDLE просто позволяет не зависнуть в ожидании пакета, если байтов поступило меньше, чем ожидается. В принципе, это просто частный случай тайм-аута.
Буфер побольше, прерывания на пол-буфера, на полный буфер, и на IDLE. По любому из этих прерываний - разгребаем принятое.
Вот тут коллега выкладывал пример. Я применял такой подход на скорости 5МБит, сбоев не было. На 10 МБит были редкине сбои, возможно, проблемы линии связи. Выяснять не стал, спустился на 5МБит, хватило. Вот мой вариант.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Feb 7 2016, 16:33
Сообщение #13


Гуру
******

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
jcxz
сообщение Feb 7 2016, 16:37
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Огурцов @ Feb 7 2016, 22:33) *
мне надо 62.5 килопакета в секунду, а на эзернете реально получается где-то 25, при 100% загрузке
и ещё его нет в бюджетных камнях

SPI спасёт отца русской демократии?
Спокойно работает на десятках МГц на бюджетных CM3/4.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Feb 7 2016, 17:45
Сообщение #15


фанат дивана
******

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



Цитата(Огурцов @ Feb 7 2016, 21:33) *
тут вопрос в другом - будет ли генерироваться idle, если внутри пакета придёт новый адреса слейва ?
было бы правильнее иметь прерывание именно по смене адреса, что абсолютно однозначно указывает на конец пакета

Так включите и это прерывание, одно другому не мешает.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st June 2025 - 05:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01549 секунд с 7
ELECTRONIX ©2004-2016