Мне пришлось импортировать проект в AS 7
Я правильно понимаю, что вы получаете вот такие ошибки?
Код
Severity Code Description Project File Line
Error ld returned 1 exit status Cloc_Meteo1_2 collect2.exe 0
Error recipe for target 'Cloc_Meteo1_2.elf' failed Cloc_Meteo1_2 D:\Poligon\Cloc_Meteo1_2\default\Makefile 129
Error multiple definition of `Smil_char' Cloc_Meteo1_2 D:\Poligon\Cloc_Meteo1_2\Symbol.c 10
Error multiple definition of `sign_clcdur' Cloc_Meteo1_2 D:\Poligon\Cloc_Meteo1_2\Pikout.c 30
Error multiple definition of `Sand_char' Cloc_Meteo1_2 D:\Poligon\Cloc_Meteo1_2\Symbol.c 10
Error multiple definition of `Pres_char' Cloc_Meteo1_2 D:\Poligon\Cloc_Meteo1_2\Symbol.c 10
Error multiple definition of `Line_message' Cloc_Meteo1_2 D:\Poligon\Cloc_Meteo1_2\default\Symbol.o 1
Error multiple definition of `insg' Cloc_Meteo1_2 D:\Poligon\Cloc_Meteo1_2\default\Pikout.o 1
Error multiple definition of `Humi_char' Cloc_Meteo1_2 D:\Poligon\Cloc_Meteo1_2\Symbol.c 10
Error multiple definition of `Hood_char' Cloc_Meteo1_2 D:\Poligon\Cloc_Meteo1_2\Symbol.c 10
Error multiple definition of `Home_char' Cloc_Meteo1_2 D:\Poligon\Cloc_Meteo1_2\Symbol.c 10
Error multiple definition of `Grad_char' Cloc_Meteo1_2 D:\Poligon\Cloc_Meteo1_2\Symbol.c 10
Error multiple definition of `Bell_char' Cloc_Meteo1_2 D:\Poligon\Cloc_Meteo1_2\Symbol.c 10
Пройдемся по ошибке
Sand_char
Делаем поиск по проекту, видим, что в файле Symbol.h определено следующее:
Код
const byte Sand_char[] PROGMEM={0,27,0,4,0,14,17,0}; //Загружаемый символ грусти
Ищем какие файлы инклюдят этот Symbol.h
#include "Symbol.h" имеется в Base.c и в Symbol.c
Вы же помните да, что #include тупо добавляет текст из .h файла в .c файл?
Вот мы и имеем ситуацию, когда в двух единицах трансляции(.с файлах) определена ГЛОБАЛЬНАЯ переменная const byte Sand_char[]
Тоесть на выходе будут два .obj файла с такой перменной с двумя разными адресами в памяти.
Линкер хочет при упоминании Sand_char найти адрес и подставить, но не может т.к. есть два кандидата с одинаковыми именами.
И такая ситуация у вас там похоже по всем ошибкам. Как только вы поймете их природу и всё то, что я вам описал по поводу процесса сборки проекта - сможете пофиксить.
Ситуацию с Sand_char можно разрулить несколькими способами:
1. добавить static
Код
static const byte Sand_char[] PROGMEM={0,27,0,4,0,14,17,0}; //Загружаемый символ грусти
Таким образом каждый .c файл себе заинклюдит этот .h файл и получит статик, область видимости которого ограничена одной единицей трансляции(т.е. только этим компилируемым .с файлом).
2. У вас уже есть файл Symbol.c. Отлично!
Перемещаем вот это
Код
const byte Sand_char[] PROGMEM={0,27,0,4,0,14,17,0}; //Загружаемый символ грусти
в Symbol.c
А в Symbol.h пишем
Код
extern const byte Sand_char[];
Я сейчас сходу не уверен как это скомпилится, возможно надо будет по-танцевать с прогмэмом, но смысл этого всего в следующем:
Переменная глобальная переменная Sand_char будет экспортирована только из одного .obj файла(Symbol.obj) а все остальный .c файлы которые сделают #include "Symbol.h" - получат представление о том, что есть такая переменная описанная так-то, но сама эта переменная определена где-то в другом модуле(слово extern). Таким образом у линкера будет только одна копия Sand_char и он сможет подставить ее адрес везде где она используется.
Второй способ мне в данном случае нравится больше и кажется более корректным.
The truth is out there...