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

 
 
> Параметр макроса С, изменение макроса по передаваемому параметру
Dimentius
сообщение Aug 1 2007, 09:54
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 27-09-05
Пользователь №: 8 980



Как правильно написать макрос со структурой, зависящей от параметра?
Например, для циклов ожидания.

Вот такая конструкция НЕПРАВИЛЬНАЯ, но смысл должен быть понятен :

#define DELAY(N)\
#if (N == 1)\
NOP;\
#elif (N > 1)\
delay_cycles(N>>1);\
#endif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
amusin
сообщение Aug 1 2007, 10:15
Сообщение #2


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

Группа: Участник
Сообщений: 120
Регистрация: 2-09-05
Из: Екатеринбург
Пользователь №: 8 165



Цитата(Dimentius @ Aug 1 2007, 15:54) *
Как правильно написать макрос со структурой, зависящей от параметра?
Например, для циклов ожидания.

Вот такая конструкция НЕПРАВИЛЬНАЯ, но смысл должен быть понятен :

#define DELAY(N)\
#if (N == 1)\
NOP;\
#elif (N > 1)\
delay_cycles(N>>1);\
#endif


Если N - переменная, то нельзя. Если константа из фиксированного набора значений и известная в момент компиляции, то можно. Как? Идея по ссылке http://mb9x.ginps.com/fujitsu/src/pin_macros.html

А вообще сделайте inline функцию и не парьте себе мозг.
Go to the top of the page
 
+Quote Post
Dimentius
сообщение Aug 1 2007, 10:35
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 27-09-05
Пользователь №: 8 980



Цитата(amusin @ Aug 1 2007, 17:15) *
Если N - переменная, то нельзя. Если константа из фиксированного набора значений и известная в момент компиляции, то можно.

Константа, но НЕ из "фиксированного набора"(в вашем примере с ножками это 'H' и 'L')

Цитата(Andy Mozzhevilov @ Aug 1 2007, 17:26) *
Код
#define DELAY(N)\
    if (N == 1)\
        NOP;\
    else if (N > 1)\
       delay_cycles(N>>1);\
#endif

нормальный компилер соптимизирует

Хм.. скорее всего соптимизирует.

Но все же хотелось надеяться на препроцессор, неужели им никак?
Go to the top of the page
 
+Quote Post
Andy Mozzhevilov
сообщение Aug 1 2007, 10:38
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206



Цитата(Dimentius @ Aug 1 2007, 16:35) *
Константа, но НЕ из "фиксированного набора"(в вашем примере с ножками это 'H' и 'L')
Хм.. скорее всего соптимизирует.

Но все же хотелось надеяться на препроцессор, неужели им никак?


Зачем? Важен результат, или способ, которым он достигнут?


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
Dimentius
сообщение Aug 1 2007, 10:45
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 27-09-05
Пользователь №: 8 980



Цитата(Andy Mozzhevilov @ Aug 1 2007, 17:38) *
Зачем? Важен результат, или способ, которым он достигнут?

Результат, но читаемость листинга после препроцессора будет хуже.
Все равно спасибо за идею.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 05:52
Рейтинг@Mail.ru


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