Перейти к содержанию
    

Не получается склеить файлы проекта в STVD COSMIC

 

Здравствуйте, коллеги!

Работал всё время с контроллерами 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? Прошу попробовать скомпилить этот проект. Уже и не знаю, то ли компилятор глючит, то ли среда, хотя качал с офф сайта, с лицензией.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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-файл сам в себя???  :wacko2:  Такое никакому компилятору не понравится.

Кроме того - определение переменных (unsigned char point_1) делается в .c-файлах, а не в .h-файлах.

Да и никакой "защитой от двойного включения хедеров" тут даже и не пахнет. Посмотрите любой пример как правильно нужно делать.

 

Цитата

Уже и не знаю, то ли компилятор глючит, то ли среда, хотя качал с офф сайта, с лицензией.

Почему-то каждый чайник, написав кучу галиматьи, всегда винит компилятор.....  :russian_ru:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 minutes ago, jcxz said:

И что же Вы тут делаете? Пытаетесь включить .h-файл сам в себя???  :wacko2:  Такое никакому компилятору не понравится.

Это просто был один из вариантов борьбы с руганью компилятора.

 

8 minutes ago, jcxz said:

Кроме того - определение переменных (unsigned char point_1) делается в .c-файлах, а не в .h-файлах.

Что-то в COSMIC намудрили или Вы не правы. Как же я буду использовать переменную, объявленную в .с-файле, в других файлах проекта?

13 minutes ago, jcxz said:

Да и никакой "защитой от двойного включения хедеров" тут даже и не пахнет. Посмотрите любой пример как правильно нужно делать.

В общем, критики дох... , а толку - ноль. Сплошная демагогия.

15 minutes ago, jcxz said:

Почему-то каждый чайник, написав кучу галиматьи, всегда винит компилятор.....  :russian_ru:

Написано кучу букв, а вместо помощи "чайнику" - один пшик. Как говорил мой отец, царство ему небесное, говори побольше и чтобы никто ничего не понял - сойдёшь за умного.

При крепил же к сообщению файлы, если знаешь - ответь, откорректируй, как должно быть. Это же не трудно, я же не прошу написать мне рабочую программу для смартфона. Если демагог-умник, проходи мимо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

50 минут назад, Сиг сказал:

говори побольше и чтобы никто ничего не понял - сойдёшь за умного.

Да, уже вижу - медицина тут бессильна.  :unknw:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 minutes ago, jcxz said:

Да, уже вижу - медицина тут бессильна.  :unknw:

О, Вы и в медицине разбираетесь?! :crazy: Порассуждать о медицине - это вам на другой форум надо. nurse.gif

Я же сказал, демагоги проходят мимо. :bye:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вам все правильно сказали, а вы слушать не хотите, зачем тогда спрашивать?

Хидеры рекурсивно вкладывать не нужно. Определения, по которым компилятор выделяет память, должны находится в .c файлах.

2 часа назад, Сиг сказал:

Как же я буду использовать переменную, объявленную в .с-файле, в других файлах проекта?

Добавьте к определению переменной в .h файле слово extern.
И почитайте, что оно значит. Компилятор тут совершенно не причем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

22 минуты назад, Baser сказал:

Добавьте к определению переменной в .h файле слово extern.

Тогда оно станет объявлением переменной. И будет ругаться уже компоновщик.  :biggrin:

Впрочем - ТС всё равно не понимает между ними разницы. И читать ничего не хочет....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 */

попробуйте так, должно стать лучше. Источники ошибок вам уже указали.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 hours ago, heavyC1oud said:

попробуйте так, должно стать лучше. Источники ошибок вам уже указали.

О, огромнейшее спасибо Вам, добрый человек!!! :thank_you2: Не перевелись ещё на Земле люди, которые умеют читать сообщения и главное - понимать их. :thank_you2:
Всё прекрасно заработало! При работе с PIC в xc8 таких сложностей нет. Ладно, буду привыкать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...