реклама на сайте
подробности

 
 
> Предупреждение при передаче строки как аргумент функции в Keil
MaxiMuz
сообщение Feb 26 2014, 12:15
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 253
Регистрация: 15-04-10
Из: Волгоград
Пользователь №: 56 658



В отдельном подключенном модуле описана ф-ция:
Код
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); все впорядке
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Feb 26 2014, 13:43
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
MaxiMuz
сообщение Feb 27 2014, 08:05
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 253
Регистрация: 15-04-10
Из: Волгоград
Пользователь №: 56 658



Цитата(Сергей Борщ @ 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 не прокатывает ?
Go to the top of the page
 
+Quote Post
XVR
сообщение Feb 27 2014, 09:35
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(MaxiMuz @ Feb 27 2014, 12:05) *
если в описании `u8 *` меняю на
Код
void LCD_STRING (char *STRING)
сразу ошибка - конфликт типов.
Нужно void LCD_STRING (const char *STRING)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 12:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.01393 секунд с 7
ELECTRONIX ©2004-2016