Сериальное

Jul 23, 2021 16:25

Нужен отдельный котёл для эмбеддеров, делающих фрейминг в serial link (будь то uart или еще что-то) тупо на счётчике байтов, без какого либо стаффинга. Зато там црц есть. Если удастся его найти в потоке-то.

This entry was originally posted at https://ex0-planet.dreamwidth.org/102228.html. Please comment there using OpenID.

программизм, терминальное

Leave a comment

Comments 27

nicka_startcev July 23 2021, 13:56:56 UTC
в смысле, для тех, кто "а зачем синхру ловить"?

зыЖ но есть и более дикий грех - в определенном месте посылки поднимать/опускать какой-нибудь rts/dtr/ring итп. (привет буферизации в уртах и в ос)

Reply

ex0_planet July 23 2021, 14:31:12 UTC
В смысле да, зачем вообще синхра - что в блютухе что в усб и так коррекция ошибок есть же, зачем еще что-то.

То что линк может _порваться_ в середине пакета, оставив другую сторону в непонятном состоянии - не, не слышали.

RTS/DTR - это ж для всяких кривых недоимплементаций RS-485 в основном, да? Это слава богу научились лечить - доступностью нормальных мостов, в основном, но тем не менее. Давно уже не видел такого.

Reply

nicka_startcev July 23 2021, 17:30:21 UTC
>То что линк может _порваться_ в середине пакета

или линк не точка-точка, а на условной шине сидит больше пары устройств, и к кому-то из них может придти ПЦ или прийти космическая частица на стопицот МЭв, которая заткнет или стартанет передачу в произвольный момент.

а, да, еще совершенно комическая, но таки реальная ситуация - изготовитель говорит, что у него оптроны медленные и "115200" не тянут, но в плане эксперимента можно попробовать. по другой версии со стороны того же устройства - там наэкономили на центральном процессоре и на программистах. но итог тот же - иногда теряются фрагменты пакетов (если смотреть с точки зрения софта высокого уровня)

Reply

ex0_planet July 23 2021, 18:25:35 UTC
оптроны медленные

Ебануться, извините мой французский, там что, 4N35?

6N137 сто лет в обед, а лучшая в мире микроэлектронная промышленность до сих пор не освоила аналога? Это же про "импортозамещение" речь, я правильно понимаю?

Reply


metaclass July 23 2021, 16:00:22 UTC
Пидарасы, чтобы их разорвало всех.
Хуже этого только сделать еще внутренний стейт, который невозможно сбросить иначе как выключением питания.

Reply

ex0_planet July 23 2021, 16:22:52 UTC
А это и будет скрытый стейт - в моём конкретном случае там даже не CDC, а тупо силабсовский мост. Если программа на писишке упадёт, то просто байты перестанут приходить, и для перезапуска надо будет натолкать ровно столько сколько не успело пройти :)

Хуже другое - видя ебанину, тиражируемую из проекта в проект, начинаешь сомневаться в собственной адекватности....

Reply

nicka_startcev July 23 2021, 17:49:05 UTC
>видя ебанину, тиражируемую из проекта в проект, начинаешь сомневаться в собственной адекватности....

это первый шаг. потом сомнения перерастают в отрицание чего-то другого, потом в уверенность в чем-то третьем.

но вообще - да, тиражируемая ебанина - сильно демотивирует, как и типовая пиздецома получаемая из типового кроилова при типовых вводных. причем, с ТЗ разных ролей в проекте, ебанина-пиздецома будет сильно разной

Reply

nicka_startcev July 23 2021, 17:45:30 UTC
о. а тут смежный вопрос.

когда-то давно, когда усб2.0 только-только пришел на смену усб1.1, я допиливал чужой усб-стек и читал всякие даташиты на разные участки потрохов этого уёбищного порождения корпораций и комитетов.

так вот. если мне склероз не изменяет, чуть ли не со времен мертворожденного 1.0 у усб есть управление питанием и "более верхний софт" может отключить питание конкретного порта хаба. именно обесточить порт, а не пожелать устройству войти в спящий режим.

так вот, интересно, хоть где-то это работает и хоть где-нибудь стабильно и воспроизводимо можно "стандартно по стандарту УСБ" обесточить клиента, подождать, подать напряжение и итого получить хард-ресет?

Reply


bigmaxx July 23 2021, 18:28:29 UTC
Я бы сказал, там проблема только в синхронизации начала кадра (и то лишь при бинарной передаче). Конец, на крайняк, можно и на счётчике, если есть грамотно реализованный тайм-аут и обработка прочих ошибок физического уровня. Но вообще-то, всё это должно быть описано в спецификации протокола, самодеятельностью в таких вопросах лучше не заниматься.
ЗЫ: вообще упустил, что сейчас в большинстве случаев Serial не физический, а эмулированный. Сам я, когда что-то делаю, всегда по старинке подразумеваю, что он физический.

Reply

ex0_planet July 23 2021, 18:41:04 UTC
Это именно что самодеятельный бинарный протокол. Без оглядки на всё что делалось в индустрии предыдущие N лет.

Таймауты... ну, я бы сказал что грамотный фрейминг не сложнее плясок с таймаутами. Можно и на таймаутах, конечно, и в большинстве случаев всё будет работать потому что пакет скорее всего пролезет в буфер целиком и прочее в таком духе, но вообще это наслоения текущих абстракций. И когда это сломается, никто не будет разбираться - "просто передёрните питание".

Reply

bigmaxx July 23 2021, 18:59:27 UTC
Я имел в виду, тайм-аут не для определения окончания пакета, а для выявления нештатной ситуации, когда надо прервать его прием.

Reply

ex0_planet July 23 2021, 19:16:31 UTC
А какой здесь должен быть таймаут?
Ну вот послали мы заголовок "щас пришлю картинку", потом полезли за картинкой в память, а она возьми да и засвопься. Вот и таймаут. А потом утилита наваливает в ничего не подозревающую стейт машину какие-то байты.

Сам дурак и надо было ставить ssd?

Reply


nicka_startcev July 23 2021, 18:43:20 UTC
итого, копнули что-то просто кривоватое, а по ходу вскрытия вскрылись бездны ада? :) 8(

Reply

ex0_planet July 23 2021, 18:48:36 UTC
Да ну, просто программисты всегда рады потрещать о том, какой хуевый код пишут другие программисты.

Работает же оно как-то.... до первого сбоя. Просто мне это всё живо напомнило из другой области: "Не надо ничего чинить - просто сделай чтобы оно завелось".

Reply

nicka_startcev July 23 2021, 20:25:17 UTC
имхо, не подумал, не прикинул...

>программисты всегда рады потрещать о том, какой хуевый код пишут другие программисты.

иногда выдают свои оценки за "сделать лучше", и иногда делают лучше. и это систематически повторяется. и типа-менеджер может это увидеть и оценить медианно, средне, или "идеально повезет".

а вообще, если погромисты декларируют "умею пахать от забота до заката, хочу Ъ денег за час", если упоротые-менеджеры декларируют "за Ъ денег сделаю ПРОЕКТ, и выплачу по Ё,Ы,Ф часов трем погромистам", то.. то какого хуя менеджеры пытаются привсунуть программистам ответственность "за рас" кроме типично программистской "я оценил напряг за час, оценил задачу в часах. наверное. примерно"

плюс

Я ПРОГРАММИСТ ОЦЕНИЛ ЗАДАЧУ В ъ ЧАСОВ, ТЫ, МЕНЕДЖЕР, ОЦЕНИЛ ЭТУ ЗАДАЧУ И МОИ УМЕНИЯ В ъ*й ЧАСОВ, ТЫ ВЗЯЛ С ЗАКАЗЧИКА Ъ*й*й ДЕНЕГ, ТАК КАКОГО ХРЕНА РИСК ОЦЕНКИ ЦЕНЫ - ЭТО МОЙ А НЕ ТВОЙ РИСК

Reply

ex0_planet July 23 2021, 21:41:10 UTC
Скорее "и так сойдет". Там это далеко не единственный WTF.

Ну и любой кодосрач - это, в самом позитивном случае, борьба за дальние цели, вроде технического долга. В то время как KPI и прочие эстимейты - средне- и краткосрочные, и в идеальном случае пересекаться они не должны.

Reply


Leave a comment

Up