|
XMEGA и IAR5.11B, оптимизатор |
|
|
|
Aug 11 2009, 10:11
|
Частый гость
 
Группа: Участник
Сообщений: 108
Регистрация: 14-07-09
Из: Украина, Киев
Пользователь №: 51 248

|
Добрый день, всем! Есть один вопрос. Сейчас занимаюсь оптимизацией кода под ATXMEGA128A1, и вот на что я наткнулся. Внешняя память у меня не подключена, все находится внутри. Следовательно регистры RAMPD,RAMPX,RAMPZ,RAMPY у меня всегда равны нулю. Но компилер упорно их все время обнуляет и в фоне, и в прерываниях. При этом для сохранения в прерываниях он использует обычные регистры, которые он перед этим сохраняет, а потом восстанавливает. Т.к. прерываний у меня дофига, хотелось как-то убрать лишние действия. Вопрос, кто-нить делал это? В стартапе я их обнулю, и дальше компилятор забывает об их существовании. У компилятора есть предопределенные символы __HAS_RAMPX__, ..., но отенить их #undef нельзя, к сожалению. Или на винавр переходить, как там дела с этим обстоят?
|
|
|
|
|
 |
Ответов
|
Aug 11 2009, 11:29
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Выкинте в корзину этот совет, вы получите нерабочий код, у mega и xmega разный порядок обращения к байтам в 16-битных SFR. Да ну? Читать надо внимательнее: Цитата Ставим в версии 5.30 тип проца ATxmega128A3
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Aug 11 2009, 11:31
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(Rst7 @ Aug 11 2009, 15:29)  Да ну? Читать надо внимательнее: ошибся. Используя этот спосб оптимизации Вы должны гарантировать что все RAMPx регистры содержат нули когда разрешены прерыванмя, RAMPX/Y/D по условию задачи не изменяются и это просто гарантировать. С RAMPZ сложнее, он используеться для адресации флеш в инструкции ELPM. Если в программе используеться FLASH для хранения данных то необходимо запрещать прерывания на все время пока RAMPZ не равен 0. Анатолий.
Сообщение отредактировал aesok - Aug 11 2009, 11:51
|
|
|
|
Сообщений в этой теме
koljakh XMEGA и IAR5.11B Aug 11 2009, 10:11 aesok Цитата(koljakh @ Aug 11 2009, 14:11) сожа... Aug 11 2009, 10:15 koljakh Цитата(aesok @ Aug 11 2009, 12:15) Точно ... Aug 11 2009, 10:28  koljakh Ядро одинаковое
Цитата(Xenia @ Aug 11 2009, ... Aug 11 2009, 10:37   Xenia Цитата(koljakh @ Aug 11 2009, 13:37) Ядро... Aug 11 2009, 10:48    koljakh Цитата(Xenia @ Aug 11 2009, 12:48) Трудно... Aug 11 2009, 11:08 Rst7 ЦитатаНо компилер упорно их все время обнуляет и в... Aug 11 2009, 10:22 Xenia Цитата(Rst7 @ Aug 11 2009, 13:22) Ждем но... Aug 11 2009, 10:34 Rst7 ЦитатаВот только исправлен ли там этот баг, я не з... Aug 11 2009, 10:55 Xenia Цитата(Rst7 @ Aug 11 2009, 13:55) Я, кста... Aug 11 2009, 11:02 koljakh Цитата(Rst7 @ Aug 11 2009, 12:55) Это не ... Aug 11 2009, 11:25  aesok Цитата(koljakh @ Aug 11 2009, 15:18) Спас... Aug 11 2009, 11:27 Rst7 ЦитатаА какая версия еще новее, чем EWAVR-5.30 ?
... Aug 11 2009, 11:05 Rst7 ЦитатаОгромное спасибо, буду качать
Можете не тор... Aug 11 2009, 11:11 Rst7 ЦитатаЩа попробую, получается что все-таки тип про... Aug 11 2009, 11:31 koljakh Цитата(Rst7 @ Aug 11 2009, 13:31) Не тип ... Aug 11 2009, 11:46 Rst7 ЦитатаС RAMPZ сложнее, он используеться для адреса... Aug 11 2009, 11:56 koljakh Цитата(Rst7 @ Aug 11 2009, 13:56) Либо хр... Aug 11 2009, 12:08
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|