Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Макрос с определением типа параметра
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Alexey111
Задача такова:
необходимо написать макрос, который в случае его запуска с константой в качестве параметра выполняет одно действие, а в случае передачи ему переменной другое.

Смысл этого в следующем: необходимо умножить число на константу. Константа заранее известна(1000). Число может быть заданной константой(тогда это выражение надо подсчитать на этапе компиляции), или переменной(тогда необходимо вызвать ф-у умножения числа на константу).

Вызов ф-ции стоит дешевле, чем умножение двух чисел.
Все это нужно для экономии места во флеше, борьба за каждый байт!

P.S Язык "Ansi С"
Процессор специализированный, т.е не ARM
Alex03
В GCC бывает семейство builtin* функций, и тогда возможно такое (из их примера):
#define Scale_Value(X) \
(__builtin_constant_p (X) \
? ((X) * SCALE + OFFSET) : Scale (X))

В С++ возможно прокатило бы 2 перегруженные inlune функции с одним именем, у одной параметр const у другой нет.
d__
В большинстве современных трансляторов с языка С на платформе арм имеется средство инлайнирования -- это либо модификатор функции либо соответствующая прагма. Для примера можно посмотреть AT91LIB на сайте атмела, она выпускается как минимум в трех вариантах IAR,ADS12,Multi3.2.
Alexey111
Спасибо за ответы.

Похоже проблема с компилятором, он происходит от GCC но портирован на на свой процессор фирмой изготовителем камня и пока особых возможностей у него я не заметил.

Надеялся на свое неполное знание ANSI C, может в нем что-то предусмотрели на этот случай.

Буду искать в документации компилятора.
Alexey111
Цитата(Alex03 @ Dec 15 2005, 01:17) *
В GCC бывает семейство builtin* функций, и тогда возможно такое (из их примера):
#define Scale_Value(X) \
(__builtin_constant_p (X) \
? ((X) * SCALE + OFFSET) : Scale (X))

В С++ возможно прокатило бы 2 перегруженные inlune функции с одним именем, у одной параметр const у другой нет.


Не поверил документации на компилятор - проверил. Работает!

Спасибо.

Вообще этот самопальный компилятор протирован с GCC 2.6 или 2.9(точной информации нет) и документация неполная.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.