Easyelectronics.ru

Электроника для всех
Текущее время: 22 янв 2021, 11:36

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Значение переменной как часть имени макроса
СообщениеДобавлено: 18 ноя 2020, 15:08 
Только пришел

Зарегистрирован: 03 апр 2018, 15:04
Сообщения: 23
Прошу прощения если коряво вопрос сформулировал.
Можно ли как то значение переменной (код ниже) <int USART_NUM> превратить в часть имени макроса?
В данном примере скажем есть макросы:

#define USART_1_MACROS (набор_1)
#define USART_2_MACROS (набор_2)
#define USART_6_MACROS (набор_3)

Надо как-то изменить подстановку макроса в зависимости от значения функции.

Код:
void USARTx_ini(int USART_NUM, uint16_t usart_speed)
{
// ТУТ ставим макрос в зависимости от переменной int USART_NUM
(значение_переменной < int USART_NUM>)_MACROS

// **Проверяем включено ли тактирование, если нет включаем.
  //if (!((RCC->APB2ENR)&( RCC_APB2ENR_USART1EN))) { RCC->APB2ENR    |=   RCC_APB2ENR_USART1EN;}
   
//**    Конфигурируем регистр USART 
  (*(uint32_t *)((USART_NUM)+USART_REG_BRR) = usart_speed);   
  (*(uint32_t *)((USART_NUM)+USART_REG_CR1)|= USART_CR1_UE | USART_CR1_TE | USART_CR1_RE | USART_CR1_RXNEIE) ;    
}


Или занимаюсь ерундой и есть более грамотные/элегантные решения?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Значение переменной как часть имени макроса
СообщениеДобавлено: 18 ноя 2020, 15:29 
Старожил

Зарегистрирован: 14 апр 2014, 11:41
Сообщения: 214
Откуда: Минск Беларусь
Что вам мешает вызывать ваш макрос через if ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Значение переменной как часть имени макроса
СообщениеДобавлено: 18 ноя 2020, 15:36 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3047
Нет, так нельзя как вы хотите. Вы пытаетесь смешивать реалтаймовый и предпроцессорный (макросы) код. Реалтайм ничего не знает ни о каких макросах. Подстановка осуществляется только на этапе компиляции, на котором значение переменной, передаваемой в функцию, еще не известно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Значение переменной как часть имени макроса
СообщениеДобавлено: 18 ноя 2020, 15:47 
Только пришел

Зарегистрирован: 03 апр 2018, 15:04
Сообщения: 23
Понял, спасибо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Значение переменной как часть имени макроса
СообщениеДобавлено: 18 ноя 2020, 16:07 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1394
Sergeynk писал(а):
Или занимаюсь ерундой и есть более грамотные/элегантные решения?

Занимаешься ерундой, для таких вещей существует C++:
Show

Тут сплошные константные объекты, например, после вызова enablePeriphClock(), даже с отключенной оптимизацией, гарантированно останется только:
Код:
RCC->APB2ENR |= RCC_APB2ENR_USART1EN;

И это еще достаточно простой пример и близко не раскрывающий все возможности современного С++...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Значение переменной как часть имени макроса
СообщениеДобавлено: 18 ноя 2020, 17:22 
Только пришел

Зарегистрирован: 03 апр 2018, 15:04
Сообщения: 23
так, это надо будет вкурить вечером.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Значение переменной как часть имени макроса
СообщениеДобавлено: 18 ноя 2020, 20:09 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 1657
Мне нравится ваш оптимизм насчёт "вкурить вечером" :)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: DarkMike


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB