STM32 CubeMX/GNU/Eclipse-Toolchain Ретаргетинг (newlib и libgloss)

Я создал цепочку инструментов на основе Windows для платы обнаружения STM32F401C, используя Eclipse CDT 4.5.1 (Mars), ARM GCC 4.9 2015q3, GnuArmEclipse-Plugin от Liviu Ionescu, OpenOCD 0.9.0 и STM32CubeMX 4.11.0.

В общем, я сгенерировал проект SW4STM32 с использованием STM32CubeMX, импортировал все в новый проект Cross ARM GCC Eclipse C и адаптировал некоторые параметры, например символы, тип процессора, FPU и файл ссылок. Простой пример мигания светодиода построен успешно и может быть выполнен OpenOCD, точки останова также работают.

Чтобы обеспечить системные вызовы, требуемые newlib или newlib nano, например, _sbrk а также _writeЯ начал с --specs=nosys.specs опция компоновщика. Таким образом, динамическое распределение памяти работает просто отлично. Тем не менее, я хотел бы реализовать _write работать самостоятельно, чтобы печатать на дисплей или отправлять данные через UART.

В libgloss the _write функция имеет слабый символ, поэтому ее должно быть достаточно для ее повторной реализации. Я сделал это в моем main.c:

int _write (int fd, char *ptr, int len)
{
  HAL_GPIO_TogglePin(LD5_GPIO_Port, LD5_Pin);
  HAL_Delay(300);
  return len;
}

int main(void)
{
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();

  HAL_GPIO_TogglePin(LD5_GPIO_Port, LD5_Pin);
  printf("Blink");

  while(1)
  {
    // do nothing
  }
}

Я ожидал, что светодиод будет мигать, но только команда переключения внутри самой основной функции показала эффект.

Почему моя функция записи не вызывается? Я что-то пропустил?

1 ответ

Решение

Вы должны либо очистить буфер явно до выхода (fflush(stdout)) или отправьте перевод строки ('\n').

Другие вопросы по тегам