Новый xprintf и "Micron IDE"

ejsanyo

Active member
Даже в нынешней сборке (0.0.8) её авторы положили очень древнюю версию xprintf от 2014 года. Но эту ситуацию можно исправить:
  • Качаем последнюю версию от 2021 года непосредственно с сайта ChaN-а, заменяем файлы в своём проекте.
  • В файлах uart_lib выкидываем все переопределения xputc и меняем их, скажем, на
C:
uart_lib.c:
void __attribute__((weak)) output_func(int chr)
{
    UART_WriteByte(UART_0, chr);
    UART_WaitTransmission(UART_0);
}

uart_lib.h:
void __attribute__((weak)) output_func(int chr);
Так и хочется спросить, а почему работу с UART-ом до сих пор не добавили в HAL?! Как все делают.
  • Где-нибудь в начале main-а делаем переопределение функции вывода:
C:
xdev_out(output_func);
  • Открываем xprintf.h и расставляем в нём дефайны в зависимости от желаемого функционала.
  • После чего радуемся возможности полноценно выводить float-ы.
 

Garry

New member
У кого нибудь получилось прикрутить стандартные putchar и getchar из stdio. У меня по аналогии с stm32 не получилось.
 

ejsanyo

Active member
У кого нибудь получилось прикрутить стандартные putchar и getchar из stdio. У меня по аналогии с stm32 не получилось.
А собственно, что они, по сути, делают в контроллерах и для его нужны? В любом случае ведь придётся сочинять какой-нибудь свой "UART_putchar()", чтобы ввод-вывод работал на самом деле, а не в условный /dev/null. Понятно, что ими пользуются стандартные же printf и scanf, но нормальные библиотеки позволяют и переназначить ввод-вывод на свои функции. Может вы об этом спрашиваете? В CMSIS, например, это делается, через stdout_putchar/stdout_getchar. Как оно в местном наборе стандартных библиотек, я, честно говоря, не знаю, да и не особо разбирался, поскольку вроде и японский xprintf устраивает. А в нём это делается через xdev_out/xdev_in.
 

Garry

New member
Вопрос был чисто спортивный. Часто из-за нехватки времени нет возможности разбираться как перенаправляются потоки у микрона. Пока допилил xprint. Будет время разберёмся.
 
Сверху