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

 
 
> Про IAR компилятор С
Dopler
сообщение Feb 6 2007, 14:45
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



Здравствуйте.

Раньше никогда на C под железо не писал, только на ассемблере. Но жизнь показывает, что для ARM писать все на asm не актуально. Начал смотреть, какой код генерирует компилятор. Вот для примера две строки на C:

Код
      for(waiting_time = 1999; waiting_time >= 0; waiting_time--);

      for(waiting_time = 0; waiting_time <= 2000; waiting_time++);


Обе эти строки эквивалентны с точки зрения выполнения программы на С (т.е. будет 2000 шагов). Компилятор генерирует следующий код:

\ main:
\ ??main_0:
\ 00000000 CF00A0E3 MOV R0,#+207
\ 00000004 700E80E3 ORR R0,R0,#0x700
\ 00000008 000000EA B ??main_1
\ ??main_2:
\ 0000000C 010040E2 SUB R0,R0,#+1
\ ??main_1:
\ 00000010 000050E3 CMP R0,#+0
\ 00000014 FCFFFF5A BPL ??main_2
19
20 //AT91C_BASE_PIOB->PIO_CODR = 1 << 22;
21 for(waiting_time = 0; waiting_time < 2000; waiting_time++) ;
\ 00000018 0000A0E3 MOV R0,#+0
\ ??main_3:
\ 0000001C 7D0E50E3 CMP R0,#+2000
\ 00000020 F6FFFFAA BGE ??main_0
\ 00000024 010080E2 ADD R0,R0,#+1
\ 00000028 FBFFFFEA B ??main_3



Мне кажется, что выделенная строка явно лишняя, так как флаг нулевого значения выставляется и в предыдущей команде. Во-вторых, при декременте (в первом варианте) есть лишний переход. Таким образом, эквивалентность циклов на С достигнута искуственно. Возможно, это сделано специально (а возможно, человек пока способен генерировать все же лучший код)? Возможно, это где-то описанно или отключается?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
scifi
сообщение Feb 9 2007, 11:37
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Если я правильно понял, нужно получить малые задержки. Предлагаю для этих целей написать функцию на ассемблере и вызывать её из Си. Если пытаться добиться этого при помощи компилятора, то результат будет зависеть от опций компилятора и, возможно, его версии, что не очень приятно (проапгрейдили компилятор - будьте готовы к тому, что старый код перестанет работать).
Время выполнения кода зависит от модели процессора и задержек при доступе к памяти. Для процессора ARM7TDMI времена выполнения инструкций указаны в "ARM7TDMI Technical Reference Manual":
http://www.arm.com/pdfs/DDI0210C_7tdmi_r4p1_trm.pdf (2 MB)
О задержках при доступе к памяти: см. документацию на используемый микроконтроллер.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 9 2007, 13:13
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(scifi @ Feb 9 2007, 10:37) *
Время выполнения кода зависит от модели процессора и задержек при доступе к памяти. Для процессора ARM7TDMI времена выполнения инструкций указаны в "ARM7TDMI Technical Reference Manual":

И наличия MAM и наличия Кэш и эффективности работы оных а еще DMA захватит шину smile.gif. Короче, лучше навсегда выкиньте из головы желание узнать для более-менее современых контроллеров "точное" время исполнения чего-либо.

Цитата(Dopler @ Feb 9 2007, 12:02) *
Так #pragma optimize не позволяет повысить уровень оптимизации, что это за лажа такая?

Изъясняйтесь конкретнее.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Dopler   Про IAR компилятор С   Feb 6 2007, 14:45
- - Newegor   Поиграйтесь с настройками оптимизации. При различн...   Feb 6 2007, 15:08
- - VAI   я, обычно, смотрю листинг, что у меня получилось, ...   Feb 6 2007, 16:58
|- - scifi   Забавно, а у меня комилятор в обоих случаях сгенер...   Feb 8 2007, 15:26
|- - Dopler   Цитата(scifi @ Feb 8 2007, 15:26) Приме...   Feb 8 2007, 16:02
|- - Сергей Борщ   Цитата(Dopler @ Feb 8 2007, 15:02) Если у...   Feb 8 2007, 17:28
- - scifi   ЦитатаСледующий вопрос, а как-нибудь вообще можно ...   Feb 8 2007, 20:49
|- - Dopler   Цитата(scifi @ Feb 8 2007, 20:49) Попробу...   Feb 8 2007, 22:21
|- - zltigo   Цитата(Dopler @ Feb 8 2007, 21:21) И при ...   Feb 8 2007, 22:50
- - Dopler   Похоже самый надежный способ, это тот, который рек...   Feb 9 2007, 08:51
|- - Dopler   Цитата(scifi @ Feb 9 2007, 11:37) Если я ...   Feb 9 2007, 12:36
||- - MrYuran   Цитата(Dopler @ Feb 9 2007, 15:36) Просто...   Mar 19 2008, 08:37
||- - IgorKossak   Цитата(MrYuran @ Mar 19 2008, 10:37) А фу...   Mar 19 2008, 08:48
|- - Dopler   Цитата(zltigo @ Feb 9 2007, 13:13) Цитата...   Feb 9 2007, 14:40
|- - zltigo   Цитата(Dopler @ Feb 9 2007, 13:40) Я имел...   Feb 9 2007, 15:09
- - Dopler   Так #pragma optimize не позволяет повысить уровень...   Feb 9 2007, 13:02
- - Dopler   Вернемся к поиску оптимального кода. Приведенный в...   Feb 9 2007, 23:21
- - Dopler   А вообще, компилятор действительно не плох, он цеп...   Feb 9 2007, 23:32
|- - MALLOY2   Вот что у меня получилось IAR 4.41 оптимизция полн...   Feb 20 2007, 00:07
- - aspID   дабы не открывать новую ветку... Помогите понять,...   Mar 19 2008, 07:03
- - IgorKossak   Цитата(aspID @ Mar 19 2008, 09:03) дабы н...   Mar 19 2008, 08:03
- - aspID   Цитата(IgorKossak @ Mar 19 2008, 14:03) Н...   Mar 19 2008, 08:08
- - IgorKossak   Цитата(aspID @ Mar 19 2008, 10:08) Да, им...   Mar 19 2008, 08:13


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 22:43
Рейтинг@Mail.ru


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