Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Ошибка линкера или создание проекта в ИАР
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
aspID
Поможите, пожалуйста, найти верный раздел в документации или ткните носом в ошибку.

Создаю новый проект. В нем - main.c + заголовочник и хедер для этого заголовочника.
Компилирую, получаю ошибку линковщика

Error[e27]: Entry "uc_RTC_HH" in module main ( C:\asp_Prj\Timer\source\trunk\Debug\Obj\
main.r90 ) redefined in module rtc_cut ( C:\asp_Prj\Timer\source\trunk\Debug\Obj\rtc_cut.r90 )

Прикрепляю проект... может, чего в опциях накосячил sad.gif ежели у кого время будет, гляньте пожалст. Заранее спасибо!
HARMHARM
Можете, например, перенести переменные в rtc_cut.c, а в main объявить их как extern.
=DS=
Косяк не в опциях, а в определении uc_RTC_HH (и остальных переменных) в h-файле. Он вызвывается компилятором два раза (при компиляции main.c и rtc_cut.c ) и, соответственно, создает два экземпляра переменных, каждый в своем модуле, которые при линковке вызывают конфликт. Перетащите определение uc_RTC_HH в rtc_cut.c, а в main.c или rtc_cut.h опишите его как extern unsigned char.

ЗЫ: Пока набирал.....
aspID
А как же конструкция из директив
#ifndef __RTC_CUT__
#define __RTC_CUT__
...
#endif //__RTC_CUT__

?
HARMHARM
Цитата(aspID @ Dec 31 2008, 10:12) *
А как же конструкция из директив
#ifndef __RTC_CUT__
#define __RTC_CUT__
...
#endif //__RTC_CUT__

?

Эти директивы предохраняют от повторного подключения заголовочного файла. Если заголовок подключен хоть раз, в глобальное пространство имен сразу попадут Ваши переменные.
Кроме того, каждый C файл компилируется отдельно. Значит, при компиляции rtc_cut.c в объектный файл rtc_cut.r90 попадут переменные; при компиляции main.c в объектный файл main.r90 тоже попадут переменные. Вот на это и ругается линкер.
aspID
Понятно, спасибо. А где-нибудь про это можно почитать? Есть еще подобные нюансы или рекомендации... Вроде бы, в "непроцессорном" С/С++ нормально такие конструкции приживались...
HARMHARM
Цитата(aspID @ Dec 31 2008, 11:11) *
Понятно, спасибо. А где-нибудь про это можно почитать? Есть еще подобные нюансы или рекомендации... Вроде бы, в "непроцессорном" С/С++ нормально такие конструкции приживались...

На форуме обсуждалось очень многое, впрочем достаточно трудно найти. По С++ порекомендую Bruce Eckel "Thinking in C++", там много и про чистый С написано. А в общем, "непроцессорный" или "микроконтроллерный" С/С++ от "процессорного" отличается слабо, в основном отличия обусловлены ограниченностью ресурсов малых платформ и спецификой работы с железом/ядром.
aspID
По "классике" мне очень нравится синяя книжка Фролова... Речь именно о компиляторе в ИАРе и проектах.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.