Сиг 0 18 марта, 2021 Опубликовано 18 марта, 2021 · Жалоба Здравствуйте, коллеги! Работал всё время с контроллерами PIC, а сейчас необходимо сделать проект на STM8S003F3 в среде STVD компилятор COSMIC. Вот в чём проблема, не получается склеить файлы проекта. Для отработки сделал простейший проект, состоящий из двух файлов *.с и *.h, но компилятор ругается, то на "var_1a...var_3a multiply defined", то на "var_1a...var_3a undefined". При работе с PIC такого не наблюдал. Здесь же использую защиту от двойного включения хедеров, типа #ifndef __A_H #define __A_H #include "a.h" #endif всё равно ругается. Появилось подозрение, что компилятор игнорирует эту защиту. Привожу тексты файлов: main.c #include "main.h" void func_b(unsigned char yy); main() { func_a(point_1); return 0; } main.h #ifndef __MAIN_H #define __MAIN_H #include "a.h" #endif /* __MAIN_H */ a.c #include "a.h" void func_a(unsigned char xx) { var_1a = var_2a + var_3a + xx; } a.h #ifndef __A_H #define __A_H #include "a.h" #endif /* __A_H */ unsigned char point_1, var_1a, var_2a, var_3a; void func_a(unsigned char xx); Что не так? Что ему не нравится? Может, у кого-то, коллеги, есть STVD с COSMIC? Прошу попробовать скомпилить этот проект. Уже и не знаю, то ли компилятор глючит, то ли среда, хотя качал с офф сайта, с лицензией. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 18 марта, 2021 Опубликовано 18 марта, 2021 · Жалоба 27 минут назад, Сиг сказал: a.h #ifndef __A_H #define __A_H #include "a.h" #endif /* __A_H */ unsigned char point_1, var_1a, var_2a, var_3a; void func_a(unsigned char xx); Что не так? Что ему не нравится? И что же Вы тут делаете? Пытаетесь включить .h-файл сам в себя??? Такое никакому компилятору не понравится. Кроме того - определение переменных (unsigned char point_1) делается в .c-файлах, а не в .h-файлах. Да и никакой "защитой от двойного включения хедеров" тут даже и не пахнет. Посмотрите любой пример как правильно нужно делать. Цитата Уже и не знаю, то ли компилятор глючит, то ли среда, хотя качал с офф сайта, с лицензией. Почему-то каждый чайник, написав кучу галиматьи, всегда винит компилятор..... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сиг 0 18 марта, 2021 Опубликовано 18 марта, 2021 · Жалоба 6 minutes ago, jcxz said: И что же Вы тут делаете? Пытаетесь включить .h-файл сам в себя??? Такое никакому компилятору не понравится. Это просто был один из вариантов борьбы с руганью компилятора. 8 minutes ago, jcxz said: Кроме того - определение переменных (unsigned char point_1) делается в .c-файлах, а не в .h-файлах. Что-то в COSMIC намудрили или Вы не правы. Как же я буду использовать переменную, объявленную в .с-файле, в других файлах проекта? 13 minutes ago, jcxz said: Да и никакой "защитой от двойного включения хедеров" тут даже и не пахнет. Посмотрите любой пример как правильно нужно делать. В общем, критики дох... , а толку - ноль. Сплошная демагогия. 15 minutes ago, jcxz said: Почему-то каждый чайник, написав кучу галиматьи, всегда винит компилятор..... Написано кучу букв, а вместо помощи "чайнику" - один пшик. Как говорил мой отец, царство ему небесное, говори побольше и чтобы никто ничего не понял - сойдёшь за умного. При крепил же к сообщению файлы, если знаешь - ответь, откорректируй, как должно быть. Это же не трудно, я же не прошу написать мне рабочую программу для смартфона. Если демагог-умник, проходи мимо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 18 марта, 2021 Опубликовано 18 марта, 2021 · Жалоба 50 минут назад, Сиг сказал: говори побольше и чтобы никто ничего не понял - сойдёшь за умного. Да, уже вижу - медицина тут бессильна. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сиг 0 18 марта, 2021 Опубликовано 18 марта, 2021 · Жалоба 20 minutes ago, jcxz said: Да, уже вижу - медицина тут бессильна. О, Вы и в медицине разбираетесь?! Порассуждать о медицине - это вам на другой форум надо. Я же сказал, демагоги проходят мимо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 18 марта, 2021 Опубликовано 18 марта, 2021 · Жалоба Вам все правильно сказали, а вы слушать не хотите, зачем тогда спрашивать? Хидеры рекурсивно вкладывать не нужно. Определения, по которым компилятор выделяет память, должны находится в .c файлах. 2 часа назад, Сиг сказал: Как же я буду использовать переменную, объявленную в .с-файле, в других файлах проекта? Добавьте к определению переменной в .h файле слово extern. И почитайте, что оно значит. Компилятор тут совершенно не причем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 18 марта, 2021 Опубликовано 18 марта, 2021 · Жалоба 22 минуты назад, Baser сказал: Добавьте к определению переменной в .h файле слово extern. Тогда оно станет объявлением переменной. И будет ругаться уже компоновщик. Впрочем - ТС всё равно не понимает между ними разницы. И читать ничего не хочет.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
heavyC1oud 0 18 марта, 2021 Опубликовано 18 марта, 2021 · Жалоба main.c #include "main.h" void func_b(unsigned char yy); int main(void) { func_a(point_1); return 0; } main.h #ifndef __MAIN_H #define __MAIN_H #include "a.h" #endif /* __MAIN_H */ a.c #include "a.h" unsigned char point_1, var_1a, var_2a, var_3a; void func_a(unsigned char xx) { var_1a = var_2a + var_3a + xx; } a.h #ifndef __A_H #define __A_H extern unsigned char point_1, var_1a, var_2a, var_3a; void func_a(unsigned char xx); #endif /* __A_H */ попробуйте так, должно стать лучше. Источники ошибок вам уже указали. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сиг 0 19 марта, 2021 Опубликовано 19 марта, 2021 · Жалоба 14 hours ago, heavyC1oud said: попробуйте так, должно стать лучше. Источники ошибок вам уже указали. О, огромнейшее спасибо Вам, добрый человек!!! Не перевелись ещё на Земле люди, которые умеют читать сообщения и главное - понимать их. Всё прекрасно заработало! При работе с PIC в xc8 таких сложностей нет. Ладно, буду привыкать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться