1) у тебя переменная UNSIGNED, а модификатор - SIGNED. Соответственно если ты попытаешься вывести значение 129, то в терминале увидишь -1. Используй модификатор %u
2) тип возвращаемого значения функции указывается только при объявлении и определении функций
3) зато функция sprint(n)f возвращает количество записанных в буффер байт, т.е. не надо каждый символ проверять на ноль, надо просто возвращенное функцией количество раз сунуть байт в УАРТ.
- Код: Выделить всё • Развернуть
unsigned char var=129;
char str[16];
int str_length = 0;
str_length = snprintf(str,16,"Var %u",var);
while (str_length--) usart_write(str[str_length]);
Хотя там странное что-то возвращает: Number of characters written if successful or negative value if an error occurred. If the resulting string gets truncated due to buf_size limit, function returns the total number of characters (not including the terminating null-byte) which would have been written, if the limit was not imposed.
Добавлено спустя 1 минуту 31 секунду:по-моему я дважды налетел на OBO - off by one
так и не научился это четко определять
Добавлено спустя 1 минуту 28 секунд:- Код: Выделить всё • Развернуть
unsigned char var=129;
char str[16];
int str_length = 0;
str_length = snprintf(str,16,"Var %u",var);
for (int i = 0; i < str_length; i++)
{
usart_write(str[i]);
}