Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Переезд с IAR 3.2 на IAR 3.41
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
Dawyd
Всем привет, тут проблемка образовалась
А именно, писал я программку на ассемблере в IAR 3.2 она работала всё путем, потом поставил IAR 3.41, но както возникла необходимость снова влезть в тот старый проект, подцепил кристалл, делаю Debug, а он матерится на стек и посылает в Tools>Options.

Вопрос чё делать, в IARе я пока не очень разобрался.
P.S. Заранее благодарен за помощь.
rezident
Цитата(Dawyd @ Dec 28 2006, 16:15) *
Вопрос чё делать, в IARе я пока не очень разобрался.
P.S. Заранее благодарен за помощь.

Для начала нужно скачать самую последнюю версию - 3.42A. Может она менее глючная, чем предыдущая 3.41. А вообще до сих пор 3.4x были довольно сырыми и лично я пользовался версией 3.30A.
VAI
Цитата
лично я пользовался версией 3.30A.

А какой пользуетесь?
Я пока не проводил испытаний 3.42а. Вначале февраля буду перекомпилировать большой проект с msp430f149 на msp430f1611. Вот тогда и собираюсь их сравнить.
rezident
Цитата(VAI @ Dec 28 2006, 18:35) *
Цитата
лично я пользовался версией 3.30A.

А какой пользуетесь?

Дык 3.30A и пользуюсь. Пока еще идут авральные работы и некогда тестировать новую версию.
HARMHARM
IAR 3.41 использовать не надо. Буквально сегодня столкнулся с проблемой, компилятор иногда не вставляет инструкцию AND, у меня случалось когда я маскировал байт значением 0x80; другие биты работают нормально. Убил часа 3. В 3.42 исправлено, буду проверять. А вообще лучше подождать еще smile.gif

P.S. Кстати, поставил 3.42А, там где это "исправили". Ан как не было AND, так и нету...

unsigned char TimerData[10];
if (TimerData[2] & BIT7)
??CheckRTC_2:
// A вот тут должен был быть AND.B #080h, Rxx и еще вместе с временной переменной, а лучше бы BIT.B #080h, 0x2(SP).
CMP.B #0x0, 0x2(SP)
JGE ??CheckRTC_3


Где бы взять 3.30?..
HARMHARM
Протестировал свой код с IAR 3.30A, выходит проблема все же в коде... Проблема следующая: проверяется бит 7 (0х80) в переменной типа unsigned char. Компилятор вставляет
CMP.B #0x0,0x2(SP)
вместо
BIT.B #0x80,0x2(SP)
в коде
if ( TimerData[2] & 0x80 )

Я понимаю, если бы был signed char... C 0x40 и меньше работает нормально.

Подскажите пожалуйста, в чем же я ошибся?
VAI
если не хотите выкладывать текст полностью, то сделайте тестовый проект, в котором проявляется Ваша ошибка и выложите его.
HARMHARM
Сделал тестовый файлик, озадачен до крайности... Прилагаю на всякий случай листинг того, что у меня компилируется.
Concorde
Цитата(HARMHARM @ Dec 30 2006, 23:58) *
Сделал тестовый файлик, озадачен до крайности... Прилагаю на всякий случай листинг того, что у меня компилируется.

Все правильно он скомпилировал.
При сравнении с нулем "CMP #0, 2(SP)" бит 7 (0x80) просто скопируется во флаг 'N'.
Соответственно, след. jump проверяет этот флаг.
Оптимизация (для нуля используется константный генератор - меньше кода/быстрее).
HARMHARM
Цитата(Concorde @ Jan 9 2007, 20:39) *
Все правильно он скомпилировал.
При сравнении с нулем "CMP #0, 2(SP)" бит 7 (0x80) просто скопируется во флаг 'N'.
Соответственно, след. jump проверяет этот флаг.
Оптимизация (для нуля используется константный генератор - меньше кода/быстрее).

Точно! Вот ведь я слепец. Огромное спасибо! cheers.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.