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

 
 
> Хитрая склейка лексем на Си, с помощью директивы ##
ibiza11
сообщение Dec 13 2013, 14:45
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 54
Регистрация: 13-01-09
Пользователь №: 43 304



Приветствую всех!
Пытаюсь реализовать вот что:
CODE
/* линия 0 */
#define _PORT0 B //определение буквы порта микроконтроллера
#define _PINN0 2 //определение номера бита порта

/* линия 1 */
#define _PORT1 C
#define _PIN1 3

/* линия 2 */
#define _PORT2 D
#define _PIN2 4

/* макрос склейки лексем */
#define _concatuate(a,b ) (a##b )
#define con(a,b ) _concatuate(a,b )

#define _PORTCHAR(line) con(_PORT,line) //здесь я ожидаю получить букву порта, в зависимости от номера линии. т.е. если указываю line = 0, то на выходе получаю B

#define _PORT(line) con(PORT,_PORTCHAR(line)) //здесь ожидаю получить лексему вида "PORTx", где х - буква порта, полученная в предыдущем пункте.
#define _DDR(line) (DDR##_PORTCHAR(line)) //здесь аналогично _PORT(line)
#define _PIN(line) (PIN##_PORTCHAR(line)) //здесь аналогично _PORT(line)

#define _PINNUMBER(line) (_PIN##line) //здесь я ожидаю получить номер бита порта в зависимости от значения line. т.е. если line = 0, то на выходе получаю 2.
#define _PINN(line) (1<<_PINNUMBER(line)) // здесь уже получаю маску этого бита.

при попытке использовать _PORT() - выдает ошибку
Цитата
"Warning[Pe223]: function "PORT" declared implicitly D:\PRJ\MCU\AVR Projects\....
Error[Pe137]: expression must be a modifiable lvalue D:\PRJ\MCU\AVR Projects\... "
Гуру, подскажите что я делаю не так. Спасибо.
Go to the top of the page
 
+Quote Post



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

 


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


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