LINUX.ORG.RU

Средства разработки, которые мы заслужили...

 , , ,


1

7

Привет, ЛОРчане!

А вам не кажется, что со средствами разработки в последнее время творится что-то странное или даже страшное?

В общем делюсь своей историей «успеха».

Не так давно создатели SDCC добавили новый стандарт вызова процедур, ломающий обратную совместимость со старым ассемблерным кодом. Причем добавили они его в версии SDCC 4.2.0, то есть сломали совместимость в минорщине…

И вот 29 декабря прошлого года я решил, что на текущих выходных не буду заниматься проприетарщиной на фрилансе, а внесу соответствующие изменения в порт BuguRTOS на stm8/sdcc. Сами ассемблерные вставки я поправил ещё 29-го перед корпоративом, а вчера решился внести изменения в код ОС, поднять всё, что нужно для разработки и тестирования имбедов на своём ноуте с debian bullseye (inb4 некрофилия), и протестировать BuguRTOS на реальном железе, ибо грядёт релиз.

В общем, включил ноут, запустил git-gui, чтобы склонировать репу с Гитхаба и…

Тут меня ждали первые грабли

Название ветки master по дефолту депрекейтед и вообще не политкорректно, меняй дефолтное название ветки, ибо белые цисгендерные гетеросексуальные шовинистические членомрази должны страдать!

Ладно, сделал git clone из консоли, начал ставить инструметы для разработки и тестить.

Под AVR все тесты удачно собрались штатными avr-gcc и avr-binutils, запустились на штатном simavr с отладкой через штатный avr-gdb, загрузились штатным avrdude и удачно отработали на старенькой Arduino(tm) nano.

Отладка работает быстро.

На Cortex-Mх меня ждали следующие грабли

Пакет stlink в debian oldstable оказался стабильно глючный: точки останова не ставятся, дисасм не работает и т.д.

Пол дня пытался подобрать команды gdb в попытках заставить отладку работать. В итоге скачал с GitHub васянскую сборку от создателей пакета, поставил, отладка заработала сразу же со старыми проверенными командами gdb!

Третьи грабли встретились мне на rp2040

Использую VSCodium вместо VSCode, дабы избежать «телеметрии». Установка cortex-debug и ms-vscode.cmake-tools прошла успешно, а вот комада:

codium --install-extension ms-vscode.cpptools

выдала

Installing extensions...
Extension 'ms-vscode.cpptools' not found.
Make sure you use the full extension ID, including the publisher, e.g.: ms-dotnettools.csharp
Failed Installing Extensions: ms-vscode.cpptools

и такая проблема не только у меня.

Ладно, на сборку и отладку это не повлияло, но осадочек остался.

Да, кстати

Отдадка на rp2040 через старую версию picoprobe под vscodium работает гораздо быстрее, чем на любом stm32 через stlink под Code::Blocks.

Четвёртые грабли ждали меня… правильно на stm8 и sdcc

В debian bullseye стоит SDCC-4.0.0 и нет пакета stm8flah.

В общем, stm8flash собрал из исходников, протестил ОС на старой версии компилятора.

Дальше скачал SDCC-4.3.0 и Code::Blocks под Офтопик, и перешёл в виртуалку с офтопиком 10, поставил тулчейн, IDE, st-toolset для прошивки, стал собирать и «заливать» тестовые проекты на Discovery…

И один из проектов не собирается ни в какую, т.е. на SDCC-4.0.0 в debian собирался, а тут sdccld посчитал, что мои статики не статики и ругается на множественные определения функций!

Все остальные тестовые проекты, отличающиеся только файлом main.с, собрались и успешно отработали, т.е. ассемблерные вставки были написаны без ошибок в слепую перед корпоративом.

Итого

Вместо того, чтобы поставить средства разработки и протестировать BuguRTOS за ПОЛ дня я протахался ДВА!!!

Из-за множественных ошибок в средствах разработки!

Кто из вас сталкивался с чем-то подобным?

Напишите в комментариях, что вы на этот счёт думаете, и поделитесь своими историями «успеха».

★★★★★

Последнее исправление: shkolnick-kun (всего исправлений: 1)
Ответ на: комментарий от FishHook

Это от низкой квалификации. Любому опытному программисту покажется, что раст создает гемороя гораздо больше, чем тот же C. (C C++ его сравнивать некорректно, т.к. парадигмы у языков разные) Когда вы овладеете правилами языка Си, строгая типизация вас будет очень сильно раздражать. Вам не будет нравиться, что вы не можете взять и прибавить к monday 1, чтобы получить tuesday. Вам не будет нравиться, что вы не можете вычесть символ ‘0’ из символа ‘5’, чтобы получить 5. И т.д. и т.п.

zx_gamer ★★★
()
Последнее исправление: zx_gamer (всего исправлений: 2)
Ответ на: комментарий от zx_gamer

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

у меня такое чувство, что ты считаешь раст языком с динамической типизацией

FishHook
()
Ответ на: комментарий от FishHook

Когда человек пишет, что инструмент хороший, то это надо понимать, как хороший для него лично, потому что отвечать за всех на свете нафиг не сдалось и никто не уполномочил.

anonymous
()
Ответ на: комментарий от anonymous

Когда человек пишет, что инструмент хороший

Ничего подобного, ЭТОТ человек пишет буквально «нет другой ИДЕ, которая умеет столько же, сколько GNU Emacs». Он пишет это безосновательно, за что и подвергается критике.

FishHook
()

Вместо того, чтобы поставить средства разработки и протестировать BuguRTOS за ПОЛ дня я протахался ДВА!!!

Как назвал – так и поплылО 😊

frunobulax ★★★
()
Ответ на: комментарий от zx_gamer

Ага, то есть Си - нестрогая типазация, а Раст - строгая, и это плохо для Раста, потому что не позволяет разработчикам высшей квалификации прибавлять единицу к понедельнику, а если по какой-то причине эта психоделическая операция привела к UB - ну, значит, мало опыта. Все верно?

FishHook
()

в debian oldstable

Ну тут уже грабли напрашиваются.

Кто из вас сталкивался с чем-то подобным?

Как рачевод я с этим сталкиваюсь регулярнее чем хотелось бы. Особенно нежным словом регулярно поминаю людей считающих, что -Werror в релизной сборке это хорошо и правильно. Удавил бы скотов.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от FishHook

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

Dark_SavanT ★★★★★
()
Ответ на: комментарий от seiken

виндами после семёрки пользоваться невозможно. А новое железо под ней себя чувствует так себе.

Кейл и прочий иар это, есличо, довольно дорого, а варез это не наш путь. STM IDE - эклипсное поделие сильно на любителя ЕМНИП.

Ну и последние 10 лет gcc генерит вполне приличный код для встройки.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от zx_gamer

Любому опытному программисту покажется, что раст создает гемороя гораздо больше, чем тот же C

Только вот си создаёт на порядок больше геморроя при отладке. У раста сейчас основная проблема в том, что embedded-hal то ещё говно, но лучшего пока никто не предложил.

Dark_SavanT ★★★★★
()

Суммаризирую твои проблемы:

  • Незнание git. Не понял только что именно ты не смог - склонить дефолтную ветку (название которой знать вовсе не надо) или поменять имя ремотной ветки в конфиге.
  • VS Codium - без комментариев.
  • Debian. Не надо пытаться разрабатывать на «стабильных» дистрибутивах - там глюкавое старьё.
anonymous
()
Ответ на: комментарий от Dark_SavanT

Как воспоминание: во времена оные рач переехал на python3 по-умолчанию, а openembedded(даже ещё не йокта), в bitbake и сопутствующих скриптах использовал #!/usr/bin/python

И всё, и п-ц. Благо от OE отказались из-за его неподьёмной сложности.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от Werenter

Nix можно использовать и на Debian, я на Slackware использовал, но оказалось проще писать слакбилды, и приложения запускаются быстрее с системными библиотеками.

MOPKOBKA ★★★★★
()
Ответ на: комментарий от Dark_SavanT

Там есть ещё одна проблема, тащемта, - оно прибито гвоздями к llvm.

Помимо всего прочего, чтобы LLVM мог в архитектуры, нужно генерировать Си, а уже его компилировать под stm8, например.

shkolnick-kun ★★★★★
() автор топика
Ответ на: комментарий от shkolnick-kun

Ну видимо никому кодогенератор на stm8 не понадобился. Да и для avr порт говно. Как говорят более знающие люди - llvm в принципе так себе подходит для архитектур с разрядностью меньше 32 бит, но это я с чужих слов.

rust на avr завели в итоге, но работает оно крайне плохо.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от zx_gamer

Угу, дебажишь. А потом оптимизации очередной раз наоптимизировали. Или очередные мамкины кулхацкеры нашли, что ты запутался в указателях и use-after-free бахнул.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от Dark_SavanT

Оптимизаторы не имеют права оптимизировать то, что гарантируется стандартом.

Или очередные мамкины кулхацкеры нашли, что ты запутался в указателях и use-after-free бахнул.

Опять-таки флаг GCC -fsanitize=undefined,address и программа напишет о таком поведении.

zx_gamer ★★★
()
Ответ на: комментарий от zx_gamer

Оптимизаторы не имеют права оптимизировать то, что гарантируется стандартом.

Местами проще перечислить что им не гарантируется. А особенно забавно узнавать, что теперь не гарантируется.

-fsanitize=undefined,address и программа напишет о таком поведении.

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

Dark_SavanT ★★★★★
()
Ответ на: комментарий от Dark_SavanT

А особенно забавно узнавать, что теперь не гарантируется.

Так компилируй по классическим, всеми признанными стандартам. Для языка Си это ANSI C, для Си++ это C++98. С ними никогда ни у кого нигде не возникнет вопросов.

zx_gamer ★★★
()
Последнее исправление: zx_gamer (всего исправлений: 1)
Ответ на: комментарий от Dark_SavanT

Список архитектур уточнить не забудь.

Все, что поддерживает libc.

А иногда и выводить некуда, на светодиод разве что.

Да ладно? К любому контроллеру можно RSR-232, как минимум, приделать.

zx_gamer ★★★
()
Последнее исправление: zx_gamer (всего исправлений: 1)
Ответ на: комментарий от zx_gamer

Угу, но это не точно ;)

crosstool-ng/config/cc/gcc.in

..........
config CC_GCC_LIBSANITIZER
    bool
    prompt "Compile libsanitizer"
    depends on THREADS_NATIVE
    depends on !LIBC_UCLIBC && !LIBC_MUSL # Currently lacks required headers    (like netrom.h)
    help
      libsanitizer is a library which provides run-time sanitising of either
      or both of:
        - memory access patterns (out-of-bonds, use-after-free)
        - racy data accesses (in multi-threaded programs)

      The default is 'N'. Say 'Y' if you need it, and report success/failure.
........
imb ★★
()
Ответ на: комментарий от zx_gamer

https://github.com/google/sanitizers/wiki/AddressSanitizer

The tool works on x86, ARM, MIPS (both 32- and 64-bit versions of all architectures), PowerPC6

перевожу взгляд на sh4 и грущу

Так компилируй по классическим, всеми признанными стандартам. Для языка Си это ANSI C, для Си++ это C++98. С ними никогда ни у кого нигде не возникнет вопросов

грусно смотрю на Qt6 с его требованием C++17

https://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/global/qcompilerdetection.h

.........
// Compiler version check
#if defined(__cplusplus) && (__cplusplus < 201703L)
#  ifdef Q_CC_MSVC
#    error "Qt requires a C++17 compiler, and a suitable value for __cplusplus. On MSVC, you must pass the /Zc:__cplusplus option to the compiler."
#  else
#    error "Qt requires a C++17 compiler"
#  endif
#endif // __cplusplus
........

в общем embedded это совсем не тоже что host

imb ★★
()
Ответ на: комментарий от zx_gamer

смешно, в данном случае я привёл пример для Вашей рекомендации всеми признанными стандартам. Для языка Си это ANSI C, для Си++ это C++98

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

imb ★★
()