Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Warnig [Pe167]
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Igor26
Уважаемые коллеги! Объясните пожалуйста, что не так. Компилирую файл:

unsigned char Buff[xx];

void F1(void)
{
-----------
Func(Buff);
-----------
}
Объявляю массив Buff[xx] в хидере File1.h следующим образом: extern unsigned char Buff[xx];
Компиляция этого файла проходит прекрасно.

Есть в проекте другой файл:

#include "File1.h"

void F2(void)
{
-------------
Func(Buff);
-------------
}
Так вот, при компиляции этого файла, выдается следующее:
Warning[Pe167]: argument of type "char *" is incompatible with parameter of type "unsigned char *"

Прототип функции Func: void Func(unsigned char *XXX) и она расположена в третьем файле. Хидер
с её прототипом подключен в обоих файлах.

Почему компилятор в этом случае стал считать, что входной параметр функции Funk типа CHAR, ведь
явно же указано, что UNSIGNED CHAR? smile3046.gif

Спасибо.
haker_fox
Цитата
Объявляю массив Buff[xx] в хидере File1.h следующим образом: extern unsigned char Buff[xx];
Компиляция этого файла проходит прекрасно.

Интересно, а вот у меня компилятор наоборот ругается на такое обяъявление массива. А вот так, все ОК: extern unsigned char Buff[];

З.Ы. Компилятор IAR EWAVR 4.11A
radist
Дело в том, что компилятор языка С по-разному работает с именами массивов и указателями при размещении массивов и указателей на них в разных файлах (ну так устроен компилятор, что подеаешь!). Поэтому, чтобы проблем избёжать лучше сделать так:
"
unsigned char Buff[xx];
unsigned char * ptrBuff=Buff;

void F1(void)
{
-----------
Func(ptrBuff);
-----------
}
"
Объявлять массив Buff[xx] в хидере File1.h следующим образом: extern unsigned char *ptrBuff;

Соответственно, второй файл:
"
#include "File1.h"

void F2(void)
{
-------------
Func(ptrBuff);
-------------
}
"
IgorKossak
Цитата(radist @ Oct 26 2005, 08:39)
...unsigned char * ptrBuff=Buff;
...
*

Это же лишняя переменная в памяти.
Тогда уж лучше в хедере обьявить:
const unsigned char * ptrBuff=Buff;

Если поможет.
BVU
Несомненно, что разные компиляторы имеют свои особенности (все зависит от производителя). Но если данный массив объявить для всего проекта, как глобальный - он должен работать однозначно в любом файле проекта (это уже стандарт языка 'C').
Rash
Я сделал так в хидере

Mas.h
Код
extern unsigned char A[5];


в Mas.с файле
Код
unsigned char A[5] = {4, 1, 3, C, 0};

а потом в любом *.с файле вызываешь без проблем. IAR4.11a
Igor26
Всем большое спасибо! Проблема решена. cheers.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.