JackSmith писал(а): Чт июл 02, 2026 06:44:03
у вас есть объемная либа вроде LwIP
либы использовать нельзя
Не надо выдумывать, Роман. Библиотека библиотеке рознь. Одно дело заменять простейшие команды управления периферией бестолковыми функциями, а другое - брать готовый библиотечный стек достаточно объемного протокола, который применяется либо as is, либо с каким то допиливанием. Это касается любой математики проекта.
Первичное освоение всегда связано с компиляцией чужих наработок. В дальнейшем оно приведет к созданию собственных библиотек.
lwIP жутко кривая, лучше свое написать или выбрать из множества существующих более правильную.
А вообще, сеть - сложная штука, нечего вообще пытаться ее поднять на одноядерном МК без MMU.
КРАМ, вам бы задуматься хоть раз: человек, который минимум 30 лет программирует (хоть и на любительском уровне бОльшую часть времени), нуждается в подобных вашим "откровениях"?
собственные библиотеки... со временем приходит понимание... я за свою практическую деятельность своих библиотек написал под 5 десятков. и с нуля, и путем переделки/исправления багов чужих.
вам бы задуматься о том, почему программист с очень приличным бэкграундом вдруг начал задавать такие вопросы и использовать такие методики кодописания... но нет, вам тогда не на чем будет тешить своё эго... а жаль, ведь диалог мог бы быть конструктивным. и для меня полезным - увы, вас мне нечему учить, а поучиться мог бы. но не глупостям про "понимание важности периферии".
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
С этим никто и не спорит. Но иногда поиск причины неработающего кода при включенной оптимизации уровней o3 и LTO занимает слишком много времени и трудно поддается отладке для этого поиска — разве только включение оптимизации на отдельные файлы и даже фрагменты кода.
И, что самое неприятное, такая оптимизация приводит к неявным багам, которые еще нужно обнаружить при тестировании. Верхние уровни оптимизации порой больше напоминают шаманство и потому плохо предсказуемы.
linux_rulezz писал(а): Чт июл 02, 2026 08:19:16
А вообще, сеть - сложная штука, нечего вообще пытаться ее поднять на одноядерном МК без MMU
а если не вообще, а в частности, то в невероятно большом количестве применений на МК сеть понимается примерно как UART неограниченной дальности связи. и в этом случае достаточно купить и поставить на плату "умный Ethernet-разъем", и прекрасно работать с ним хоть на AVR.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
ARV писал(а): Чт июл 02, 2026 08:25:07
вам бы задуматься о том, почему программист с очень приличным бэкграундом вдруг начал задавать такие вопросы
Назовите хоть одну причину по которой я должен об этом думать?
Бэкграунд — это не медаль или орден. Человек с любым опытом может действовать не оптимально и совершать ошибки. Важно как он на это реагирует.
Подумайте об этом.
КРАМ писал(а): Чт июл 02, 2026 08:33:05
Назовите хоть одну причину по которой я должен об этом думать?
я сейчас назову, но заранее знаю вашу реакцию. для того, чтобы слушать ответы, надо быть готовым к этому. а вы не из тех людей, кто нуждается в ответах даже на заданные самим собой вопросы.
вы должны об этом задумываться хотя бы затем, чтобы не быть смешным. даже пятикласснику смешно слушать о пользе таблицы умножения.
а реагирую я на все вполне адекватно: бесполезные советы ничего, кроме раздражения, не вызывают - это у всех так.
и если человек действует неоптимально, вы не мессия, чтобы обязательно спасать его. достаточно иной раз помочь ему идти выбранным путем, чтобы он понял ошибочность этого пути САМ, без того, чтобы быть прежде осмеянным, обруганным и униженным.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
КРАМ писал(а): Чт июл 02, 2026 08:29:26Верхние уровни оптимизации порой больше напоминают шаманство и потому плохо предсказуемы.
Я выше писал про "-flto". Попробуйте как-нибудь для МК включить эту опцию. Ну, а в интернетах вердикт ставят однозначный: "если у человека код не работает с «-O3 -flto», то программист он, мягко говоря, хреновый".
Естественно, для отладки используется -O0 + прочие нужные флаги (т.к. элементарно при оптимизации будет проведен strip, и невозможно будет при помощи gdb узнать, где сейчас происходит выполнение). Когда все отлажено, собираешь в release-сборке. Если не работает, внимательно просматриваешь код — где мог накосячить и, например, volatile забыть или еще какую-нибудь дичь написать.
Кстати, поговаривают, что в свежем стандарте C++ не станет volatile. Не представляю, как "плюсовики" в дальнейшем смогут разрабатывать.
А вот свежий стандарт С - супер. Теперь есть встроенные bool. Жаль только, не завезли constexpr в понимании С++ — приходится С сочетать с С++ для лексического разбора текстового протокола.
Кому интересно - мой Makefile. Я разбил на уровни. Верхний уровень - общий для всех STM32, далее следует уровень "семейства" с соответствующими флагами, а на уровне конкретной реализации Makefile совсем маленький, например:
linux_rulezz писал(а): Чт июл 02, 2026 09:45:40
И как, интересно, то же время считать? Я, например, завожу волатильную переменную Tms и каждую миллисекунду в прерывании SysTick она инкрементируется…
linux_rulezz писал(а): Чт июл 02, 2026 08:57:01
Кстати, поговаривают, что в свежем стандарте C++ не станет volatile. Не представляю, как "плюсовики" в дальнейшем смогут разрабатывать.
Этого в принципе не может быть. Без volatile сущностей абстрактная машина С/C++ не может существовать. Такой код любой оптимизатор просто под нож пустит.
я конкретно про O3. проект микропитон для примера, порт bare-arm. c "Os" проект нормально собирается, но если поменять в Makefile оптимизацию на "O3", это строка 25, то
LINK build/firmware.elf
arm-none-eabi-ld: build/py/malloc.o: in function `m_malloc0':
malloc.c:(.text.m_malloc0+0x6): undefined reference to `calloc'
make: *** [Makefile:44: build/firmware.elf] Ошибка 1
Там же написано в тексте ошибки - нет реализации функции calloc.
а почему при "Os" есть?
я ранее писал о похожей беде: то, что я считал функцией, было на самом деле макросом, и, естественно, чтобы этот макрос разворачивался, нужен был правильный заголовочный файл. если этого заголовка не было - компилятор считал, что это функция и, само собой, не находил ее. может быть, в вашем случае тоже что-то подобное происходит: при оптимизации что-то из компиляции исключается, а то, что осталось уже не то, что понятно... может и у вас calloc по факту макрос.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...