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

 
 
 
Reply to this topicStart new topic
> Макрос с определением типа параметра
Alexey111
сообщение Dec 14 2005, 11:52
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 34
Регистрация: 15-02-05
Из: Kiev
Пользователь №: 2 650



Задача такова:
необходимо написать макрос, который в случае его запуска с константой в качестве параметра выполняет одно действие, а в случае передачи ему переменной другое.

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

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

P.S Язык "Ansi С"
Процессор специализированный, т.е не ARM
Go to the top of the page
 
+Quote Post
Alex03
сообщение Dec 14 2005, 21:17
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



В GCC бывает семейство builtin* функций, и тогда возможно такое (из их примера):
#define Scale_Value(X) \
(__builtin_constant_p (X) \
? ((X) * SCALE + OFFSET) : Scale (X))

В С++ возможно прокатило бы 2 перегруженные inlune функции с одним именем, у одной параметр const у другой нет.
Go to the top of the page
 
+Quote Post
d__
сообщение Dec 15 2005, 09:27
Сообщение #3


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

Группа: Свой
Сообщений: 197
Регистрация: 26-08-04
Пользователь №: 548



В большинстве современных трансляторов с языка С на платформе арм имеется средство инлайнирования -- это либо модификатор функции либо соответствующая прагма. Для примера можно посмотреть AT91LIB на сайте атмела, она выпускается как минимум в трех вариантах IAR,ADS12,Multi3.2.
Go to the top of the page
 
+Quote Post
Alexey111
сообщение Dec 15 2005, 13:06
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 34
Регистрация: 15-02-05
Из: Kiev
Пользователь №: 2 650



Спасибо за ответы.

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

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

Буду искать в документации компилятора.
Go to the top of the page
 
+Quote Post
Alexey111
сообщение Jan 20 2006, 09:27
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 34
Регистрация: 15-02-05
Из: Kiev
Пользователь №: 2 650



Цитата(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(точной информации нет) и документация неполная.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th June 2025 - 12:55
Рейтинг@Mail.ru


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