Цитата(GDI @ Aug 1 2007, 11:16)

iar ругается на такое, типа двойное объявление или что то типа того...
А вот не надо делать двойное
объявление 
. А надо различать
объявление и
выделение памяти.
Файл functions.h:
Код
// ...
extern unsigned char Variable;
// ...
Файл functions.c:
Код
#include "functions.h"
// ...
unsigned char Variable;
// ...
Файл main.c:
Код
#include "functions.h"
// ...
Variable = 1;
// ...
Так вот в functions.h содержится именно
объявление. Просмотрев строку extern unsigned char Variable; компилятор просто "держит в уме", что где-то эта переменная будет, и знает, каким образом с ней обращаться. Включение "functions.h" в main.c не генерирует никакого кода и не выделяет никакой памяти. На это указывает ключевое слово
extern.А вот в functions.c происходит реальное выделение памяти под unsigned char Variable; . Поскольку в данном случае тип переменной согласуется с тем, что было объявлено в "functions.h", то все в порядке.