Я пытаюсь отобразить отформатированную строку на TFT-дисплее с помощью микроконтроллера TI C2000. Для этого я использую следующую функцию.
void text_writeFormatAtPoint(fontHeader_t font, uint16_t x, uint16_t y, textAlignment_t align, char *fmt, ...) {
va_list lst;
char s[64];
va_start(lst, fmt);
vsnprintf(s, 63, fmt, lst);
va_end(lst);
text_writeTextAtPoint(font, s, x, y, align);
}
Я вызываю функцию со следующей строкой.
text_writeFormatAtPoint(f_12x16, 0, clock->face.y+30, CENTER, "%2d:%02d:%02d", hours, mins, secs);
На другом микроконтроллере это работает точно так, как ожидалось. Однако в этом случае в строку помещаются только часы и минуты, а место секунд остается на 00
. Благодаря отладке я убедился, что переменная secs
содержит правильное значение и что s
неверно, а не код дисплея. Есть ли какая-то особенность vsnprintf()
, которую я пропускаю, или это может быть ошибкой в реализации функции TI?
Если я сделаю следующее
text_writeFormatAtPoint(f_12x16, 0, clock->face.y+30, CENTER, "%2d:%02d:%02d:%02d", hours, mins, secs, secs);
Самое правое место обновлений, но не нормальное.