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