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

 
 
 
Reply to this topicStart new topic
> Оптимизация, 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
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
Сергей Борщ
сообщение Apr 19 2008, 07:27
Сообщение #6


Гуру
******

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



Цитата(Visor @ Apr 19 2008, 00:40) *
В данной функции не используются переменные модифицируемые в прерываниях.
Наверное, у вас где-то ошибка в программе. Пожалуй, телепатически трудно диагностировать что-то более конкретное wink.gif. Это программа управления новой зенитной ракеты или есть какие-то другие основания держать ее в строгом секрете? Всю показывать не обязательно, можно выкинуть все лишнее. Часто уже на этапе отсекания лишнего ошибка находится. Функция получает какие-то параметры? Попробуйте передавать ей константы - возможно виновата не функция, а просто передаваемые ей значения портятся еще до вызова функции.


--------------------
На любой вопрос даю любой ответ
"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 19 2008, 12:47
Сообщение #7


Местный
***

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



Цитата(Сергей Борщ @ Apr 19 2008, 15:27) *
Наверное, у вас где-то ошибка в программе. ...

Может и ошибка ..., но странно то, что зависит от оптимизации.
Функции передаются указатели на два массива:
Код
Function(&m[0], &n[0]);

Сама функция:
Код
void Function(unsigned char *x, unsigned char *y)
{
  register unsigned char i;
  for(i=0;i<16;i++)
  {
    x[i] ^= y[i];
    ...
  }
  ...
}

Внутри производятся операции с элементами массивов.
Go to the top of the page
 
+Quote Post
vet
сообщение Apr 19 2008, 16:32
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



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


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 19 2008, 16:49
Сообщение #9


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(Visor @ Apr 19 2008, 16:47) *
Может и ошибка ..., но странно то, что зависит от оптимизации.
................
Внутри производятся операции с элементами массивов.
По такому количеству кода делать какие-то выводы невозможно,
если автор действительно хочет разобраться с проблемой, нужно удалять части кода
до тех пор пока проблема будет присутствовать...
ВЕСЬ ОСТАВШИЙСЯ МИНИМАЛЬНЫЙ КОД С ОШИБКОЙ нужно опубликовать, тогда Ваша
ошибка или ошибка компилятора будет найдена очень быстро.
Ну или Вы ее найдете быстрее в процессе удаления "лишнего кода".
Go to the top of the page
 
+Quote Post
sKWO
сообщение Apr 20 2008, 09:39
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Цитата(Visor @ Apr 19 2008, 00:40) *
Да кстати, пробывал запрещать прерывания на всё время выполнения функции, глюки пропадали, с чего и сделал вывод о влиянии прерываний. НО! В данной функции не используются переменные модифицируемые в прерываниях.

Может глупость но как у Вас написан мэйн?
Код
_C_task main ?


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
Visor
сообщение Apr 21 2008, 17:51
Сообщение #11


Местный
***

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



Цитата(sKWO @ Apr 20 2008, 17:39) *
Может глупость но как у Вас написан мэйн?
Код
_C_task main ?

Нет не так, но это ничего не меняет.
И ещё, в симуляции всё работает замечательно. Но без аппаратных прерываний.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 21 2008, 20:04
Сообщение #12


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(Visor @ Apr 21 2008, 21:51) *
И ещё, в симуляции всё работает замечательно. Но без аппаратных прерываний.
Вот и славненько, все работает ? А в чем тогда вопрос ?
Go to the top of the page
 
+Quote Post
Visor
сообщение Apr 24 2008, 17:39
Сообщение #13


Местный
***

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



Цитата(singlskv @ Apr 22 2008, 04:04) *
Вот и славненько, все работает ? А в чем тогда вопрос ?

В симуляции работало, в железе нет.
Но уже разобрался, увеличил CSTACK и всё. И как сразу не догадался ... 01.gif
Go to the top of the page
 
+Quote Post

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

 


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


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