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

 
 
 
Reply to this topicStart new topic
> Ошибка в реализации mul Rd,Rx,Ry?, AT32UC3A3256
makc
сообщение Mar 22 2010, 18:57
Сообщение #1


Гуру
******

Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904



Доброго времени суток!

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


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

Дополнение: в симуляторе описанная последовательность команд всегда исполняется правильно. Вне зависимости от порядка операндов или их значений.


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
jasper
сообщение Mar 23 2010, 05:26
Сообщение #2


Народный чинитель
***

Группа: Участник
Сообщений: 415
Регистрация: 15-07-05
Пользователь №: 6 811



У меня, на AT32UC3A0512, считает правильно, в обоих случаях.
Go to the top of the page
 
+Quote Post
makc
сообщение Mar 23 2010, 08:57
Сообщение #3


Гуру
******

Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904



Спасибо. smile.gif

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


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
altlogic
сообщение Mar 23 2010, 08:58
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 222
Регистрация: 2-12-06
Из: г. Хабаровск
Пользователь №: 23 035



А какая у вас ревизия?

В 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.


--------------------
С уважением, Вячеслав
Go to the top of the page
 
+Quote Post
makc
сообщение Mar 23 2010, 12:28
Сообщение #5


Гуру
******

Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904



Цитата(altlogic @ Mar 23 2010, 11:58) *
А какая у вас ревизия?


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

PS: Так что получается не ревизию на свалку, а добро пожаловать в программную реализацию операции умножения. smile.gif


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
altlogic
сообщение Mar 24 2010, 01:49
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 222
Регистрация: 2-12-06
Из: г. Хабаровск
Пользователь №: 23 035



Это же ужас. Я ведь пишу практически всё на Си, сколько бы я искал эту ошибку... Как быстро вы установили, что ядро неверно выполняет инструкцию?


--------------------
С уважением, Вячеслав
Go to the top of the page
 
+Quote Post
makc
сообщение Mar 24 2010, 09:10
Сообщение #7


Гуру
******

Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904



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


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

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


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 15th June 2025 - 17:28
Рейтинг@Mail.ru


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