@ एडमहौन का जवाब आपको चाहिए, इसके साथ sprintf()
एक स्ट्रिंग बनाना और फिर भेजना आसान है। लेकिन अगर आप वास्तव printf()
में अपना खुद का एक फ़ंक्शन चाहते हैं, तो वैरिएबल आर्ग्यूमेंट फ़ंक्शंस (va_list) का तरीका है।
साथ va_list
निम्नलिखित की तरह एक कस्टम प्रिंट समारोह दिखता है:
#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);
}
उपयोग उदाहरण:
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);
ध्यान दें कि जब यह समाधान आपको उपयोग करने के लिए सुविधाजनक फ़ंक्शन देता है, लेकिन यह कच्चे डेटा भेजने या यहां तक कि उपयोग करने की तुलना में धीमा है sprintf()
। मुझे लगता है कि यह पर्याप्त नहीं होगा।
एक और विकल्प, और शायद बेहतर विकल्प एसटी-लिंक यूटिलिटी के साथ एसटी-लिंक, एसडीडी डीबगर का उपयोग करना है। और SWO दर्शक के माध्यम से Printf का उपयोग करें , यहां ST-Link उपयोगिता का मैनुअल है , प्रासंगिक भाग 31 पृष्ठ पर शुरू होता है।
SWO व्यूअर के माध्यम से प्रिंटफ़, SWO के माध्यम से लक्ष्य से भेजे गए प्रिंटफ़ डेटा को प्रदर्शित करता है। यह चल रहे फर्मवेयर पर कुछ उपयोगी जानकारी प्रदर्शित करने की अनुमति देता है।