baghear писал(а):Есть такая функция
void show_string (unsigned char size,unsigned int start_x,unsigned int start_y,unsigned int color,unsigned int phone,const unsigned char *string)
последним параметром надо передать указатель
const unsigned char string_1 [] PROGMEM = "hello";
передаю вот так
show_string(3,4,2,0XAAAA,0XEEEE, &string_1);
Такой подход с легкой правкой имеет право на жизнь, можно использовать если требуется передавать строке начиная не с первого символа:
Код: Выделить всё
show_string(3,4,2,0XAAAA,0XEEEE, &string_1[3]);
Можно возразить, что написав
Код: Выделить всё
show_string(3,4,2,0XAAAA,0XEEEE, string_1 + 3);
мы достигнем того-же результата и покажемся себе в зеркале более продвинутыми, но по моему мнению, некоторая неуклюжесть первого варианта заставит потомков зацепится взглядом и таки заметить что там "не с нуля". Хотя комментарий, конечно, надёжнее...
baghear писал(а):
а ошибки не выдает когда передаю так
show_string(3,4,2,0XAAAA,0XEEEE, string_1);
Прочитал что при передаче массива по сути передаю указатель на первый элемент.
да,а прибавление к указателю целого числа N - суть смещение в массиве на N-ое количество элементов.
А если написать для эксперимента так:
то с некоторой долей вероятности можно получить от компилятора предупреждение о несоответствии типа указателя - поскольку строковый литерал дефолтного типа signed char* а в прототипе функции указан что нужен unsigned char*. Шибко переразвитые компиляторы зело полюбляют нас на этом подлавливать.
Удачи!