eddy_em: (Костерок)
[personal profile] eddy_em
Добавил в коллекцию еще один сниппет.
Казалось бы, в USART через DMA ничего особенного нет, но по сравнению с STM32F103 у нулевой серии есть замечательное прерывание USART: "character match".
В этом примере DMA организует прием-передачу данных (причем на прием стоит двойная буферизция), а прерывание character match позволяет определить, было ли окончание строки. Если было, то выставляется соответствующий флаг и буфера меняются местами; если же не было, то при переполнении буфера DMA прием возобновляется в тот же буфер и выставляется флаг overflow.
Принятая строка возвращается обратно "задом наперед", а каждые ~5 секунд выводится еще и надпись "dummy text". Например, если написать
Привет
Аргентина манит негра
1234567
на выходе получим:
тевирп
dummy text
арген тинам анитнегрА
dummy text
7654321

Date: 2017-01-15 02:37 pm (UTC)
From: [identity profile] hrun-morjov.livejournal.com
page not found однака!

Date: 2017-01-15 02:51 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Поправил.

Date: 2017-01-15 05:29 pm (UTC)
From: [identity profile] mbr.livejournal.com
А нахрена? Мне казалось всегда самой адекватной разборка по двум таймаутам - начала посылки и межсимвольного интервала. Высосал блок, раскидал по строчкам и работай. А тут улетит у тебя \n по ошибке и жди второго пришествия.

Date: 2017-01-15 05:37 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Да и насрать. Если ответа не будет, хост еще раз запрос отправит.

Date: 2017-01-15 05:38 pm (UTC)
From: [identity profile] mbr.livejournal.com
И будет переполнение буфера. В любом случае - только с третьего раза получишь пакет. Говнокод же.

Date: 2017-01-15 05:41 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Ты себе можешь представить ситуацию, когда '\n' потеряется? Я — нет. Потому как если будет столько шумов, то и больше вероятность, что всякий бред будет в запросах-ответах идти, чем запросы теряться!

Date: 2017-01-15 05:46 pm (UTC)
From: [identity profile] mbr.livejournal.com
Да. Протокол допускает это, контроля передачи пакетов нет. То, как ты это делаешь - в большинстве своем работать будет. Но это говнокод.

Date: 2017-01-15 06:50 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
В любом случае тебе нужен какой-то символ конца строки. Если он испорчен, получится черт-те что. Так что, можешь любую реализацию обмена данными говнокодом назвать.

Date: 2017-01-15 06:53 pm (UTC)
From: [identity profile] mbr.livejournal.com
Ты вообще про OSI в курсе? Да, естественно, если блок поврежден и нет уведомления об этом, нужно отправлять заново по тайм-ауту. Но в твоем алгоритме ошибка повторится дважды. А это - говнокод. Разбираешь по таймингам, дальше парсишь тело.

Date: 2017-01-15 07:05 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Давно про OSI читал, забыл уже.
> по тайм-ауту
Ты где-нибудь такую реализацию взаимодействия по USART видел? Покажи! Тот еще геморрой будет эти таймауты соблюдать...

В моей первой (еще на PICах) реализации СУ спектрографом со стороны ПК была функция ten_times_read. Угадай, зачем :)

Date: 2017-01-15 07:11 pm (UTC)
From: [identity profile] mbr.livejournal.com
Гыг. Во первых тайминги прописаны в любом уважающем себя протоколе. Во вторых, тот же winapi. Про линукса не скажу, я через кросс-платформенный код пишу, но там, скорее всего, также.

Date: 2017-01-15 07:27 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Ты пример приведи нормальный рабочий. И не винапи, это ублюдство вообще постыдился бы в пример приводить!

Date: 2017-01-15 07:53 pm (UTC)
From: [identity profile] mbr.livejournal.com
Оба протокола поверх уарта с которыми я работаю постоянно, используют межсимвольный тайм-аут для определения границ фрейма.

1. Modbus RTU. См. MODBUS Message RTU Framing. Там указано 3.5 символа, после которых возникает тайм-аут.
2. ISO7816. См ГОСТ7816, часть 3. Там ужасный перевод ISO, но само ISO в открытом виде не распространяется. При блочном протоколе T=1 используется межсимвольный интервал, значение задается в начальных параметрах карты - ATR.

Промышленных протоколов поверх уарта, которые НЕ используются тайминги мне неизвестно.

Date: 2017-01-15 07:56 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Ты мне реальное что-нибудь покажи. Скажем, общение с GPS- или GSM-модулем с использованием таймаутов. Там же и задержки ненормированные, и длина строк. А у GPS еще и данные периодически сыплются помимо ответов на запросы...

Date: 2017-01-15 07:59 pm (UTC)
From: [identity profile] mbr.livejournal.com
Что значит реальное? Я тебе два промышленных стандарта привел. Тебе мало?

Date: 2017-01-15 08:36 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Для "промышленного стандарта" я бы CAN выбрал и не парился. А чтобы со всяким ширпотребом вроде GPS/GSM общаться, модбасы не подойдут!

Date: 2017-01-15 08:38 pm (UTC)
From: [identity profile] mbr.livejournal.com
Не увиливай. Мы про уарт говорим. Как сделать правильно и как сделать на отъебись.

Date: 2017-01-15 08:39 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Тогда и ты не увиливай. Покажи пример кода, работающего с GPS или GSM, где прием/передача по таймингам идет, а не разбором построчно.

Date: 2017-01-15 08:42 pm (UTC)
From: [identity profile] mbr.livejournal.com
Причем тут gsm и gps? Я что тебе за всех говнокодеров должен отвечать? Я тебе привел два промышленных стандарта, где идет разбор по таймингам. Или обмен с китайским gps стал промышленным стандартом?

Date: 2017-01-15 08:45 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
На кой черт мне твой модбас сдался? Если мне нужно будет что-то "промышленное" соединять, я как минимум CAN использую (а лучше не заморачиваться, и вообще ethernet), а USART — он как раз для связи со всякими китайскими ширпотребными модулями. Как, впрочем, и всякие I2C, SPI и им подобная шелуха.

Date: 2017-01-15 08:47 pm (UTC)
From: [identity profile] mbr.livejournal.com
> Ты где-нибудь такую реализацию взаимодействия по USART видел? Покажи!

Показал? Еще вопросы будут?

May 2025

S M T W T F S
    123
45678910
11121314151617
1819202122 2324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 23rd, 2025 01:37 pm
Powered by Dreamwidth Studios