Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Ошибка в реализации mul Rd,Rx,Ry?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > AVR32
makc
Доброго времени суток!

Обнаружилась проблема в камне, указанном в шапке темы, а именно некорректная работа операции умножения:
Код
mov r9, 2
mov r6, 233
mul r8, r6, r9


В результате этой последовательности команд в r8 должно оказаться значение 466. Однако под отладчиком (да и по отладочной выдаче в программе) я вижу значение 464. При этом если поменять операнды местами (например, mul r8,r9,r6), то результат оказывает верным.
В связи с этим вопрос: проблема только лишь в моем экземпляре МК, либо же это врожденная проблема ядра и эта ошибка воспроизводится и на других экземплярах?

Дополнение: в симуляторе описанная последовательность команд всегда исполняется правильно. Вне зависимости от порядка операндов или их значений.
jasper
У меня, на AT32UC3A0512, считает правильно, в обоих случаях.
makc
Спасибо. smile.gif

Сегодня добрался до другого экземпляра такого же процессора и оказалось, что на нем все в порядке. Инструкция работает как положено, ошибки нет при любой комбинации операндов. Видимо это неисправность отдельного экземпляра.
altlogic
А какая у вас ревизия?

В errata на UC3A3/A4 написано, что умножение для ревизии D не работает. Это ж что, целую ревизию на свалку? Жёсткоsmile.gif))

Multiply instructions do not work on RevD.
All the multiply instructions do not work.
Fix/Workaround
Do not use the multiply instructions.
makc
Цитата(altlogic @ Mar 23 2010, 11:58) *
А какая у вас ревизия?


Сбоило, да еще так причудливо, на ревизии D. Смотрел старый документ, в нем не было такой ерраты.
На новой ревизии Е, действительно, такой проблемы нет. Что и подтвердил сегодняшний эксперимент.

PS: Так что получается не ревизию на свалку, а добро пожаловать в программную реализацию операции умножения. smile.gif
altlogic
Это же ужас. Я ведь пишу практически всё на Си, сколько бы я искал эту ошибку... Как быстро вы установили, что ядро неверно выполняет инструкцию?
makc
Цитата(altlogic @ Mar 24 2010, 04:49) *
Это же ужас. Я ведь пишу практически всё на Си, сколько бы я искал эту ошибку... Как быстро вы установили, что ядро неверно выполняет инструкцию?


Я тоже пишу на С. На поиски ушло около часа. Это был модуль, работающий с файловой системой типа FAT для SD-карт. Неверно вычислялось смещение начала корневого каталога. На программной модели с образом того же диска все замечательно работало, а в железе начались проблемы. Конкретная функция, где возникала ошибка, была установлена практически сразу. Дальше локализовал место ошибки в функции (это уже совсем не сложно), а уж потом начались эксперименты.... smile.gif

Интересно, что в зависимости от опций компилятора код довольно сильно меняется и в результате можно найти такую комбинацию, что все работает. Но, как Вы понимаете, это до поры до времени... Пока не появятся параметры, провоцирующие ошибку.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.