Nikkolaj 0 19 апреля, 2012 Опубликовано 19 апреля, 2012 · Жалоба Добрый день. У меня такой вопрос. Есть у меня проект, который я когда то сделал на С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 0 19 апреля, 2012 Опубликовано 19 апреля, 2012 (изменено) · Жалоба Сейчас специально откомпилил свой старый проект из 1.25 в 2.05 - всё нормально. Как будет на железяке работать - не знаю :) В папке Headers только .h. Попробуйте переставить его.. Может криво стал. Могу дать свой дистрибутив. Изменено 19 апреля, 2012 пользователем hd44780 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
codenamehawk 0 19 апреля, 2012 Опубликовано 19 апреля, 2012 · Жалоба Cant open file: ....\file1.o Путь без русских букв? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikkolaj 0 19 апреля, 2012 Опубликовано 19 апреля, 2012 · Жалоба Спасибо за ответ. Хорошо, дайте Ваш дистрибутив, попробую переставить. Путь без русских букв? Да, путь без русских букв. Он вообще формирует только один файл с расширением .о filemain.о Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
codenamehawk 0 19 апреля, 2012 Опубликовано 19 апреля, 2012 · Жалоба Выложите проект, посмотрим. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 19 апреля, 2012 Опубликовано 19 апреля, 2012 · Жалоба Хорошо, дайте Ваш дистрибутив, попробую переставить. Ловите - http://ifolder.ru/30022151 Сами разберётесь, что там к чему :rolleyes: . Вирусов нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikkolaj 0 20 апреля, 2012 Опубликовано 20 апреля, 2012 · Жалоба Добрый день. Спасибо за дистрибутив, я его скачал, но устанавливать пока не стал. Я нашёл в чём была ошибка. Я подключал к проекту все 3 файла в конфигурации по add files, а в filemain.c у меня были директивы #include file1.c, #include file2.c. Двойное подключение файлов компилятору и не нравилось. Сейчас решил переделать правильно. Из файла filemain.c директивы #include file1.c, #include file2.c удалил. Добавил файл glob_defs.h для всех #define, и подключил его к нужным файлам. Посоветуйте пожалуйста, как праильно поступить с обявлением глобальных переменных, которые используются в разных файлах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mdmitry 0 20 апреля, 2012 Опубликовано 20 апреля, 2012 · Жалоба Я подключал к проекту все 3 файла в конфигурации по add files, а в filemain.c у меня были директивы #include file1.c, #include file2.c. Двойное подключение файлов компилятору и не нравилось. Посоветуйте пожалуйста, как праильно поступить с обявлением глобальных переменных, которые используются в разных файлах. #include name.c очень опасное мероприятие, лучше избегать всячески. Есть случаи, когда это удобно, но это скорее исключения из правил. Ссылки на глобальные переменные можно собрать в одном заголовочном файле (какой-нибудь globvar.h, не забыть сделать стражи вкючения в нем) и использовать в других файлах с кодом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikkolaj 0 20 апреля, 2012 Опубликовано 20 апреля, 2012 · Жалоба Ссылки на глобальные переменные можно собрать в одном заголовочном файле (какой-нибудь 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. Попробовал обявить их во всех С файлах где они используются, компилятору это не нравится. Подскажите как правильно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 20 апреля, 2012 Опубликовано 20 апреля, 2012 · Жалоба Я тоже думал обявить все глобальные переменные в одном globvar.h файле. Как объявить? Если так: unsigned char MyVar; то не лучшая идея, мягко говоря. Что такое СТРАЖИ ВКЛЮЧЕНИЯ, и как ими пользоваться ? Наверное что-то такое: #ifndef my_inc_included #define my_inc_included #endif Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikkolaj 0 20 апреля, 2012 Опубликовано 20 апреля, 2012 · Жалоба Извините, но из последних двух ответов я всё равно не понял, как правильно обявить глобальные переменные, которые используются в нескольких файлах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 20 апреля, 2012 Опубликовано 20 апреля, 2012 · Жалоба Извините, но из последних двух ответов я всё равно не понял, как правильно обявить глобальные переменные, которые используются в нескольких файлах. В с-файле: unsigned char MyVar; В h-файле: #ifndef my_inc_included #define my_inc_included extern unsigned char MyVar; #endif Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikkolaj 0 20 апреля, 2012 Опубликовано 20 апреля, 2012 · Жалоба Что такое my_inc_included ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mdmitry 0 20 апреля, 2012 Опубликовано 20 апреля, 2012 · Жалоба Что такое my_inc_included ? Страж включения. Не позволяет несколько раз подключать один и тот же файл. Почитайте книги по языку. А заодно посмотрите заголовочные файлы вашего компилятора. Очень полезное мероприятие. :rolleyes: _Артём_ вам уже показал как должно быть. В заголовочном файле только ССЫЛКИ (о чем я и писал) на переменные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться