Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IAR наведение порядка
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Nestorovich
Есть 3 проекта на 70 процентов одинаковые: в зависимости отпринятой по UART команды запускается .программа на выполнение . Проекты отличаются тем что в разных проектах в зависимости от принятой команды вызываются разные функции. Собрать все функции в одном проекте не хватает программной памяти, поэтому у меня сейчас 3 проекта, и если делаешь изменения в одном, то надо не забыть во втором и т д. Вообщем ерунда надо привести все в порядок. Вопрос как. Первый вариант: вынести все общие функции в отдельный файл и подключить к проектам, второй вариант: иметь один проект с разными "опциями" и в зависимости от этих "опций" при компиляции указывать компилятору какой файл подключать. Мне второй вариант больше нравиться но как его реализовать я не знаю. Помогите люди добрые.
prottoss
Цитата(Nestorovich @ Mar 1 2006, 00:25) *
Есть 3 проекта на 70 процентов одинаковые: в зависимости отпринятой по UART команды запускается .программа на выполнение . Проекты отличаются тем что в разных проектах в зависимости от принятой команды вызываются разные функции. Собрать все функции в одном проекте не хватает программной памяти, поэтому у меня сейчас 3 проекта, и если делаешь изменения в одном, то надо не забыть во втором и т д. Вообщем ерунда надо привести все в порядок. Вопрос как. Первый вариант: вынести все общие функции в отдельный файл и подключить к проектам, второй вариант: иметь один проект с разными "опциями" и в зависимости от этих "опций" при компиляции указывать компилятору какой файл подключать. Мне второй вариант больше нравиться но как его реализовать я не знаю. Помогите люди добрые.


Если уж Вы пишите на Си, то должны знать про директивы условной компиляции :-) вот Вам пример:

Код


// в начале модуля

#define NEED_EXEC_FUN_3

....

// где то посреди необъятных просторов модуля

#ifdef NEED_EXEC_FUN_1

void Fun1(void){

...

}

#else

#ifdef NEED_EXEC_FUN_2

void Fun2(void){

...

}

#else

#ifdef NEED_EXEC_FUN_3

void Fun3(void){

...

}

#endif

#endif

#endif
Nestorovich
теперь знаю спасибо, а переменные так можно обьявлять
beer_warrior
Цитата
а переменные так можно обьявлять

Да можно, обработка происходит на уровне текстового
файла, т.е. куски текста между директивами просто не попадают к компилятору
defunct
Цитата(prottoss @ Feb 28 2006, 19:56) *
Если уж Вы пишите на Си, то должны знать про директивы условной компиляции :-) вот Вам пример:

Условная компиляция зависит не от языка, а от компилятора!
Многие компиляторы поддерживают эту очень полезную вещь, а язык может быть любым.
Andy Mozzhevilov
Цитата(Nestorovich @ Feb 28 2006, 22:25) *
Есть 3 проекта на 70 процентов одинаковые: в зависимости отпринятой по UART команды запускается .программа на выполнение . Проекты отличаются тем что в разных проектах в зависимости от принятой команды вызываются разные функции. Собрать все функции в одном проекте не хватает программной памяти, поэтому у меня сейчас 3 проекта, и если делаешь изменения в одном, то надо не забыть во втором и т д. Вообщем ерунда надо привести все в порядок. Вопрос как. Первый вариант: вынести все общие функции в отдельный файл и подключить к проектам, второй вариант: иметь один проект с разными "опциями" и в зависимости от этих "опций" при компиляции указывать компилятору какой файл подключать. Мне второй вариант больше нравиться но как его реализовать я не знаю. Помогите люди добрые.


Можно, конечно сделать и директивами условной компиляции, определяя конфигурацию в makefile или прямо в IDE от IAR. Это быстрый путь.
Но я бы вынес одинаковые части в отдельные файлы/каталоги и поставил бы проект под систему контроля версий. Это более долгий путь к освоению, но он имеет неоспоримые преимущества.
beer_warrior
Цитата
Условная компиляция зависит не от языка, а от компилятора!
Многие компиляторы поддерживают эту очень полезную вещь, а язык может быть любым.

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