Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Предупреждение при передаче строки как аргумент функции в Keil
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
MaxiMuz
В отдельном подключенном модуле описана ф-ция:
Код
void LCD_STRING (u8 *STRING)
{
    while (*STRING) {LCD_DAT (*STRING); STRING++;}
}

в майне строчка с вызовом
Цитата
LCD_STRING ("Start_LCD");
помечается желтым треугольником с восклицательным знаком и сообщением:
passing `char [10]` to parameter of type `u8 *` (aka `usigned char *`) converts between pointers to integer types with .... дальше сообщение выходит за рамки экрана и недоступно к прочтению.
Что за предупреждение , что не так ?

п.с. с ф-цией LCD_DAT (*STRING); все впорядке
Палыч
Цитата(MaxiMuz @ Feb 26 2014, 16:15) *
Что за предупреждение , что не так ?

Вероятно, в main не известен тип параметра функции LCD_STRING.
Прототип функции
Код
void LCD_STRING(u8 *);

в модуле с main присутствует?
MaxiMuz
Цитата(Палыч @ Feb 26 2014, 15:24) *
Прототип функции
Код
void LCD_STRING(u8 *);

в модуле с main присутствует?

нет.
Попробывал поместил в начало описание - результат тот же.
SlavaV
Если обращаться к языку С то вы пытаетесь привести массив символов к указателю на строку символов которая ограниченна 0

нужно попробовать строку присвоить переменной тип u8 * и передать её функции
Сергей Борщ
Цитата(MaxiMuz @ Feb 26 2014, 14:15) *
что не так ?
Найдите 2 отличия:
"char" и "unsigned char"
Цитата(MaxiMuz @ Feb 26 2014, 14:15) *
с ф-цией LCD_DAT (*STRING); все впорядке
Нет, с ней не все в порядке.
Ваша функция печатает строку символов? Ну так и объявите ее как принимающую указатель на char. Откуда эта патологическая тяга использовать unsigned типы где нужно и где не нужно? Компилятор ругается правильно: вы хотели, чтобы функция принимала указатель на беззнаковые байты, а пихаете ей указатель на символы.
mdmitry
Цитата(MaxiMuz @ Feb 26 2014, 16:15) *
Код
void LCD_STRING (u8 *STRING)

функция требует аргумента указатель на u8.
Код
LCD_STRING ("Start_LCD");

Передается строка, имеющая тип char*.
О чем Вам и сообщил компилятор:
Код
passing `char [10]` to parameter of type `u8 *` (aka `usigned char *`)


Попробуйте грубо явное преобразование типов (хотя это плохая манера):
Код
LCD_STRING ((u8*)"Start_LCD");


P.S. Сергей Борщ опередил.
MaxiMuz
Цитата(Сергей Борщ @ Feb 26 2014, 16:43) *
Найдите 2 отличия:
"char" и "unsigned char"

если в описании `u8 *` меняю на
Код
void LCD_STRING (char *STRING)
сразу ошибка - конфликт типов.

Цитата(mdmitry @ Feb 26 2014, 16:49) *
Попробуйте грубо явное преобразование типов (хотя это плохая манера):
Код
LCD_STRING ((u8*)"Start_LCD");

так действительно работает, предупреждение пропало.
Но почему указатель на char не прокатывает ?
XVR
Цитата(MaxiMuz @ Feb 27 2014, 12:05) *
если в описании `u8 *` меняю на
Код
void LCD_STRING (char *STRING)
сразу ошибка - конфликт типов.
Нужно void LCD_STRING (const char *STRING)
Сергей Борщ
Цитата(MaxiMuz @ Feb 27 2014, 10:05) *
сразу ошибка - конфликт типов.
Полностью текст ошибки приведите. А то непонятно, где она возникает - то ли у вас не совпадает объявление с определением, то ли внутри функции дальнейшая работа с параметром приводит к ошибке, то ли в точке вызова что-то не сходится.
И да, согласен с XVR - если функция не меняет передаваемый по указателю параметр, то очень полезно объявлять его как указатель на const.
MaxiMuz
Цитата(Сергей Борщ @ Feb 27 2014, 12:46) *
Полностью текст ошибки приведите. А то непонятно, где она возникает - то ли у вас не совпадает объявление с определением, то ли внутри функции дальнейшая работа с параметром приводит к ошибке, то ли в точке вызова что-то не сходится.
в самом первом посте приведен текст, только не ошибки , а предупреждения отмеченного восклицательным знаком в желтом треугольнике. но к сожалению текст предупреждения не виден до конца. в консоле результатов компиляции , это предупреждение вообще не печатается.


Цитата(MaxiMuz @ Feb 27 2014, 11:05) *
если в описании `u8 *` меняю на
Код
void LCD_STRING (char *STRING)
сразу ошибка - конфликт типов.
Извиняюсь ! В описании функции тип аргумента поменял , а про заголовочный файл забыл. Вот уже эти обьявления ..
в варианте:
Код
void LCD_STRING (char *STRING)
{
    while (*STRING) {
        LCD_DAT (*STRING);
        STRING++;}
}

Код
LCD_STRING ("Start_LCD");
предупреждение пропало. и даже const не требует
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.