Jump to content

    
sigmaN

Посоветуйте что почитать по реализации протоколов

Recommended Posts

Всем привет!

Посоветуйте какое-нибудь годное чтиво по реализации разных протоколов(HDLC, PPP, TCP/IP и т.д.) на С/С++.
Какие-нибудь лучшие практики, шаблоны...  Конечные автоматы как люди делают в таких случаях(eстественно, с упором на встраиваемые системы. Так то про Boost.msm мы слыхали).
Правильная организация буферизации интересует в таких случаях, в условиях многопоточности особенно. Я обычно двойную буферизацию: писатель в пишет в один буфер, читатель читает из другого, ну и в критической секции только переключение этих буферов.

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

Share this post


Link to post
Share on other sites

Вот я давича смотрел исходники pppd https://github.com/paulusmack/ppp Что хорошего, светлого и умного можно почерпнуть из них?
Такое я и сам накодить могу. ИМХО это стиль девяностых(восьмидесятых??)

А чтобы вы лучше поняли мою позицию, я приведу тут чтиво, которое вчера нагуглил и перед сном успел полистать.
http://caxapa.ru/thumbs/726398/comms-protocols-cpp.pdf

Интересно, познавательно. Возникает желание попробовать, посмотреть, что там за бинарник получается...

Share this post


Link to post
Share on other sites
19.07.2020 в 02:36, sigmaN сказал:

Какие-нибудь лучшие практики, шаблоны...  Конечные автоматы как люди делают в таких случаях(eстественно, с упором на встраиваемые системы. Так то про Boost.msm мы слыхали).

Так для разных платформ будут разные возможности и ограничения - у кого-то 16 кбайт памяти хватает, а кому и 2 Мб мало.

Share this post


Link to post
Share on other sites
3 hours ago, HardEgor said:

Так для разных платформ будут разные возможности и ограничения - у кого-то 16 кбайт памяти хватает, а кому и 2 Мб мало.

Не, здесь ноги растут видимо из убежденности в универсальности плюсов. Дескать надо только классы да патерны хорошие придумать и дело пойдет. 
А то что  всякие comms-protocols-cpp не приближают к цели ни на миллиметр, как бы игнорируется.
Когнитивное искажение, словом.
Помочь тут может только время проведенное за изучением  https://github.com/paulusmack/ppp

Share this post


Link to post
Share on other sites
5 hours ago, AlexandrY said:

Не, здесь ноги растут видимо из убежденности в универсальности плюсов.

Ноги видимо растут из убежденности в незаменимости голого Си.  Дескать все эти классы и абстракции только код раздувают да память жрут..

5 hours ago, AlexandrY said:

А то что  всякие comms-protocols-cpp не приближают к цели ни на миллиметр, как бы игнорируется.

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

5 hours ago, AlexandrY said:

Когнитивное искажение, словом.

Надо бы аргументировать. Создаётся впечатление, что у вас когнитивное искажение в сторону Си) И компилятор вам не друг, а враг.

5 hours ago, AlexandrY said:

Помочь тут может только время проведенное за изучением  https://github.com/paulusmack/ppp

Я провел достаточно времени за изучением именно этого проекта. Выстрелить в ногу там себе можно 18 разными способами в каждом модуле )
Именно из-за отсутствия возможности сделать нормальные абстракции на Си - авторами пришлось повсеместно использовать препроцессор, мэйджик намберы и т.д.
На Си повсеместно приходится изобретать то this pointer то vtable то препроцессором костыли вставлять.

 

Я тоже тогда позволю себе дать вам рекомендацию по исправлению когнитивного искажения..
Когда-ниубдь на досуге попробуйте просто взять тот-же pppd и переписать на плюсах.
В качестве первого упражнения предлагаю следующее:
Если где-то видите, что в группу функций передаётся некое состояние в виде указателя на одну и ту-же структуру - делайте это классом. Структуру эту в класс, функции делайте членами каласса.
Спустя какое-то время вы сможете оценить тот факт, что благодаря this поинтеру это то-же самое(можете в ассемблер заглянуть) только лучше;) Лучше потому, что вы устанавливаете и контролируете инвариант в одном месте.
Ограничиваете область видимости до нужной. И так далее... Разделяй и властвуй ;)

Так, потихонечку можно будет и до свежих стандартов дойти и лично убедиться, что если на платформу есть компилятор с плюсов, то писать на голом си просто даже нет смысла.
Нет причин. Кроме, конечно, самоотверженной веры в универсальность и незаменимость Си.

 

 

P.S. немного не про эмбеддед конечно, но всё-же  https://youtu.be/wbZdZKpUVeg

Как вам такое? Тут тоже ни на миллиметр люди не приблизились к заветной мечте? )))
 

Share this post


Link to post
Share on other sites
16 minutes ago, sigmaN said:

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

О, спасибо. Вот так я и хотел написать. 

А мой любимый язык не С, а вот такой:
image.thumb.png.57267a17f3bed48ee1d7088d9f2779c6.png 

И думаю что без него вы ни одного юзабельного протокола не создадите. 
 

Share this post


Link to post
Share on other sites

Так я же с этого и начинал ))

On 7/18/2020 at 10:36 PM, sigmaN said:

Какие-нибудь лучшие практики, шаблоны...  Конечные автоматы как люди делают в таких случаях(eстественно, с упором на встраиваемые системы. Так то про Boost.msm мы слыхали).

 

Share this post


Link to post
Share on other sites
24 minutes ago, sigmaN said:

Так я же с этого и начинал ))

Не понял только при чем здесь конечные автоматы. 
Я показал язык диаграм состояний Stateflow. Конечные автоматы забудьте как страшный сон. 
Stateflow и FSM соотносятся приблизительно как C и ассемблер.

 

Share this post


Link to post
Share on other sites

А Вам шашечки или ехать?

Если ехать, то скажу как ремесленник: нет времени разрабатывать то, что уже разработано. Никто не оценит красоту Ваших личных исходников, которые Вы подсунули вместо хорошо работающих чужих.

Перфекционизм- это от безделья.

Share this post


Link to post
Share on other sites
56 minutes ago, Ruslan1 said:

Перфекционизм- это от безделья.

Но все-таки, очень хотелось бы иметь более легкий вариант lwIP. Да и для файловых систем что-нибудь поприличней vfat от Чена (хотя бы элементарную реализацию ext2).

Share this post


Link to post
Share on other sites
9 hours ago, Eddy_Em said:

Но все-таки, очень хотелось бы иметь более легкий вариант lwIP. Да и для файловых систем что-нибудь поприличней vfat от Чена (хотя бы элементарную реализацию ext2).

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

Например, про легкий вариант lwip: нужна действительно очень специальная ниша, если его модульности, доступной через систему дефайнов, не хватает.

 

Лично про себя скажу: часто бывает, что неприятие чужого возникает из-за непонимания. Кажется, что все там коряво и не так, и "да я за вечер лучше напишу", а на самом деле просто не понял, как этим механизмом пользоваться или вообще не знал что там это уже реализовано. 

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

Share this post


Link to post
Share on other sites
1 час назад, Ruslan1 сказал:

Лично про себя скажу: часто бывает, что неприятие чужого возникает из-за непонимания. Кажется, что все там коряво и не так, и "да я за вечер лучше напишу", а на самом деле просто не понял, как этим механизмом пользоваться или вообще не знал что там это уже реализовано. 

А еще бывает так, что реализация настолько запутана, что потратить времени, чтобы понять ее нужно столько, что действительно проще написать свою. Да и по протоколам не все так просто, ну вот понадобился мне лет 7 назад протокол поверх RS-485, но с возможностью горячего подключения, автоидентификации, ну и контроля доставки, разумеется. Где такой взять, да был-какой-то монстроидальный протокол, который все-равно не подходил по всем требованиям, но чтобы разобраться в исходниках нужно было не меньше пары месяцев, плюс время на доработки и отладку. Написал свой за 3 недели вместе с тестированием, использую до сих пор, т.к. очень надежный, не устарел и предоставляет удобные функции для модулей расширителей портов. Поэтому не все так однозначно

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.