@ AdamHaun to wszystko, czego potrzebujesz, dzięki sprintf()
czemu łatwo jest utworzyć ciąg, a następnie wysłać go. Ale jeśli naprawdę chcesz mieć własną printf()
funkcję, to Variable Argument Functions (va_list) jest właściwą drogą.
Z va_list
niestandardową funkcją drukowania wygląda następująco:
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
void vprint(const char *fmt, va_list argp)
{
char string[200];
if(0 < vsprintf(string,fmt,argp)) // build string
{
HAL_UART_Transmit(&huart1, (uint8_t*)string, strlen(string), 0xffffff); // send message via UART
}
}
void my_printf(const char *fmt, ...) // custom printf() function
{
va_list argp;
va_start(argp, fmt);
vprint(fmt, argp);
va_end(argp);
}
Przykład użycia:
uint16_t year = 2015;
uint8_t month = 12;
uint8_t day = 18;
char* date = "date";
// "Today's date: 2015-12-18"
my_printf("Today's %s: %d-%d-%d\r\n", date, year, month, day);
Zwróć uwagę, że chociaż to rozwiązanie zapewnia wygodną funkcję, ale jest wolniejsze niż wysyłanie surowych danych lub używanie parzystości sprintf()
. Myślę, że w przypadku dużych danych nie będzie to wystarczające.
Inną opcją i prawdopodobnie lepszą opcją jest użycie ST-Link, debuggera SWD wraz z narzędziem ST-Link. I użyj Printf za pośrednictwem przeglądarki SWO , oto instrukcja ST-Link Utility , odpowiednia część zaczyna się na stronie 31.
Printf przez SWO Viewer wyświetla dane printf wysłane z celu przez SWO. Pozwala wyświetlić przydatne informacje o działającym oprogramowaniu układowym.