Включив следующие флаги компоновщика:
LDFLAGS += --specs=rdimon.specs -lc -lrdimon
это выглядит, как вы пытаетесь использовать то, что называется semihosting. Вы говорите компоновщику, чтобы он включал библиотеки системных вызовов.
Semihosting - это механизм, который позволяет коду, запущенному на цели ARM, обмениваться данными и использовать средства ввода/вывода на хост-компьютере, на котором запущен отладчик.
Примерами таких средств являются ввод с клавиатуры, выход на экран и дисковый ввод-вывод. Например, вы можете использовать этот механизм для включения функций в библиотеке C, таких как printf() и scanf(), чтобы использовать экран и клавиатуру хоста вместо того, чтобы иметь экран и клавиатуру в целевой системе.
Поскольку вы используете OpenSource инструменты для разработки STM32 (Makefile и рука-ни-EABI), я предполагаю, что вы также используете OpenOCD для программирования микроконтроллера. OpenOCD требует, чтобы включить semihosting, а также с помощью следующей команды:
arm semihosting enable
Вы можете по команде вашему OpenOCD скрипт убедившись, что вы завершить этап конфигурации и выйти на сцену выполнения с помощью команды «Init». Ниже приведен пример сценария OpenOCD (адаптировано для STM32F103):
source [find target/stm32f1x.cfg]
init
arm semihosting enable
Другие упомянутые здесь решения, где ваш Retarget fputc()
функция интерфейса UART также будет работать и может. Semihosting будет работать на всех последних ARM Cortex-M, но для этого потребуется некоторая конфигурация отладчика & (см. Выше). Перехват функции fputc()
с интерфейсом UART будет работать с любым компилятором, но вам придется проверять конфигурацию выводов для каждой платы.
Что вы подразумеваете под "это не работает"? И это микроконтроллер, где вы ожидаете, что текст будет напечатан? Обычно при программировании для внедренной цели вы создаете свой собственный 'print' набор функций, который использует UART (или другие протоколы связи). Найдите некоторые библиотеки UART или, возможно, некоторые библиотеки отладки, которые используют ваш отладчик (например, Segger RTT с JLink Viewer на вашем ПК, если у вас есть отладчик Segger). – Tim
Я использую не-eabi-comcom. Это проблема. Я знаю, как использовать printf в проекте keil. и я использую USART1 для вывода. пытаетесь ли вы использовать этот компилятор для создания файла bin. –