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

 
 
> iar v4.11 - disassembly непонятно работает
Юдин Алексей
сообщение Feb 26 2009, 10:57
Сообщение #1





Группа: Участник
Сообщений: 8
Регистрация: 16-10-06
Пользователь №: 21 358



Доброго времени суток. Проблема в следующем. Дизассемблер по-разному дизассемблирует один и тот же код в программе. Вот пример:

случай первый:
CODE

WDTCTL = WDTPW+WDTHOLD; // Stop watchdog timer
__low_level_init:
00C3C8 40B2 5A80 0120 mov.w #0x5A80,&WDTCTL

тут все понятно - все верно

случай второй:
CODE

WDTCTL = WDTPW + WDTHOLD;
Flash_ww:
00AB76 403E 5A80 mov.w #0x5A80,R14
00AB7A 4E4F mov.b R14,R15
00AB7C 108E swpb R14
00AB7E F03E 00FF and.w #0xFF,R14
00AB82 4FC2 0120 mov.b R15,&WDTCTL
00AB86 4EC2 0121 mov.b R14,&0x121

а вот здесь не понятно почему так, а не как в 1ом случае. Соответственно здесь меня ресетит (согласно коду в дизассемблере так и должно происходить).

В чем проблема, подскажите?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Юдин Алексей
сообщение Feb 26 2009, 12:12
Сообщение #2





Группа: Участник
Сообщений: 8
Регистрация: 16-10-06
Пользователь №: 21 358



ну по умолчанию оптимизация стояла low. С ней уже много у меня косяков было, поэтому и поставил none. Версия 4.11b - не самая свежая. Вроде 4.20 - последняя. А про оптимизацию все по-разному советуют, почему отключать не надо?

Цитата
Попробуйте *(volatile unsigned int *)&WDTCTL = WDTPW+WDTHOLD;


Спасибо, помогло. А что ж IARу так не нравилось?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 26 2009, 12:25
Сообщение #3


Гуру
******

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



Цитата(Юдин Алексей @ Feb 26 2009, 14:12) *
ну по умолчанию оптимизация стояла low. С ней уже много у меня косяков было, поэтому и поставил none.
То есть вместо того, чтобы устранять "косяки" вы их загнали поглубже. Правильно написанная программа работает при любой оптимизации. Точнее, может иногда не работать при низких уровнях оптимизации потому что просто не будет успевать.
Цитата(Юдин Алексей @ Feb 26 2009, 14:12) *
А про оптимизацию все по-разному советуют, почему отключать не надо?
А зачем ее отключать? Зачем заставлять процессор выполнять ненужные действия, если можно попросить компилятор сделать лучше? Отключать какие-то конкретные проходы оптимизации можно, если они генерят ошибочный код, но это бывает настолько редко и как правило на самых высоких уровнях оптимизации. Уж на low-то ошибок не должно быть точно. Я использовал максимальную оптимизацию по скорости.
Цитата(Юдин Алексей @ Feb 26 2009, 14:12) *
Спасибо, помогло. А что ж IARу так не нравилось?
Пока трудно сказать. Надо смотреть, как описан WDTCTL в заголовочных файлах. Для этого можно попросить компилятор сохранить вывод препроцессора в файл.


--------------------
На любой вопрос даю любой ответ
"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



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

 


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


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