Страница 80 из 82
Re: Stm32 с чего начать изучение...
Добавлено: Чт июл 02, 2026 08:16:38
КРАМ
ARV писал(а): Чт июл 02, 2026 07:54:35
JackSmith писал(а): Чт июл 02, 2026 06:44:03
у вас есть объемная либа вроде LwIP
либы использовать нельзя
Не надо выдумывать, Роман. Библиотека библиотеке рознь. Одно дело заменять простейшие команды управления периферией бестолковыми функциями, а другое - брать готовый библиотечный стек достаточно объемного протокола, который применяется либо as is, либо с каким то допиливанием. Это касается любой математики проекта.
Первичное освоение всегда связано с компиляцией чужих наработок. В дальнейшем оно приведет к созданию собственных библиотек.
Re: Stm32 с чего начать изучение...
Добавлено: Чт июл 02, 2026 08:19:16
linux_rulezz
lwIP жутко кривая, лучше свое написать или выбрать из множества существующих более правильную.
А вообще, сеть - сложная штука, нечего вообще пытаться ее поднять на одноядерном МК без MMU.
Re: Stm32 с чего начать изучение...
Добавлено: Чт июл 02, 2026 08:25:07
ARV
КРАМ, вам бы задуматься хоть раз: человек, который минимум 30 лет программирует (хоть и на любительском уровне бОльшую часть времени), нуждается в подобных вашим "откровениях"?
собственные библиотеки... со временем приходит понимание... я за свою практическую деятельность своих библиотек написал под 5 десятков. и с нуля, и путем переделки/исправления багов чужих.
вам бы задуматься о том, почему программист с очень приличным бэкграундом вдруг начал задавать такие вопросы и использовать такие методики кодописания... но нет, вам тогда не на чем будет тешить своё эго... а жаль, ведь диалог мог бы быть конструктивным. и для меня полезным - увы, вас мне нечему учить, а поучиться мог бы. но не глупостям про "понимание важности периферии".
Re: Stm32 с чего начать изучение...
Добавлено: Чт июл 02, 2026 08:29:26
КРАМ
Rapra писал(а): Чт июл 02, 2026 06:52:42
Оптимизация компилятора - совершенно нормальная практика.
С этим никто и не спорит. Но иногда поиск причины неработающего кода при включенной оптимизации уровней o3 и LTO занимает слишком много времени и трудно поддается отладке для этого поиска — разве только включение оптимизации на отдельные файлы и даже фрагменты кода.
И, что самое неприятное, такая оптимизация приводит к неявным багам, которые еще нужно обнаружить при тестировании. Верхние уровни оптимизации порой больше напоминают шаманство и потому плохо предсказуемы.
Re: Stm32 с чего начать изучение...
Добавлено: Чт июл 02, 2026 08:29:55
ARV
linux_rulezz писал(а): Чт июл 02, 2026 08:19:16
А вообще, сеть - сложная штука, нечего вообще пытаться ее поднять на одноядерном МК без MMU
а если не вообще, а в частности, то в невероятно большом количестве применений на МК сеть понимается примерно как UART неограниченной дальности связи. и в этом случае достаточно купить и поставить на плату "умный Ethernet-разъем", и прекрасно работать с ним хоть на AVR.
Re: Stm32 с чего начать изучение...
Добавлено: Чт июл 02, 2026 08:33:05
КРАМ
ARV писал(а): Чт июл 02, 2026 08:25:07
вам бы задуматься о том, почему программист с очень приличным бэкграундом вдруг начал задавать такие вопросы
Назовите хоть одну причину по которой я должен об этом думать?
Бэкграунд — это не медаль или орден. Человек с любым опытом может действовать не оптимально и совершать ошибки. Важно как он на это реагирует.
Подумайте об этом.
Re: Stm32 с чего начать изучение...
Добавлено: Чт июл 02, 2026 08:40:56
ARV
КРАМ писал(а): Чт июл 02, 2026 08:33:05
Назовите хоть одну причину по которой я должен об этом думать?
я сейчас назову, но заранее знаю вашу реакцию. для того, чтобы слушать ответы, надо быть готовым к этому. а вы не из тех людей, кто нуждается в ответах даже на заданные самим собой вопросы.
вы должны об этом задумываться хотя бы затем, чтобы не быть смешным. даже пятикласснику смешно слушать о пользе таблицы умножения.
а реагирую я на все вполне адекватно: бесполезные советы ничего, кроме раздражения, не вызывают - это у всех так.
и если человек действует неоптимально, вы не мессия, чтобы обязательно спасать его. достаточно иной раз помочь ему идти выбранным путем, чтобы он понял ошибочность этого пути САМ, без того, чтобы быть прежде осмеянным, обруганным и униженным.
Re: Stm32 с чего начать изучение...
Добавлено: Чт июл 02, 2026 08:57:01
linux_rulezz
КРАМ писал(а): Чт июл 02, 2026 08:29:26Верхние уровни оптимизации порой больше напоминают шаманство и потому плохо предсказуемы.
Я выше писал про "-flto". Попробуйте как-нибудь для МК включить эту опцию. Ну, а в интернетах вердикт ставят однозначный: "если у человека код не работает с «-O3 -flto», то программист он, мягко говоря, хреновый".
Естественно, для отладки используется -O0 + прочие нужные флаги (т.к. элементарно при оптимизации будет проведен strip, и невозможно будет при помощи gdb узнать, где сейчас происходит выполнение). Когда все отлажено, собираешь в release-сборке. Если не работает, внимательно просматриваешь код — где мог накосячить и, например, volatile забыть или еще какую-нибудь дичь написать.
Кстати, поговаривают, что в свежем стандарте C++ не станет volatile. Не представляю, как "плюсовики" в дальнейшем смогут разрабатывать.
А вот свежий стандарт С - супер. Теперь есть встроенные bool. Жаль только, не завезли constexpr в понимании С++ — приходится С сочетать с С++ для лексического разбора текстового протокола.
Кому интересно -
мой Makefile. Я разбил на уровни. Верхний уровень - общий для всех STM32, далее следует уровень "семейства" с соответствующими флагами, а на уровне конкретной реализации Makefile совсем маленький,
например:
Код: Выделить всё
BINARY := blink
# MCU code
MCU := G431xx
# change this linking script depending on particular MCU model,
LDSCRIPT := stm32g431xb.ld
include ../makefile.g4
include ../../makefile.stm32
Re: Stm32 с чего начать изучение...
Добавлено: Чт июл 02, 2026 09:20:41
Adrift
linux_rulezz писал(а): Чт июл 02, 2026 08:57:01Кстати, поговаривают, что в свежем стандарте C++ не станет volatile.
Первый раз слышу. Задеприкейтили ряд применений где volatile не имеет смысла, вводит в заблуждение или приводит к UB, типа операции ++, не более того.
Re: Stm32 с чего начать изучение...
Добавлено: Чт июл 02, 2026 09:45:40
linux_rulezz
Adrift писал(а): Чт июл 02, 2026 09:20:41типа операции ++
И как, интересно, то же время считать? Я, например, завожу волатильную переменную Tms и каждую миллисекунду в прерывании SysTick она инкрементируется…
Re: Stm32 с чего начать изучение...
Добавлено: Чт июл 02, 2026 10:24:34
Adrift
linux_rulezz писал(а): Чт июл 02, 2026 09:45:40И как, интересно, то же время считать?
+= по-прежнему работает. Да и ++ работает, но с предупреждением.
Re: Stm32 с чего начать изучение...
Добавлено: Чт июл 02, 2026 10:51:34
VladislavS
linux_rulezz писал(а): Чт июл 02, 2026 09:45:40
И как, интересно, то же время считать? Я, например, завожу волатильную переменную Tms и каждую миллисекунду в прерывании SysTick она инкрементируется…
Дарю. Не благодари.
Код: Выделить всё
volatile auto Tms=0ul;
extern "C" void SysTick_Handler()
{
Tms=Tms+1;
}
Re: Stm32 с чего начать изучение...
Добавлено: Чт июл 02, 2026 10:57:01
VladislavS
linux_rulezz писал(а): Чт июл 02, 2026 08:57:01
Кстати, поговаривают, что в свежем стандарте C++ не станет volatile. Не представляю, как "плюсовики" в дальнейшем смогут разрабатывать.
Этого в принципе не может быть. Без volatile сущностей абстрактная машина С/C++ не может существовать. Такой код любой оптимизатор просто под нож пустит.
Re: Stm32 с чего начать изучение...
Добавлено: Чт июл 02, 2026 11:59:50
Zapolyarny
Почему не инкремент или хотя бы Tms += 1 ?
---
А, понял. Не увидел выше.
Re: Stm32 с чего начать изучение...
Добавлено: Чт июл 02, 2026 12:44:52
JackSmith
Rapra писал(а): Чт июл 02, 2026 06:52:42
Оптимизация компилятора - совершенно нормальная практика.
я конкретно про 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
Спойлер
Код: Выделить всё
$ arm-none-eabi-gcc --version |head -n1
arm-none-eabi-gcc (GNU Arm Embedded Toolchain 10.3-2021.10) 10.3.1 20210824 (release)
Re: Stm32 с чего начать изучение...
Добавлено: Чт июл 02, 2026 12:51:13
linux_rulezz
А нечего malloc на МК использовать!
Если нет виртуального непрерывного адресного пространства, динамическое выделение памяти противопоказано!
Re: Stm32 с чего начать изучение...
Добавлено: Чт июл 02, 2026 13:03:05
Rapra
Так то баги в конкретном портировании, а не в чистом сишном проекте. Там же написано в тексте ошибки - нет реализации функции calloc.
Re: Stm32 с чего начать изучение...
Добавлено: Чт июл 02, 2026 13:07:59
JackSmith
Там же написано в тексте ошибки - нет реализации функции calloc.
а почему при "Os" есть?
Re: Stm32 с чего начать изучение...
Добавлено: Чт июл 02, 2026 13:10:51
Rapra
Вероятно, используется другая функция. Я ж говорю - это нужно смотреть вглубь портирования.
Re: Stm32 с чего начать изучение...
Добавлено: Чт июл 02, 2026 16:26:34
ARV
JackSmith писал(а): Чт июл 02, 2026 13:07:59
Там же написано в тексте ошибки - нет реализации функции calloc.
а почему при "Os" есть?
я ранее писал о похожей беде: то, что я считал функцией, было на самом деле макросом, и, естественно, чтобы этот макрос разворачивался, нужен был правильный заголовочный файл. если этого заголовка не было - компилятор считал, что это функция и, само собой, не находил ее. может быть, в вашем случае тоже что-то подобное происходит: при оптимизации что-то из компиляции исключается, а то, что осталось уже не то, что понятно... может и у вас calloc по факту макрос.