Неправильный вывод sprintf C51 8051 MCU встроенная система
У меня есть следующий фрагмент кода C для микроконтроллера AT89S52:
unsigned char x = 0x10;
unsigned char str[21];
sprintf(str, "%u", (x >> 4) );
Прототип функции sprintf в stdio.h:
extern int sprintf (char *, const char *, ...);
Может кто-нибудь сказать мне, почему моя строка содержит "256" вместо "1"?, Переменная x даже не достаточно велика, чтобы содержать значение 256.
Я компилирую с KEIL uVision 5, используя стандартную библиотеку stdio.h.
Если я использую:
void UlToStr(char *s, unsigned long bin, unsigned char n)
{
s += n;
*s = '\0';
while (n--)
{
*--s = (bin % 10) + '0';
bin /= 10;
}
}
вместо sprintf строка содержит "1".
Я проверяю содержимое строки, распечатывая ее через char-LCD 40x4 (контроллер, совместимый с KS 0066)
str_lecd1(str);
со следующими функциями:
void str_lcd1(unsigned char *a)
{
int i;
for(i=0;a[i]!='\0';i++)
data_lcd1(a[i]);
delay(10);
}
void data_lcd1(unsigned char x)
{
P1 = x;
rs = 1;
en1 = 1;
delay(4);
en1=0;
delay(4);
}