Я пытаюсь создать простой проект для Cortex M3. Проблема, с которой я столкнулся, заключается в том, что компилятор содержит неправильные библиотеки для memset и других mem * -функций (memcpy, memcmp). И это приводит к жесткой ошибке каждый раз, когда выполнение подходит к memset(arr, 0x55, 10);
в файле списка, оно написано как blx <memset>
. Я использую компилятор arm-none-eabi-gcc. Я не использую arm-none-eabi-ld для соединения, но arm-none-eabi-gcc (4.8.2).Cortex M3 не может обрабатывать memset
Для GCC компилятора я использую эти флаги: -mthumb -mcpu=cortex-m3 -msoft-float -Os -gdwarf-2 -g3 -Wall -Wextra -Wimplicit-function-declaration -Wredundant-decls -Wmissing-prototypes -Wstrict-prototypes -Wundef -Wshadow -fno-common -ffunction-sections -fdata-sections
Для компоновщика сценария я использую эти флаги: -L$(TOOLCHAIN_DIR) -L$(LIBGCC) --static -Wl,--start-group -lc -lgcc -lnosys -Wl,--end-group -nostartfiles -Wl,--gc-sections -Wl,--allow-multiple-definition -mthumb -mcpu=cortex-m3 -msoft-float -Wl,--print-gc-sections -T$(LINKER_SCRIPT)
где $ (LINKER_SCRIPT) мой собственный компоновщик скрипт $ (TOOLCHAIN_DIR) - путь к libc.a, libnosys.a библиотек $ (LIBGCC) - путь к библиотеке libgcc.a
рука-ни-EABI-GCC версии 4.8.2
Итак, мой вопрос: где может Возможная проблема? Почему memset и другие функции из string.h вообще не работают? Не могли бы вы рассказать мне, что я пропустил?
Специальный раздел для dwelch ТОЛЬКО: Я не могу предоставить вам этот код, потому что у меня нет такого набора инструментов больше. Понимаете, когда вы спросили меня об ассемблере, я уже перекомпилировал toolchain и получил тростник этой ошибки. Новая инструментальная цепочка создает очень отличный код asm, который работает. Вы хотели, чтобы я предоставил вам то, чего больше не существует. Это просто. Последнее, что я понял, это команда blx. Кроме того, есть много тем, где люди жаловались на функции mem *. В этих темах люди обычно забывали добавить флаг архитектуры в компоновщик
доверять мне, я просмотрел этот код в течение очень долгого времени, и я видел много примеров в сети. По существу, это выглядело так: 08004c10 blx <memset> /*here was an error*/
Прямо сейчас это выглядит !!! 08004a14 BL <memset>
!!! И он работает без каких-либо исключений и жестких ошибок. Итак, перекомпиляция инструментальной цепочки была решением. В этой ситуации вы ошибаетесь, требуя кода, который больше не существует и пытается сказать, что я не понимаю проблемы.
Конец специальной секции #fordwelchonly
Хм .. вы уверены, что имеете связь с правильным набором библиотек? Вы указываете -mumb для взаимодействия, но вызов blx,
Да, Я уверен, я пытался с и без обоих - mumb и -mthumb-interwork. Результат все тот же. Да, я читал об этой проблеме, но кажется, что на данный момент решения нет. ошибка или я тоже виноват? – user1415536
, пожалуйста, разместите демонтаж, показывающий проблему. –