|
#define DELAY(CY), Как задать выбор вариантов определения? |
|
|
|
 |
Ответов
|
Apr 9 2014, 15:23
|

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

|
Сотворил. CODE /*!**************************************************************************** @brief Delay program loop @param NS - время задержки в ns @note Параметр округляется до ближайшего не меньшего, кратного тактам @note 5 тактов в цикле при оптимизации -O3 (-Otime), -O2 6 тактов в цикле при оптимизации -O1 и -O0 + 1 такт перед циклом при оптимизации -O0 @note При проверке условия выхода из цикла компиприлятор отбрасывает одиночный цикл, поэтому счет циклов начинается с 2 @note Формула: D = 5 * (CY5 + 1) + Nnop; 6 * (CY5 + 1) + Nnop (+ 1) */ #define SYSCLK_MHZ 72 #define NS2CY(NS) ((NS * SYSCLK_MHZ + 999) / 1000)
#define DELAY_NS(NS) DELAY_CY(NS2CY(NS)) #define DELAY_CY(CY) \ if (CY % 5 == 1) \ { __nop(); } \ else if (CY % 5 == 2) \ { __nop(), __nop(); } \ else if (CY % 5 == 3) \ { __nop(), __nop(), __nop(); } \ else if (CY % 5 == 4) \ { __nop(), __nop(), __nop(), __nop(); } \ if (CY > 4 && CY < 10) \ { __nop(), __nop(), __nop(), __nop(), __nop(); } \ else if (CY >= 10) \ { __nop(); uint32_t CY5 = (CY - 5) / 5; do { __nop(); } while (CY5--); }
|
|
|
|
|
Apr 10 2014, 01:18
|
Частый гость
 
Группа: Свой
Сообщений: 160
Регистрация: 23-12-04
Из: Уфа
Пользователь №: 1 631

|
Надо бы, наверное, весь макрос поместить внутрь блока, чтобы вставлялся как один оператор, иначе, если применить его после if, будут неприятности. Код do { Текст макроса. } while(0)
|
|
|
|
|
Apr 10 2014, 02:24
|

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

|
Цитата(Shamil @ Apr 10 2014, 04:18)  Надо бы, наверное, весь макрос поместить внутрь блока, чтобы вставлялся как один оператор, иначе, если применить его после if, будут неприятности. Код do { Текст макроса. } while(0) Помню-помню... разговоры. Но я не вставляю после if. P.S. у меня же все ветки в скобках { }, может, их хватит? Другой вопрос всплыл - Как можно определить, с какими параметрами оптимизации задана копмиляция? Что можно было в одном случае в формулу подсунуть 5, а в другом 6.
|
|
|
|
Сообщений в этой теме
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     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 MaxiMuz А вот такая ситуация:
Пишу под Keil макрос OUTPIN... Apr 10 2014, 09:16 ViKo Цитата(MaxiMuz @ Apr 10 2014, 12:16) #def... Apr 10 2014, 09:24 ViKo Сотворил.v2
Код/*!****************************... Apr 10 2014, 13:59
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|