Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Сode Vision AVR, проблемы при переходе на новую версию
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Nikkolaj
Добрый день.
У меня такой вопрос.
Есть у меня проект, который я когда то сделал на Сode Vision AVR версия 1.25.9.
Контроллер ATmega16.

Возникла необходимость внести изменения в алгоритм.
С Сode Vision AVR я уже давно не работал, перешёл на IAR.
Поставил новую версию Сode Vision AVR, версия 2.05.0.
Компилируется проект нормально.
А при построении проекта выдаёт сообщение: Cant open file: ....\file1.o

Проект состоит из 3 СИ файлов, назовём их
filemain.c
file1.c
file2.c

И двух header. файлов:
file1.h
file2.h
В проект включены только СИ файлы, а header файлы подключены директивой #include.

В окне навигатора, в папке Проекта естественно находятся все три СИ файла.
После компиляции, в папке Проекта так и остаются три СИ файла,
а вот в папке Headers почему то находятся и СИ файлы, и Headers файлы:
file1.c
file1.h
mega16.h
file2.c
file2.h

Почему компилятор помещает file1.c, file2.c в папку Headers я не понимаю.
Пробовал менять конфигурацию проекта, результат такой же.

Посоветуйте что то толковое.

Не знаю, имеет ли это значение, но всё же, проект создавался под ОС Windovs XP, а сейчас стоит Windovs.7
Вроде бы вся информация.


hd44780
Сейчас специально откомпилил свой старый проект из 1.25 в 2.05 - всё нормально. Как будет на железяке работать - не знаю sm.gif
В папке Headers только .h.
Попробуйте переставить его.. Может криво стал. Могу дать свой дистрибутив.
Marian
Цитата(Nikkolaj @ Apr 19 2012, 14:04) *
Cant open file: ....\file1.o

Путь без русских букв?
Nikkolaj
Спасибо за ответ.
Хорошо, дайте Ваш дистрибутив, попробую переставить.

Цитата
Путь без русских букв?


Да, путь без русских букв.
Он вообще формирует только один файл с расширением .о filemain.о
Marian
Выложите проект, посмотрим.

hd44780
Цитата(Nikkolaj @ Apr 19 2012, 16:14) *
Хорошо, дайте Ваш дистрибутив, попробую переставить.


Ловите - http://ifolder.ru/30022151
Сами разберётесь, что там к чему rolleyes.gif . Вирусов нет.
Nikkolaj
Добрый день.
Спасибо за дистрибутив, я его скачал, но устанавливать пока не стал.
Я нашёл в чём была ошибка.
Я подключал к проекту все 3 файла в конфигурации по add files, а
в filemain.c у меня были директивы #include file1.c, #include file2.c.
Двойное подключение файлов компилятору и не нравилось.
Сейчас решил переделать правильно.
Из файла filemain.c директивы #include file1.c, #include file2.c удалил.
Добавил файл glob_defs.h для всех #define, и подключил его к нужным файлам.

Посоветуйте пожалуйста,
как праильно поступить с обявлением глобальных переменных,
которые используются в разных файлах.
mdmitry
Цитата(Nikkolaj @ Apr 20 2012, 13:45) *
Я подключал к проекту все 3 файла в конфигурации по add files, а
в filemain.c у меня были директивы #include file1.c, #include file2.c.
Двойное подключение файлов компилятору и не нравилось.

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


#include name.c очень опасное мероприятие, лучше избегать всячески. Есть случаи, когда это удобно, но это скорее исключения из правил.

Ссылки на глобальные переменные можно собрать в одном заголовочном файле (какой-нибудь globvar.h, не забыть сделать стражи вкючения в нем) и использовать в других файлах с кодом.
Nikkolaj
Цитата
Ссылки на глобальные переменные можно собрать в одном заголовочном файле (какой-нибудь globvar.h, не забыть сделать стражи вкючения в нем) и использовать в других файлах с кодом.


Спасибо за ответ.
Я тоже думал обявить все глобальные переменные в одном globvar.h файле.
Что такое СТРАЖИ ВКЛЮЧЕНИЯ, и как ими пользоваться ?

Но в HELP для Сode Vision написано что
обявление глобальных переменных должны быть установлены в файлах с расширением С. ( а, не h )

Цитата из HELP для Сode Vision:
· global variables declarations must be placed in the .C files where necessary
· there's no need to declare global variables, that are not static, in header .H files, because if these files will be #include -ed more than once, the compiler will issue errors about variable redeclarations.

Попробовал обявить их во всех С файлах где они используются, компилятору это не нравится.
Подскажите как правильно.
_Артём_
Цитата(Nikkolaj @ Apr 20 2012, 15:53) *
Я тоже думал обявить все глобальные переменные в одном globvar.h файле.

Как объявить?
Если так:
Код
unsigned char MyVar;

то не лучшая идея, мягко говоря.



Цитата(Nikkolaj @ Apr 20 2012, 15:53) *
Что такое СТРАЖИ ВКЛЮЧЕНИЯ, и как ими пользоваться ?


Наверное что-то такое:
Код
#ifndef my_inc_included
#define my_inc_included

#endif

Nikkolaj
Извините, но из последних двух ответов я всё равно не понял,
как правильно обявить глобальные переменные, которые используются в нескольких файлах.
_Артём_
Цитата(Nikkolaj @ Apr 20 2012, 16:25) *
Извините, но из последних двух ответов я всё равно не понял,
как правильно обявить глобальные переменные, которые используются в нескольких файлах.


В с-файле:
Код
unsigned char MyVar;


В h-файле:
Код
#ifndef my_inc_included
#define my_inc_included
extern unsigned char MyVar;
#endif
Nikkolaj
Что такое my_inc_included ?
mdmitry
Цитата(Nikkolaj @ Apr 20 2012, 17:50) *
Что такое my_inc_included ?

Страж включения.
Не позволяет несколько раз подключать один и тот же файл. Почитайте книги по языку. А заодно посмотрите заголовочные файлы вашего компилятора. Очень полезное мероприятие. rolleyes.gif

_Артём_ вам уже показал как должно быть. В заголовочном файле только ССЫЛКИ (о чем я и писал) на переменные.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.