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

 
 
> #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
Ответов
ViKo
сообщение Apr 9 2014, 15:23
Сообщение #2


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

Группа: Модераторы
Сообщений: 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--); }
Go to the top of the page
 
+Quote Post
Shamil
сообщение Apr 10 2014, 01:18
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 160
Регистрация: 23-12-04
Из: Уфа
Пользователь №: 1 631



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

Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 10 2014, 02:24
Сообщение #4


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

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



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

Помню-помню... разговоры. Но я не вставляю после if.
P.S. у меня же все ветки в скобках { }, может, их хватит? rolleyes.gif

Другой вопрос всплыл - Как можно определить, с какими параметрами оптимизации задана копмиляция? Что можно было в одном случае в формулу подсунуть 5, а в другом 6.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 10 2014, 02:58
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(ViKo @ Apr 10 2014, 04:24) *
Как можно определить, с какими параметрами оптимизации задана копмиляция?
А какой у нас компилятор?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 10 2014, 03:01
Сообщение #6


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

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



Цитата(Сергей Борщ @ Apr 10 2014, 05:58) *
А какой у нас компилятор?

Кейловский, ARMCC из uVision.
Там из списка выбирается -O0... -O3, отдельно галка -Otime.
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
|- - 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


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

 


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


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