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

 
 
> дефайны засунуть в массив и вызывать
Метценгерштейн
сообщение Sep 12 2016, 07:07
Сообщение #1


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

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



Есть некоторые дефайны:

Код
#define LED_0    LN8_Pin
#define LED_1    LN7_Pin
#define LED_2    LN6_Pin
#define LED_3    LN5_Pin
#define LED_4    LN4_Pin
#define LED_5    LN3_Pin
#define LED_6    LN2_Pin
#define LED_7    LN1_Pin


надо в цикле по очереди их вызывать. Как это делается обычно? Может в массив затолкнуть и по элементам идти?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_pv
сообщение Sep 12 2016, 10:11
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



в этом случае с макросами Волкова не очень красиво получается, так как там в одном месте через запятую перечислены указатель на порт volatile void *, маска unsigned short, и активный уровень, который вообще не имеет типа, так как просто приклеивается препроцессором в нужное место.
соответственно последнее сильно мешает, так как засунуть эту H или L из препроцессора в переменную ещё как-то можно, а вот обратно - никак.
препроцессор не может достать значение переменной и вклеить в кусок кода.

можно попробовать сделать похожие макросы Волкова, небольшие inline функции,
void on(const tPin &pin){
if (pin.polarity == "H") pin.port|= pin.mask; else pin.port &= ~pin.mask;
}

typedef struct{
volatile void * port;
unsigned short mask;
unsigned char polarity;
}tPin;

const tPin LED0 = {GPIOA, (1<<5), "H"};

и потом уже создавать массив таких стуктур.
но работать это будет уже не так быстро. так как проверки уровня и извлечение нужного порта будет происходить не во время компиляции макроса в единственную инструкцию, а во время исполнения.

другой тупой способ:
void on_n(int n){
switch(n){
case 0: on(LED0);
case 1: on(LED1);
case 2: on(LED2);
case 3: on(LED3);
...
}
}

on_n(i);
Go to the top of the page
 
+Quote Post



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

 


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


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