@ AdamHaun'un cevabı tek ihtiyacınız olan sprintf()
şey, bir dize oluşturmak ve daha sonra göndermek kolaydır. Ancak gerçekten printf()
kendinize ait bir işlev istiyorsanız , Değişken Bağımsız Değişken İşlevleri (va_list) yoldur.
İle va_list
aşağıdaki gibi bir özel baskı fonksiyonu görünüyor:
#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);
}
Kullanım örneği:
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);
Bu çözümün size kullanışlı bir işlev sunmasına rağmen, ham veri göndermekten ve hatta kullanmaktan daha yavaş olduğunu unutmayın sprintf()
. Yüksek veri hızları ile bunun yeterli olmayacağını düşünüyorum.
Başka bir seçenek ve muhtemelen daha iyi bir seçenek ST-Link, SWD hata ayıklayıcı ST-Link Utility ile birlikte kullanmaktır. Ve SWO görüntüleyici üzerinden Printf kullanın , burada ST-Link Utility kılavuzu , ilgili bölüm sayfa 31'de başlıyor.
SWO ile Printf Görüntüleyicisi, hedeften SWO aracılığıyla gönderilen printf verilerini görüntüler. Çalışan ürün yazılımı hakkında bazı yararlı bilgilerin görüntülenmesini sağlar.