Добрый всем день! Народ подыму старую тему.
Люди, подскажите, что я делаю не так? переписываю драйвер для ГЖКИ 128х64 с винавра на иар
ИАР для АВР версия 4.21А.
пишу:
Код
#include <pgmspace.h>
....
//основная функция
int main(void) {
...
...
LoadBitmap(IMAGE);//////////// ОШИБКА Error[Pe167]
}
// функция для загрузки карты
void LoadBitmap(unsigned char *bitmap)
{
uint16_t i, j,by;
for(i=0; i<64; i+=8)
for(j=0; j<128; j++)
{
by = printf_P(bitmap++); /////////// ОШИБКА Error[Pe167]
ks0108GotoXY(j, i);
ks0108WriteData(by);
}
}
// и сама карта (массив)
#define LCD_WIDTH 128
const __flash uint8_t IMAGE[] = {
.....
.....
};
void LoadBitmap(uint8_t *bitmap);
Ну и соответственно и еррор:
Error[Pe167]: argument of type "unsigned char const __flash *" is incompatible with parameter of type "uint8_t *"
В общем на форуме видел сходную ветку : Как заставить помещать строки во флэш
созданную Протоссом, соответственно в опциях проекта в закладке "C compiler" -> "Extra Options"
поставил птицу "Use command line options" и набрал строчку --string_literals_in_flash
НИЧЕГО. В общем IgorKossak знает ответ но чего-то помоему недоговаривает.
Вобщем то ключевые слова signed и unsigned обычно применяются к обьектам, содержащим по смыслу числовые значения.
Что же касается символьных обьектов и строк на их основе, то общепринятым типом в этом случае является просто char.
Поэтому и обьявления в pgmspace.h вполне оправданные и корректные.
Я НХ не понял!!чёто туго
Решил проблему частично так, создал следующую функцию по совету &-rey :
Код
FuncFlash(char __flash *str_)
{
while (*str_++ != 0);
}
ну и соответственно ее вызов для чтения массива в памяти программ
by = FuncFlash((char __flash*)(bitmap++));
Но с использованием стандартных функций ИАР темно.
теперь выдаёт только одну туже ошибку на LoadBitmap(IMAGE);//////////// ОШИБКА Error[Pe167]
Error[Pe167]: argument of type "char const __flash *" is incompatible with parameter of type "char __flash **"
в общем прикреплю файлы, может кто поможет ? это не горит. Буду признателен по любой информации загрузки (выдачи) массива данных из памяти программ по определённому алгоритму.
Спасибо.
Прикрепленные файлы
ks0108.zip ( 58.28 килобайт )
Кол-во скачиваний: 28