|
Параметр макроса С, изменение макроса по передаваемому параметру |
|
|
|
Aug 1 2007, 09:54
|
Участник

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

|
Как правильно написать макрос со структурой, зависящей от параметра? Например, для циклов ожидания.
Вот такая конструкция НЕПРАВИЛЬНАЯ, но смысл должен быть понятен :
#define DELAY(N)\ #if (N == 1)\ NOP;\ #elif (N > 1)\ delay_cycles(N>>1);\ #endif
|
|
|
|
|
 |
Ответов
|
Aug 1 2007, 10:15
|
Частый гость
 
Группа: Участник
Сообщений: 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 функцию и не парьте себе мозг.
|
|
|
|
|
Aug 1 2007, 10:35
|
Участник

Группа: Участник
Сообщений: 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 нормальный компилер соптимизирует Хм.. скорее всего соптимизирует. Но все же хотелось надеяться на препроцессор, неужели им никак?
|
|
|
|
|
Aug 1 2007, 10:45
|
Участник

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

|
Цитата(Andy Mozzhevilov @ Aug 1 2007, 17:38)  Зачем? Важен результат, или способ, которым он достигнут? Результат, но читаемость листинга после препроцессора будет хуже. Все равно спасибо за идею.
|
|
|
|
|
Aug 1 2007, 11:01
|
Участник

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

|
Цитата(Andy Mozzhevilov @ Aug 1 2007, 17:51)  зачем его читать то? если не секрет?  Обычно при отладке, читают и С и ASM
|
|
|
|
|
Aug 1 2007, 11:10
|
Участник

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

|
Цитата(Andy Mozzhevilov @ Aug 1 2007, 18:05)  ну не думаю, что пытливый ум программиста введет в заблуждение такая ерунда В заблуждение не введет, но лишние данные будут присутствовать. А если учесть, что в макросе условий не два, а больше, и идет несколько макросов подряд? Тогда уже приличная "портянка" получается.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|