Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как в IAR Собрать Проект Состоящий Из Нескольких Файлов
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
shasik
Картина такая: проект состоит из нескольких файлов (в одном математика, в другом ввод/вывод и т.д.). В режиме отладки (best debug support) проект нормально собирается и очень даже работает, но как только ставлю оптимизацию (любую по size или speed), линкер пишет, что у него неопределенная ссылки на внешние функции. Самое удивительно, что с глобальными переменными, объявленными в разных модулях, все нормально, более того функции из некоторых файлов нормально находит, а вот некоторые файлы - ни в какую. Дошло до того, что удалив из С-шных исходников IAR-овскую и MSP-шную специфику запихнул все в Visual C++ 6.0, так вижуал сказал, что все OK. Так что дело в IAR'e. Может порядок компиляции, может просто глюк, а может я где-то грабли не заметил. Пока пришло все запихнуть нафиг в один файл, но уж больно неудобно и очень нелогично получается
VAI
а Вы сделали h-файл с прототипами функций и включаете его в те файлы, где эти функции используются?
Вы задали вопрос, но не привели примера, как и что у Вас вызывается, а мы не телепаты.
Приведите проект, в котором появляется Ваша ошибка, чтоб можно было его скомпилить и тогда можно будет ответить по существу, а иначе будут только предположения.
Весь свой проект можно не выкладывать, сделайте проект, в котором проявляется ошибка, съархивируйте его и вложите в сообщение.
rezident
Версия IAR какая? Глобальные переменные и функции, описанные в других модулях, как extern объявляли? ИМХО проще всего, дополнив все прототипы extern, запихнуть их в один хидер. И уже этот хидер инклюдить во все модули программы по принципу "кашу маслом не испортишь". В том смысле, что прототип функции, объявленный как extern, не будет конфликтовать в другим таким же прототипом или с самой функцией, даже если они встретятся в одном файле.
А вообще VAI правильно заметил: Код в студию! Ну и ошибки компилятора тоже.
shasik
Цитата(rezident @ Sep 3 2006, 00:36) *
Версия IAR какая? Глобальные переменные и функции, описанные в других модулях, как extern объявляли? ИМХО проще всего, дополнив все прототипы extern, запихнуть их в один хидер. И уже этот хидер инклюдить во все модули программы по принципу "кашу маслом не испортишь". В том смысле, что прототип функции, объявленный как extern, не будет конфликтовать в другим таким же прототипом или с самой функцией, даже если они встретятся в одном файле.
А вообще VAI правильно заметил: Код в студию! Ну и ошибки компилятора тоже.


Для каждого с-файла есть свой h-файл, а еще есть и файл GlobalVars.h, где перечислены все extern-ы и который incude-ится где только можно. Да и сам проект собирается и работает как в IAR'е, так и в VC6.0 - это к вопросу о сишном синтаксисе. Проблемы возникают лишь при включении оптимизации(!) . Версия IAR'а - 3.40
shasik
Причиной оказались "#pragma inline=forced". Когда включена оптимизация inline функция работает только в пределах одного файла и не вылазит в другой. Могли бы, черти, в help-е отметить этот момент.
VAI
> Могли бы, черти, в help-е отметить этот момент.
это не ИАРовские недоработки, а свойства языка.
_Bill
Цитата(shasik @ Sep 4 2006, 23:40) *
Причиной оказались "#pragma inline=forced". Когда включена оптимизация inline функция работает только в пределах одного файла и не вылазит в другой. Могли бы, черти, в help-е отметить этот момент.

Ну, так надо было эту функцию в заголовочный файл вынести.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.