Stm32 с чего начать изучение...

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Вымогатель припоя
Сообщения: 588
Зарегистрирован: Пн фев 16, 2026 17:30:02

Сообщение Rapra »

calloc объединяет две функции - malloc и memset. В newlib функция calloc (равно как и malloc) обернута в макрос для связи с разными компиляторами. Как это сделано в вашем случае портирования - фиг знает. Баги то в основном и возникают при вот таких трансформациях одного к другому.
А сама оптимизация, как инструмент настройки компилятора, не виновата.
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 355
Зарегистрирован: Ср мар 09, 2016 08:07:41

Сообщение JackSmith »

там в модуле "lib.c" кастомные реализации библиотечных malloc(), memcpy(), memset(), strlen() и прочих функций, которые оптимизатор почему-то выкидывает из проекта, что и приводит к ошибке при линковке.
Реклама
Вымогатель припоя
Сообщения: 588
Зарегистрирован: Пн фев 16, 2026 17:30:02

Сообщение Rapra »

А, ну дак в этих кастомных реализациях, либо в их вызовах и следует искать ошибку. Я показывал ранее, как именно выбрасывается неиспользуемый код.
Так же, для GCC можно задать индивидуальные для каждой функции настройки оптимизации при помощи атрибута __attribute__((optimize("O0"))) void Foo(); где "O0", "O1", "O2", "O3", "Os", "Of" - указание уровня оптимизации.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18767
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

JackSmith писал(а): Чт июл 02, 2026 12:44:52 я конкретно про O3. проект микропитон для примера, порт bare-arm. c "Os" проект нормально собирается, но если поменять в Makefile оптимизацию на "O3", это строка 25
но в файле py/malloc.с нет вообще обращений к "calloc"!!! и в lib.c тоже нет...

https://github.com/micropython/micropyt ... y/malloc.c
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 355
Зарегистрирован: Ср мар 09, 2016 08:07:41

Сообщение JackSmith »

ARV писал(а): Пт июл 03, 2026 08:03:47 но в файле py/malloc.с нет вообще обращений к "calloc"!!! и в lib.c тоже нет...
calloc объединяет две функции - malloc и memset

Код: Выделить всё

void *m_malloc_maybe(size_t num_bytes) {
    void *ptr = malloc(num_bytes);
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Это не важно, компилятор может сам их вызывать. Вот, например, он распознал паттерн копирования и вставил memcpy.
Изображение
изображение_2026-07-03_083034239.png
(80.79 КБ) 84 скачивания
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18767
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

VladislavS писал(а): Пт июл 03, 2026 08:31:52 Это не важно, компилятор может сам их вызывать
как это "не важно"?! я, конечно, от Си вобще в большом шоке, и с выбрасыванием лишнего я смирился, но чтобы компилятор добавлял то, о чем я не просил - это, имхо, явный перебор! хотя бы большими красными буквами написали, что при оптимизации такой-то компилятор предугадывает ваши желания и делает сам, как лучше.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Задача компилятора — обеспечить, чтобы наблюдаемое поведение программы совпадало с тем, что предписывает абстрактная машина языка С. Когда вы поймёте смысл этого предложения, то программировать станет сильно проще
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 355
Зарегистрирован: Ср мар 09, 2016 08:07:41

Сообщение JackSmith »

давайте посмотрим, что там есть:

Код: Выделить всё

build/py/malloc.o: in function `m_malloc0':
malloc.c:(.text.m_malloc0+0x6): undefined reference to `calloc'
make: *** [Makefile:45: build/firmware.elf] Ошибка 1

$ arm-none-eabi-nm ./build/py/malloc.o
         U calloc  <--- ВОТ
         U free
00000000 T m_free
00000000 T m_malloc
00000000 T m_malloc0
         U m_malloc_fail
00000000 T m_malloc_maybe
00000000 T m_realloc
00000000 T m_realloc_maybe
         U malloc
         U realloc
пересобрал с "Os" и

Код: Выделить всё

$ arm-none-eabi-nm ./build/py/malloc.o
         U free
00000000 T m_free
00000000 T m_malloc
00000000 T m_malloc0
         U m_malloc_fail
00000000 T m_malloc_maybe
00000000 T m_realloc
00000000 T m_realloc_maybe
         U malloc
         U memset
         U realloc
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18767
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

VladislavS писал(а): Пт июл 03, 2026 08:44:47 Задача компилятора — обеспечить, чтобы наблюдаемое поведение программы совпадало с тем, что предписывает абстрактная машина языка С. Когда вы поймёте смысл этого предложения
я понимаю смысл этого предложения. я не понимаю, откуда абстрактная машина языка Си берет ссылку на несуществующую функцию? calloc разве абсолютная часть стандартного языка Си? по-моему, это всего-навсего библиотечная функция, которая может быть, а может и не быть, и как раз задача компилятора не обращаться к несуществующим абстракциям, а использовать существующие.
разве нет? только если нет, прошу не констатировать, а объяснить более понятно
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 355
Зарегистрирован: Ср мар 09, 2016 08:07:41

Сообщение JackSmith »

ARV писал(а): Пт июл 03, 2026 10:01:55 calloc разве абсолютная часть стандартного языка Си?
да.
стандарт https://www.open-std.org/jtc1/sc22/wg14 ... /n3220.pdf
параграф 7.24.3.2 , страница 365
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18767
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

чем больше о Си я узнаю, тем меньше он мне нравится... calloc - это часть библиотеки, если я не намеревался использовать библиотеки, выходит, компилятор за меня решение принимает?! как-то это не по-людски...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Не библиотеки, а языка. В библиотеке эта функция или нет - детали реализации. Не нравится - проходим мимо :)))
Вымогатель припоя
Сообщения: 588
Зарегистрирован: Пн фев 16, 2026 17:30:02

Сообщение Rapra »

Не нравится Си - пишите на ассемблере. Или вообще на Питоне - на нем как раз все школьники нынче пишут, очень популярный изык. Че себя мучить тем, на что ума не хватает
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 355
Зарегистрирован: Ср мар 09, 2016 08:07:41

Сообщение JackSmith »

ARV писал(а): Пт июл 03, 2026 12:54:56 если я не намеревался использовать библиотеки,
ну так не линкийте стандартную библиотеку. но если нет аппаратного деления в микроконтроллере, функцию деления придется писать самому. тоже самое с плавающей точной, синусами, псевдослучаными числами и пр.
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 355
Зарегистрирован: Ср мар 09, 2016 08:07:41

Сообщение JackSmith »

Rapra писал(а): Пт июл 03, 2026 13:16:14 Или вообще на Питоне - на нем как раз все школьники нынче пишут, очень популярный изык. Че себя мучить тем, на что ума не хватает
не умеете готовить - не мешайте другим. питон в разы сложнее Си

Код: Выделить всё

    with open(out_file, "w", encoding="utf-8") as out:
        out.write("FONT = \\\n")
        
        for i in range(0, len(data), 16):
            chunk = data[i:i+16]
            hex_str = "".join(f"\\x{b:02x}" for b in chunk)
            
            suffix = "\\" if i + 16 < len(data) else ""
            out.write(f"\tb'{hex_str}'{suffix}\n")
Вымогатель припоя
Сообщения: 588
Зарегистрирован: Пн фев 16, 2026 17:30:02

Сообщение Rapra »

Не знаю, школьники его с удовольствием хавают
Опытный кот
Аватара пользователя
Сообщения: 710
Зарегистрирован: Пн сен 15, 2025 08:43:23
Откуда: Маленький СССР посреди террористов

Сообщение linux_rulezz »

"Программировать" методом "вайб-кодинга" или стыривания из интернета готовых кусков кода и программировать по-настоящему — очень разные вещи.
Видел я, как школьники змеюку "хавают": вообще не понимают, что "их" код делает!
Питон не просто значительно сложней С, но еще и с уродским синтаксисом и почти полным отсутствием логики. Я вот змеюку не понимаю, да и никакого желания с ней разбираться нет: у меня нет задач, которые невозможно было бы на С решить. А учитывая то, что под змеюку до сих пор нет компилятора, она вообще не может называться языком программирования. Так - баловство какое-то.
Windows must die!
Контактная информация:
Вымогатель припоя
Сообщения: 588
Зарегистрирован: Пн фев 16, 2026 17:30:02

Сообщение Rapra »

Ну почему ж баловство? Это язык достаточно высокого уровня абстракции. Для микроконтроллеров конечно слабо подходит, поскольку микроконтроллеры - это всё-таки больше "железо" чем софт.
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 355
Зарегистрирован: Ср мар 09, 2016 08:07:41

Сообщение JackSmith »

Rapra писал(а): Пт июл 03, 2026 15:02:48 Для микроконтроллеров конечно слабо подходит, поскольку микроконтроллеры - это всё-таки больше "железо" чем софт.
для различных esp32xx/esp8266, вполне подходит.
Ответить

Вернуться в «ARM»