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

 
 
> #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 10 2014, 09:14
Сообщение #2


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

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



В-общем, не помогло.
Код
__inline void DelAsm(uint32_t CY)
{
__asm {
    LOOP:
    SUBS CY, CY, #1
    BNE LOOP
  }
}

Превращается при оптимизации -O0 в
Код
0000f0  2005              MOVS     r0,#5
0000f2  bf00              NOP      
0000f4  bf00              NOP      
                  |L1.246|
0000f6  1e40              SUBS     r0,r0,#1
0000f8  d000              BEQ      |L1.252|
0000fa  e7fc              B        |L1.246|
                  |L1.252|
0000fc  bf00              NOP

Компилятор чудит. И зачем?
P.S. Во всех остальных случаях компилируется, как надо.
Код
0000ca  2005              MOVS     r0,#5
                  |L1.204|
0000cc  1e40              SUBS     r0,r0,#1
0000ce  d1fd              BNE      |L1.204|



Цитата(demiurg_spb @ Apr 10 2014, 12:07) *
пункт 5.1.1

Вот отсюда ссылки нужные
http://www.keil.com/support/docs/3369.htm
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Apr 10 2014, 09:41
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(ViKo @ Apr 10 2014, 13:14) *
Вот отсюда ссылки нужные
При чём тут нужные или нет?
Я вам ответил на вопрос о том какие регистры и как можно использовать, дав ссылку на первоисточник: AAPCS.
Зная, что кейл соответствует AAPCS.
Вот так никаких вариантов для компилятора изменить что-то при изменении уровня оптимизации нет.
Код
static __inline __asm void delay_8cycles(uint32_t x)
{
loop_delay_8cycles:
    nop
    nop
    nop
    nop
    subs r0,r0,#1
    bne  loop_delay_8cycles
    bx lr
}
Совет: придумывайте более сложные имена меткам, т.к. могут быть совпадения в одной единице трансляции и вылезет ошибка.
Незамеченной она конечно не останется, но зачем заранее закладывать мину?


Цитата(MaxiMuz @ Apr 10 2014, 13:16) *
А вот такая ситуация:
Очень неприлично влезать в чужой топик с вопросом совсем не по теме...
Хотите спросить - создайте тему со своим вопросом, или поищите по форуму. Ваш вопрос неоднократно обсуждался...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 10 2014, 09:49
Сообщение #4


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

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



Цитата(demiurg_spb @ Apr 10 2014, 12:35) *
При чём тут нужные или нет?
Я вам ответил на вопрос о том какие регистры и как можно использовать, дав ссылку на первоисточник: AAPCS.

Не о том был вопрос.
http://infocenter.arm.com/help/topic/com.a...9124245889.html
http://infocenter.arm.com/help/topic/com.a..._user_guide.pdf
7.14 Inline assembler and register access in C and C++ code

Насчет меток - пока не нашел, думаю, компилятор сам их различает в разных функциях.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Apr 10 2014, 10:13
Сообщение #5


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(ViKo @ Apr 10 2014, 13:49) *
Не о том был вопрос.
Как не о том:
Цитата
Но мне нужно загрузить переменную цикла в регистр. Где гарантия, это это регистр ничем не занят?
Именно на этот вопрос и отвечает AAPCS, а не что-то другое. Ну да ладно. Главное результат...

Цитата(ViKo @ Apr 10 2014, 14:08) *
Вызываю функцию напрямую.
Вы мой пример попробуйте (из сообщения 22) - поймёте в чём разница.
Кстати, o0 - это совсем плохой вариант, не нужный НИКОГДА на моей практике.
Если вы увлекались ранее avr-gcc то могли бы увидеть такое в файле задержек delay.h:
Код
#ifndef __OPTIMIZE__
# warning "Compiler optimizations disabled; functions from <util/delay.h> won't work as designed"
#endif

А для вас возможным выходом из ситуации могло бы стать это решение:
http://www.keil.com/support/man/docs/ARMCC...EF_BCFJFGAA.htm
или это
http://www.keil.com/support/man/docs/ca/ca_optimize.htm


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
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
||- - demiurg_spb   Цитата(ViKo @ Apr 10 2014, 13:49) Насчет ...   Apr 10 2014, 10:08
||- - 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 - 22:54
Рейтинг@Mail.ru


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