Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > Умножение двухбайтовых чисел для AtTiny2313 |
Автор: Arcanum 6.11.2011, 07:09 | ||||
Нашёл на одном http://elm-chan.org/docs/avrlib/mul08.txt функцию умножения байтовых чисел с двухбайтовым результатом. содрал и переделал под себя. макрос выполняет вспомогательную функцию
так вот эта процедура вызывается из моего кода два раза:
вот MULD MinsH, MinsL, TmpVar выдаёт порнографию при умножении 02 * A4 = FF48 а не 0148 а MULD StepsH, StepsL, TmpVar считает правильно раз 10 проверял вроде всё аналогично но что за на фиг?! всю ночь с этим мучался |
Автор: UniBomb 6.11.2011, 17:59 |
Эта функция для знакового умножения двух чисел. При этом старший бит определяет знак числа. A4 можно представить как 164 беззнаковое или как -92. Соответсвенно и результат получается знаковым. Посему либо приводи результат к беззнаковому представлению, либо ищи функцию беззнакового умножения. Для второго пути поищи книги "Микроконтроллеры? Это же просто!" за авторством товарища Фрунзе А.В. Там в том числе в третьем и четвёртом томе разбираются вопросы арифметических операций над знаковыми и беззнаковыми числами. Единственное что - все примеры на асме для ПИКовый мк, но переделать их под АВР ассемблер не составит труда. |
Автор: Arcanum 7.11.2011, 06:45 |
Спасибо! всё понял и нашёл функцию для без знаковых вычислений. переделал. работает. |