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

 
 
> Оптимизация, IAR 4.30A for AVR
Visor
сообщение Apr 18 2008, 18:19
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 240
Регистрация: 23-03-07
Пользователь №: 26 428



Странная ситуация. Программа откомпилированная с оптимизацией "Speed Medium" работает замечательно. Если откомпилировать с "Speed High" работает не правильно. Такое чувство что переменные портятся из-за прерываний. Гледел ассемблерный код, вроде нет криминала.
Что это может быть, может сталкивался кто?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MrYuran
сообщение Apr 18 2008, 19:14
Сообщение #2


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Visor @ Apr 18 2008, 21:19) *
Странная ситуация. Программа откомпилированная с оптимизацией "Speed Medium" работает замечательно. Если откомпилировать с "Speed High" работает не правильно. Такое чувство что переменные портятся из-за прерываний. Гледел ассемблерный код, вроде нет криминала.
Что это может быть, может сталкивался кто?

Я сталкивался с таким явлением. Поначалу забил, установил средний или низкий уровень и не стал напрягаться.

А потом пришёл к выводу, что при высокой оптимизации ИАР активно использует анроллинг, то есть выкидывает ненужные (с его точки зрения) циклы.

Таким образом, например, вылетают все паузы на нопах, может ещё что-нибудь.

Надо в руководстве на компилятор почитать про все грани оптимизации.

IAR Compiler Reference называется, там много интересных вещей написано, как надо делать и как не надо

PS: это я всё про иар для МСП, но суть думаю не меняется

Сообщение отредактировал MrYuran - Apr 18 2008, 19:15


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Visor
сообщение Apr 18 2008, 19:33
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 240
Регистрация: 23-03-07
Пользователь №: 26 428



Цитата(MrYuran @ Apr 19 2008, 03:14) *
А потом пришёл к выводу, что при высокой оптимизации ИАР активно использует анроллинг, то есть выкидывает ненужные (с его точки зрения) циклы.
Таким образом, например, вылетают все паузы на нопах, может ещё что-нибудь.

Пустые циклы он действительно выкидывает в этом режиме. Но в той функции из-за которой проблемы нет ничего подобного, всё гладко, одна арифметика.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 18 2008, 20:09
Сообщение #4


Гуру
******

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



Цитата(Visor @ Apr 18 2008, 22:33) *
Но в той функции из-за которой проблемы нет ничего подобного, всё гладко, одна арифметика.
Посмотрите вчерашнюю ветку. Возможно и у вас что-то подобное.


--------------------
На любой вопрос даю любой ответ
"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
Visor
сообщение Apr 18 2008, 21:40
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 240
Регистрация: 23-03-07
Пользователь №: 26 428



Цитата(Сергей Борщ @ Apr 19 2008, 04:09) *
Посмотрите вчерашнюю ветку. Возможно и у вас что-то подобное.

Да кстати, пробывал запрещать прерывания на всё время выполнения функции, глюки пропадали, с чего и сделал вывод о влиянии прерываний. НО! В данной функции не используются переменные модифицируемые в прерываниях.
Go to the top of the page
 
+Quote Post



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

 


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


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