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

 
 
> Вопрос по макросу в С, Сброс/установка битов в двух разных портах
mempfis_
сообщение Sep 16 2008, 10:22
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Помогите пожалуйста с макросом smile.gif
Необходимо с помощью макроса записать установку бита в одном порту и сброс в другом т.е. чтобы в макросе выполнялись такие строчки:
PORTA |= (1<<BIT1)
PORTB &= ~(1<<BIT2)

В IAR нашёл макрос
#define input_block_dec(PORT,ADDRESS,COUNT)\
{ \
unsigned char i;\
unsigned char *addr=(ADDRESS);\
for(i=0;i<(COUNT);i++)\
*addr--=(PORT);\
}

Пробовал подобным образом переделать под свой:
#define Set1()\
{ \
PORTA |= (1<<BIT1);\
PORTB &= ~(1<<BIT2);\
}

Пока не использую его компилятор не ругается, только вставляю где-нибудь пишет что нужна ;
Компилятор IAR 5.10a
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
mdmitry
сообщение Sep 16 2008, 12:23
Сообщение #2


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

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



Определение блока (фигурные скобки) может сыграть злую шутку:

Код
#define Set1()/
{ /
PORTA |= (1<<BIT1);/
PORTB &= ~(1<<BIT2);/
}

if(var) Set1(); else var = 1;


Разбираем подстановку:
Код
if(var)
{
PORTA |= (1<<BIT1);
PORTB &= ~(1<<BIT2);
}
;
else var = 1;


Посмотрите как сделаны макросы в GCC. Заложены очень хорошие идеи.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- mempfis_   Вопрос по макросу в С   Sep 16 2008, 10:22
- - Сергей Борщ   Цитата(mempfis_ @ Sep 16 2008, 13:22) Пок...   Sep 16 2008, 10:41
|- - mempfis_   Цитата(Сергей Борщ @ Sep 16 2008, 14:41) ...   Sep 16 2008, 10:49
|- - Палыч   Цитата(mempfis_ @ Sep 16 2008, 13:49) И е...   Sep 16 2008, 11:00
|- - mempfis_   Цитата(Палыч @ Sep 16 2008, 15:00) Обратн...   Sep 16 2008, 11:01
|- - Сергей Борщ   Цитата(mempfis_ @ Sep 16 2008, 14:01) Про...   Sep 16 2008, 11:08
|- - mdmitry   Цитата(Сергей Борщ @ Sep 16 2008, 15:08) ...   Sep 16 2008, 11:19
|- - mempfis_   Цитата(Сергей Борщ @ Sep 16 2008, 15:08) ...   Sep 16 2008, 11:37
- - Палыч   Например, можно записать так #define Set1() ( POR...   Sep 16 2008, 10:50
|- - mempfis_   Цитата(Палыч @ Sep 16 2008, 14:50) Наприм...   Sep 16 2008, 11:00
- - mdmitry   Посмотрите вывод препроцессора. Сильно помогает ра...   Sep 16 2008, 11:03
|- - mempfis_   Цитата(mdmitry @ Sep 16 2008, 16:23) Опре...   Sep 16 2008, 12:33
- - kurtis   Может проще отказаться от использования макросов и...   Sep 16 2008, 12:27
- - mdmitry   Пример макроса (идея из GCC) Код#define Set1...   Sep 16 2008, 12:42


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

 


RSS Текстовая версия Сейчас: 28th July 2025 - 02:25
Рейтинг@Mail.ru


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