Jump to content

    

sigmaN

Свой
  • Content Count

    2603
  • Joined

  • Last visited

Community Reputation

0 Обычный

About sigmaN

  • Rank
    I WANT TO BELIEVE
  • Birthday 05/08/1986

Контакты

  • Сайт
    Array
  • ICQ
    Array

Recent Profile Visitors

7205 profile views
  1. Можете подробнее описать вашу мысль? Как проектируют? Вот вы параметры CRC(не только длину, разумеется) как выбираете? А может быть нужно не только детектировать ошибки, но и восстанавливать(избыточное кодирование). А какие ошибки восстанавливать нужно? Сколько бит избытка будет нормально по вашему? Ну и ещё там по мелочи что-нибудь расскажите немного об этом, если можно. Очень интересно как оно в реальности делается....
  2. Ну я ваш стиль нагнетания ситуации и наведения ужаса уже понял, да. Спасибо )
  3. Начали за здравие, как говорится..... Изначально был вопрос о реализации протоколов, которые уже разработаны и все мат.модели выверены.
  4. Т.е. вы просто потом предлагаете автоматически генерировать С/С++ и радоваться жизни? Спасибо, интересно.
  5. Ноги видимо растут из убежденности в незаменимости голого Си. Дескать все эти классы и абстракции только код раздувают да память жрут.. Ну давайте на чистоту: мне тоже не нравится эта библиотека. Просто потому, что если её притащить в проект, то писать придется уже не на плюсах, а на том домэйн-специфик языке, который эта библиотека предлагает. Но чтиво было интересным. Надо бы аргументировать. Создаётся впечатление, что у вас когнитивное искажение в сторону Си) И компилятор вам не друг, а враг. Я провел достаточно времени за изучением именно этого проекта. Выстрелить в ногу там себе можно 18 разными способами в каждом модуле ) Именно из-за отсутствия возможности сделать нормальные абстракции на Си - авторами пришлось повсеместно использовать препроцессор, мэйджик намберы и т.д. На Си повсеместно приходится изобретать то this pointer то vtable то препроцессором костыли вставлять. Я тоже тогда позволю себе дать вам рекомендацию по исправлению когнитивного искажения.. Когда-ниубдь на досуге попробуйте просто взять тот-же pppd и переписать на плюсах. В качестве первого упражнения предлагаю следующее: Если где-то видите, что в группу функций передаётся некое состояние в виде указателя на одну и ту-же структуру - делайте это классом. Структуру эту в класс, функции делайте членами каласса. Спустя какое-то время вы сможете оценить тот факт, что благодаря this поинтеру это то-же самое(можете в ассемблер заглянуть) только лучше;) Лучше потому, что вы устанавливаете и контролируете инвариант в одном месте. Ограничиваете область видимости до нужной. И так далее... Разделяй и властвуй ;) Так, потихонечку можно будет и до свежих стандартов дойти и лично убедиться, что если на платформу есть компилятор с плюсов, то писать на голом си просто даже нет смысла. Нет причин. Кроме, конечно, самоотверженной веры в универсальность и незаменимость Си. P.S. немного не про эмбеддед конечно, но всё-же https://youtu.be/wbZdZKpUVeg Как вам такое? Тут тоже ни на миллиметр люди не приблизились к заветной мечте? )))
  6. Вот я давича смотрел исходники pppd https://github.com/paulusmack/ppp Что хорошего, светлого и умного можно почерпнуть из них? Такое я и сам накодить могу. ИМХО это стиль девяностых(восьмидесятых??) А чтобы вы лучше поняли мою позицию, я приведу тут чтиво, которое вчера нагуглил и перед сном успел полистать. http://caxapa.ru/thumbs/726398/comms-protocols-cpp.pdf Интересно, познавательно. Возникает желание попробовать, посмотреть, что там за бинарник получается...
  7. Всем привет! Посоветуйте какое-нибудь годное чтиво по реализации разных протоколов(HDLC, PPP, TCP/IP и т.д.) на С/С++. Какие-нибудь лучшие практики, шаблоны... Конечные автоматы как люди делают в таких случаях(eстественно, с упором на встраиваемые системы. Так то про Boost.msm мы слыхали). Правильная организация буферизации интересует в таких случаях, в условиях многопоточности особенно. Я обычно двойную буферизацию: писатель в пишет в один буфер, читатель читает из другого, ну и в критической секции только переключение этих буферов. В целом какое-то у меня ощущение складывается, что каждый раз как в первый раз изобретаю что-то на эту тему, хочется уже умных людей почитать и окончательно понять как правильно.
  8. Помогите скачать https://wenku.baidu.com/view/2f3378c30c22590102029d31.html Я даже нашел логин и пароль тут http://bugmenot.com/view/wenku.baidu.com Но при входе он просит ввести код из смс на номер телефона владельца аккаунта.
  9. Добрый день! Удалось ли найти что-нибудь? Поделитесь? Про фтп слышал, но там пока найдена только одна часть пазла.
  10. https://youtu.be/FJJTYQYB1JQ Годный доклад Александреску 2019 года по поводу сортировки. В том числе рассматриваются реализации std::sort в разных библиотеках. Add: ему удалось превзойти std::sort! Довольно неожиданным способом. В общем, Александреску в очередной рвз не подвёл ))
  11. Не так драматически. Не знаю как это мы видим? )) Лично у меня классическая рекурсивная реализация проигрывает как по скорости, так и по требуемой памяти. И вообще считаю, что если есть требования к скорости и есть возможность что-то реализовать не рекурсивно - нужно реализовывать не рекурсивную версию. Но да ладно, перейдем к делу. Вчера вернулся я к этой задаче. Думал, гадал... туда-сюда код вертел... Ускорения особого добиться не удалось. Сдаюсь, думаю. Пойду смотреть как stable_sort реализован в STL. Входная последовательность разбивается на группы по 32 элемента Каждая такая группа сортируется сортировкой вставкой(insertion sort) После этого начинаются объединения(merge) Так что стало ясно, что алгоритм просто другой. Я "по честному" сливаю всё начиная от групп по 1 элемента, а там всё начинается с групп по 32. Еще потом посмотрю, может мелкомягкие еще какие-то хитрости используют ))
  12. Алгоритм merge sort не корректно сравнивать с quick sort потому как merge - это стабильная сортировка(сортировка, которая не меняет относительный порядок сортируемых элементов, имеющих одинаковые ключи). quick таким свойством не обладает. Ответ на вопрос зачем можно встретить уже в названии топика. Ну и далее я на него неоднократно отвечал.
  13. Сравнение сделаю. Скорее всего там реализована не merge sort, а quick sort. За merge sort вроде как нужно идти к std::stable_sort но и то без гарантий, как мы понимаем. https://stackoverflow.com/questions/5038895/does-stdsort-implement-quicksort Студию обновил до 2019. Вообще лично мне больше хотелось не просто поставить рекорды скорости, а именно разобраться что к чему с кешами и так далее, в плане оптимизации быстродействия. Вот, добился ускорения, измерил. Можно воспринимать эти цифры как относительные измерения, не абсолютные ) Add: std::stable_sort(arr, arr + N); Array = 100000000 elements, sizeof() = 400000000 Timer = 3911853us (3.911853sec) std::sort(arr, arr + N); Array = 100000000 elements, sizeof() = 400000000 Timer = 2681706us (2.681706sec) Add2: беглое чтение реализации stable_sort показало, что merge sort там используется. Правда через несколько условий которые я не проверял. Для маленьких массивов меньше 32 элемента используется insertion sort для остальных разные варианты merge sort в зависимости от доступности временного буфера. Почитаю там потом внимательнее что происходит у них. Пока интересно самому по-оптимизировать, а не копировать подсмотренные решения. Add3: сравнение компиляторов студии 2013 и 2019 различий в скорости моей реализации не показало.
  14. На сколько я помню, реализация библиотеки Си для AVR имеет после main() бесконечный цикл. Возврат в ResetHandler не производится, потому как из него и не происходит вызова. Вместо вызова делается просто jmp куда надо - т.е. на начало стартап кода, который подготавливает Си окружение и прыгает в main(). Убрать из main бесконечный цикл и посмотреть в отладчике что будет дальше не составляет никаких проблем. Более того - этим способом можно посмотреть даже на то, что происходит ДО main. Нужно только поставить брэйкпоинт на reset handler и шагать по инструкциям.