@ AdamHaun menjawab semua yang Anda butuhkan, dengan sprintf()
mudah membuat string lalu mengirimkannya. Tetapi jika Anda benar-benar menginginkan printf()
fungsi Anda sendiri, maka Variable Argument Functions (va_list) adalah caranya.
Dengan va_list
fungsi cetak khusus tampak seperti berikut:
#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);
}
Contoh penggunaan:
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);
Perhatikan bahwa sementara solusi ini memberi Anda fungsi yang nyaman untuk digunakan, tetapi lebih lambat daripada mengirim data mentah atau bahkan menggunakan sprintf()
. Dengan flatates tinggi saya pikir itu tidak akan cukup.
Opsi lain, dan mungkin opsi yang lebih baik adalah menggunakan ST-Link, SWD debugger bersama dengan ST-Link Utility. Dan gunakan Printf via SWO viewer , di sini adalah manual ST-Link Utility , bagian yang relevan dimulai pada halaman 31.
Printf via SWO Viewer menampilkan data printf yang dikirim dari target melalui SWO. Memungkinkan untuk menampilkan beberapa informasi bermanfaat tentang firmware yang sedang berjalan.