Перейти к содержанию
    

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

Всем привет!

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19.07.2020 в 02:36, sigmaN сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, HardEgor said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 minutes ago, sigmaN said:

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

24 minutes ago, sigmaN said:

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Т.е. вы просто потом предлагаете автоматически генерировать С/С++ и радоваться жизни?
Спасибо, интересно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

56 minutes ago, Ruslan1 said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 hours ago, Eddy_Em said:

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

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

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, Ruslan1 сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...