реклама на сайте
подробности

 
 
> Условная компиляция в WinAVR
injen-d
сообщение Apr 17 2008, 16:54
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 91
Регистрация: 10-10-07
Из: Воронежа
Пользователь №: 31 250



Хочу, чтоб компилился кусок кода(обработчик прерывания), только если используется нужная мне функция(которая собственно использует эти прерывания).
В CodeVisionAVR есть удобное средство:
Код
#if funcused имя_функции_без_скобок

А вот в GCC, как ни искал - ничего похожего не нашел.
Все бы ничего, но объявленный обработчик прерывания линкуется, как и положено, в любом случае.
Код
ISR(USART_UDRE_vect)
{}

Есть ли альтернатива #if funcused ? Очень хочется, чтоб критерием выбора компилировать/не компилировать был только факт использования в итоговом(после выброса мусора) коде какой-либо, нужной мне функции.


--------------------
- Бендер, ты же робот, зачем тебе пить пиво?
- Незачем! Я могу бросить в любой момент!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
mdmitry
сообщение Apr 18 2008, 16:30
Сообщение #2


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Заведите
#define TEST

а в коде
#if defined TEST

.......
#endif

Посмотрите стандартные заголовочные файлы. В них есть условная компиляция.

Сам постоянно пользуюсь. В зависимости от устройства могут вызываться драйвера физического уровня разные (SPI или UART), а общая идеалогия обработки устройств единая. Удобно подсовывать соответствующие функции с помощью условной компиляции.

Если надо глобально все пересобирать, то в опциях makefile можно добавить к ключу: -D TEST


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
injen-d
сообщение Apr 18 2008, 17:09
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 91
Регистрация: 10-10-07
Из: Воронежа
Пользователь №: 31 250



Цитата(mdmitry @ Apr 18 2008, 20:30) *
Заведите
#define TEST

а в коде
#if defined TEST

.......
#endif

Именно так мне и пришлось сделать. crying.gif Но в том-то и весь вопрос был, чтоб никуда не нужно было лезть, и ничего там не нужно было править. Скопировал три(в моем случае) файла в новый проэкт и, ничего там не меняя, просто начал оттуда пользоваться некоторыми функциями. И если для работы использованной функции нужны какие-то прерывания, то компилятся соответствующие обработчики.
Ну, впрочем, если в GCC так нельзя сделать - придется смириться. crying.gif


--------------------
- Бендер, ты же робот, зачем тебе пить пиво?
- Незачем! Я могу бросить в любой момент!
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 00:20
Рейтинг@Mail.ru


Страница сгенерированна за 0.01376 секунд с 7
ELECTRONIX ©2004-2016