MMP 0 7 апреля, 2006 Опубликовано 7 апреля, 2006 · Жалоба Проблема с выводом переменной на LCD: есть функция: void LCD4_PutS(unsigned char *data) { unsigned char c = 0; while (data[c] != 0) { LCD4_WR4bits( data[c] >> 4); LCD4_WR4bits( data[c++]); DELAY; } } Пишув main LCD4_PutS("Ля-ля"); все ок задаю впеременную unsigned char Mes0[]={"Ля-ля"}; или unsigned char Mes0[]={"131,124,131"}; и пишу LCD4_PutS(Mes0); то выдвет ошибку multiple define Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 7 апреля, 2006 Опубликовано 7 апреля, 2006 · Жалоба unsigned char *Mes0="Ля-ля"; unsigned char Mes0[16]={ '1', '3', '1', '/0' }; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 7 апреля, 2006 Опубликовано 7 апреля, 2006 · Жалоба Не LCD4_PutS(Mes0); а LCD4_PutS(&Mes0); надо. У вас же указатель в функцию передается, а не значение переменной. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MMP 0 7 апреля, 2006 Опубликовано 7 апреля, 2006 · Жалоба Спасибо, но ни то не другое не помогло. Сам понимаю, что где-то не стыковка в определении переменных, но уже просто заглючил. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 7 апреля, 2006 Опубликовано 7 апреля, 2006 · Жалоба Я конечно не великий знаток Си, но что мешает написать так? void LCD4_PutS(unsigned char *data) { while (*data != 0) { LCD4_WR4bits(*data>>4); LCD4_WR4bits(*data++); DELAY; } } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 7 апреля, 2006 Опубликовано 7 апреля, 2006 · Жалоба Не LCD4_PutS(Mes0); а LCD4_PutS(&Mes0); надо. У вас же указатель в функцию передается, а не значение переменной. Я Вас умоляю! Два перечисленных ранее варианта формально должны компилироваться и работать - и при всей НЕНУЖНОЙ запутанности инициализации речь может идти о личных пристрастиях КОНКРЕТНОГО компилятора. А вот предложенный вами вариант, напротив, должен отвергнуть ЛЮБОЙ компилятор. Ну полные непонятки с адресом Mes0 :-) У Mes0[0] есть адрес и &Mes0[0] полностью эквивалентно Mes0. LCD4_PutS(Mes0); то выдвет ошибку multiple define Может ХОТЬ СТРОЧКУ УКАЖЕТЕ НА КОТОРУЮ РУГАЕТСЯ! Или Вы чего-то не договариваете, либо Mes0 уже где-то существует, либо .... а нет других вариантов. Я конечно не великий знаток Си, но что мешает написать так? Ничего не мешает и 'правильнее', только к вопросу отношения не имеет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MMP 0 7 апреля, 2006 Опубликовано 7 апреля, 2006 · Жалоба вот проект на ICC 6.31 time.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 7 апреля, 2006 Опубликовано 7 апреля, 2006 · Жалоба вот проект на ICC 6.31 Ну и невооруженным взглядом видны ДВА Mes0 - в lcd.c - в all.h Посему и ругань при компиляции lcd.c в который включен all.h в all.h естественно должно быть: extern unsigned char Mes0[]; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MMP 0 7 апреля, 2006 Опубликовано 7 апреля, 2006 · Жалоба Все понял ошибку. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться