ЖК-дисплей AVR ATMega169P с использованием переполнения стека

Я пытаюсь что-то отобразить на ЖК-экране микроконтроллера ATMega 169P. При использовании C я могу использовать этот код:

char str[50];
int value = 100;
str = sprintf(str, "some text %d", value);
LCD_puts(str);

и будет отображаться нормально. LCD_puts — это метод, данный нам моим учителем.
Тем не менее, я пытаюсь использовать C ++ для своего назначения, и я не могу заставить LCD_puts () работать. Я использовал sprintf и snprintf и получаю следующую ошибку компилятора при использовании snprintf. Код, который я использую, также находится ниже. (Извиняюсь за форматирование, я не могу опубликовать фотографии).

char str[100];
int rpm = 100; //Genaric value

snprintf(str, 100, '%d in',rpm);
LCD_puts(str);

недопустимое преобразование из ‘char *’ в ‘unint8_t *’ {aka unsigned char *} ‘[- fpermissive]

Я не думаю, что мой точный код требуется, мне нужно только знать, почему эта ошибка будет вызвана, и если есть функция C ++, которая эквивалентна sprintf, которую я мог бы использовать. Однако я опубликую свой точный код при необходимости.

0

Решение

Вы пытаетесь сохранить массив без знака в массиве со знаком. Либо объявите str как неподписанный символ:

unsigned char str[100];

или приведите str в аргументе как неподписанный символ:

snprintf((uint8_t*)str, 100, '%d in',rpm);

В этом случае uint8_t а также unsigned char эквивалентны.

2

Другие решения