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

 
 
> #define DELAY(CY), Как задать выбор вариантов определения?
ViKo
сообщение Apr 9 2014, 04:44
Сообщение #1


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Конкретно, хочу, чтобы
DELAY(1) превратилось в
__nop()
DELAY(2)
__nop();
__nop()
...
DELAY(20)
for(uint32_t i = 4; i--; ) __nop()
Варианты найдутся. Вопрос, как их задать в одном макроопределении?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MaxiMuz
сообщение Apr 10 2014, 09:16
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 253
Регистрация: 15-04-10
Из: Волгоград
Пользователь №: 56 658



А вот такая ситуация:
Пишу под Keil макрос OUTPIN_PP(port,nbit) который должен в случае , если nbit<8 выполнить
Код
do { GPIO##port->CRL&=~(GPIO_CRL_CNF##nbit); GPIO##port->CRL|=GPIO_CRL_MODE##nbit; } while (0);

а если иначе , то
Код
do { GPIO##port->CRH&=~(GPIO_CRH_CNF##nbit); GPIO##port->CRH|=GPIO_CRH_MODE##nbit; } while (0)

В идеальном варианте на этапе компиляции какимто образом выполнить проверку условия и вставить нужные операторы.
Вариант с
Код
#if nbit<8 OUTPIN_PP(port,nbit) do { GPIO##port->CRL&=~(GPIO_CRL_CNF##nbit); GPIO##port->CRL|=GPIO_CRL_MODE##nbit; } while (0);
#endif
не прокатывает
А с использованием программного вывода:
Код
#define _OUTPIN_PP(port,nbit)  if ((nbit)<8) {do { GPIO##port->CRL&=~(GPIO_CRL_CNF##nbit); GPIO##port->CRL|=GPIO_CRL_MODE##nbit; } while (0); }\
                                                             else do { GPIO##port->CRH&=~(GPIO_CRH_CNF##nbit); GPIO##port->CRH|=GPIO_CRH_MODE##nbit; } while (0)

выдает ошибку отсутствия предопределенного макроса.
Вариант с определением базового адреса и последующим вычислением адреса регистра известен
Код
#define PORTA   ((u32*)(APB2PERIPH_BASE + 0x0800))
#define PORTB   ((u32*)(APB2PERIPH_BASE + 0x0C00))
#define PORTC   ((u32*)(APB2PERIPH_BASE + 0x1000))
#define PORTD   ((u32*)(APB2PERIPH_BASE + 0x1400))
#define PORTE   ((u32*)(APB2PERIPH_BASE + 0x1800))
#define PORTF   ((u32*)(APB2PERIPH_BASE + 0x1C00))
#define PORTG   ((u32*)(APB2PERIPH_BASE + 0x2000))

#define pinOutPP_b(port,bit)  {*(port+((bit)/8))|=3UL<<(((bit)-(8*((bit)/8)))<<2); *(port+((bit)/8))&=~(3UL<<((((bit)-(8*((bit)/8)))<<2)+2));}
, хочу делать по другому .. собственно вопрос как
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 10 2014, 09:24
Сообщение #3


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(MaxiMuz @ Apr 10 2014, 12:16) *
#define pinOutPP_b(port,bit) {*(port+((bit)/8))|=3UL<<(((bit)-(8*((bit)/8)))<<2); *(port+((bit)/8))&=~(3UL<<((((bit)-(8*((bit)/8)))<<2)+2));}[/code], хочу делать по другому .. собственно вопрос как

Код
/*!****************************************************************************
@brief        Bit of Low/High byte Port configuration
@details    Конфигурация одиночного бита порта
@param        PORT - имя порта (A..G)
@param        BIT - номер бита (0..15)
@param        CM - конфигурация бита
@note        Используется перечисляемый тип CONF_MODE
@note        Для IN_PDPU нужный pull-down/pull-up задается в ODR
*/
#define GPIO_CONFB(PORT, BIT, CM)                    \
    *(uint32_t *)((uint32_t)(GPIO##PORT) + BIT / 8 * 4) =         \
    *(uint32_t *)((uint32_t)(GPIO##PORT) + BIT / 8 * 4)        \
        & (~(0xF << (BIT % 8) * 4)) | (CM << (BIT % 8) * 4)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ViKo   #define DELAY(CY)   Apr 9 2014, 04:44
- - Сергей Борщ   Код#define DELAY(cyсles) if((cycle...   Apr 9 2014, 05:34
|- - demiurg_spb   Цитата(Сергей Борщ @ Apr 9 2014, 09:34) Е...   Apr 9 2014, 06:40
|- - Сергей Борщ   Цитата(demiurg_spb @ Apr 9 2014, 08:40) В...   Apr 9 2014, 07:02
|- - demiurg_spb   Цитата(Сергей Борщ @ Apr 9 2014, 11:02) П...   Apr 9 2014, 07:11
- - ViKo   Код#define DELAY_CY(CY) \ if (C...   Apr 9 2014, 06:50
|- - demiurg_spb   Вот это в GCC отлично рабртает, а в кейле, когда я...   Apr 9 2014, 06:54
- - ViKo   Сотворил. CODE /*!****************************...   Apr 9 2014, 15:23
|- - Shamil   Надо бы, наверное, весь макрос поместить внутрь бл...   Apr 10 2014, 01:18
|- - ViKo   Цитата(Shamil @ Apr 10 2014, 04:18) Надо ...   Apr 10 2014, 02:24
|- - Сергей Борщ   Цитата(ViKo @ Apr 10 2014, 04:24) Как мож...   Apr 10 2014, 02:58
|- - ViKo   Цитата(Сергей Борщ @ Apr 10 2014, 05:58) ...   Apr 10 2014, 03:01
|- - demiurg_spb   Цитата(ViKo @ Apr 10 2014, 07:01) Не с то...   Apr 10 2014, 03:15
- - Сергей Борщ   Цитата(ViKo @ Apr 10 2014, 05:01) Кейловс...   Apr 10 2014, 03:24
- - ViKo   ЦитатаЧтобы не было зависимости от уровня оптимиза...   Apr 10 2014, 06:51
|- - Сергей Борщ   Цитата(ViKo @ Apr 10 2014, 08:51) Взялся ...   Apr 10 2014, 07:07
||- - ViKo   Цитата(Сергей Борщ @ Apr 10 2014, 10:07) ...   Apr 10 2014, 07:57
|- - demiurg_spb   Цитата(ViKo @ Apr 10 2014, 10:51) Из ARM ...   Apr 10 2014, 09:07
|- - Леонид Иванович   Цитата(ViKo @ Apr 10 2014, 09:51) Конкрет...   Apr 13 2014, 19:24
|- - demiurg_spb   Цитата(Леонид Иванович @ Apr 13 2014, 23...   Apr 14 2014, 03:30
|- - ViKo   Цитата(Леонид Иванович @ Apr 13 2014, 22...   Apr 14 2014, 04:38
|- - toweroff   Цитата(ViKo @ Apr 14 2014, 08:38) Годится...   Apr 14 2014, 05:01
|- - ViKo   Цитата(toweroff @ Apr 14 2014, 08:01) а у...   Apr 14 2014, 05:13
|- - toweroff   Цитата(ViKo @ Apr 14 2014, 09:13) Есть, н...   Apr 14 2014, 05:27
||- - ViKo   Цитата(toweroff @ Apr 14 2014, 08:27) ок,...   Apr 14 2014, 05:52
||- - Сергей Борщ   Цитата(ViKo @ Apr 14 2014, 08:52) Так уж ...   Apr 14 2014, 06:15
||- - ViKo   Цитата(Сергей Борщ @ Apr 14 2014, 09:15) ...   Apr 14 2014, 15:35
||- - toweroff   Цитата(ViKo @ Apr 14 2014, 19:35) Нюанс в...   Apr 14 2014, 15:54
||- - demiurg_spb   Цитата(ViKo @ Apr 14 2014, 19:35) Нюанс в...   Apr 15 2014, 06:18
||- - Сергей Борщ   Цитата(demiurg_spb @ Apr 15 2014, 09:18) ...   Apr 15 2014, 06:59
||- - demiurg_spb   Цитата(Сергей Борщ @ Apr 15 2014, 10:59) ...   Apr 15 2014, 07:15
||- - Сергей Борщ   Цитата(demiurg_spb @ Apr 15 2014, 10:15) ...   Apr 15 2014, 07:21
||- - demiurg_spb   Цитата(Сергей Борщ @ Apr 15 2014, 11:21) ...   Apr 15 2014, 07:31
|- - Сергей Борщ   Цитата(ViKo @ Apr 14 2014, 08:13) Есть, н...   Apr 14 2014, 05:45
- - ViKo   В-общем, не помогло. Код__inline void DelAsm(u...   Apr 10 2014, 09:14
|- - demiurg_spb   Цитата(ViKo @ Apr 10 2014, 13:14) Вот отс...   Apr 10 2014, 09:41
|- - ViKo   Цитата(demiurg_spb @ Apr 10 2014, 12:35) ...   Apr 10 2014, 09:49
||- - demiurg_spb   Цитата(ViKo @ Apr 10 2014, 13:49) Насчет ...   Apr 10 2014, 10:08
||- - demiurg_spb   Цитата(ViKo @ Apr 10 2014, 13:49) Не о то...   Apr 10 2014, 10:13
||- - ViKo   Цитата(demiurg_spb @ Apr 10 2014, 13:13) ...   Apr 10 2014, 10:54
||- - demiurg_spb   Цитата(ViKo @ Apr 10 2014, 14:54) Если в ...   Apr 10 2014, 11:52
|- - ViKo   Цитата(demiurg_spb @ Apr 10 2014, 12:41) ...   Apr 10 2014, 10:08
- - ViKo   Сотворил.v2 Код/*!****************************...   Apr 10 2014, 13:59


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

 


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


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