@ অ্যাডামহান এর উত্তরটি আপনার যা দরকার 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()। উচ্চ ডেটরেট সহ আমি মনে করি এটি যথেষ্ট হবে না।
আর একটি বিকল্প, এবং সম্ভবত আরও ভাল বিকল্পটি এসটি-লিংক ইউটিলিটি সহ এসটি-লিংক, এসডাব্লুডি ডিবাগার ব্যবহার করা। এবং এসডাব্লুও দর্শকের মাধ্যমে প্রিন্টফ ব্যবহার করুন , এখানে এসটি-লিংক ইউটিলিটির ম্যানুয়াল রয়েছে , প্রাসঙ্গিক অংশটি পৃষ্ঠা 31 এ শুরু হয়।
এসডাব্লুও ভিউয়ারের মাধ্যমে মুদ্রণযন্ত্রটি এসডাব্লুওয়ের মাধ্যমে লক্ষ্য থেকে প্রেরিত প্রিন্টফ ডেটা প্রদর্শন করে। এটি চলমান ফার্মওয়্যারটিতে কিছু দরকারী তথ্য প্রদর্শন করতে দেয়।