Обсуждаем контроллеры компании Atmel.
Ответить

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пн апр 05, 2021 08:54:47

следовательно, из кода надо отнять 10 и результат умножить на 2 - примерно то и выйдет, что надо.

Ох уж эти оптимизаторы :)
(0x8C - 10) * 2 = 260

Вычитать нужно, дальше лучше делать как я изначально показывал:
256 / (0x8C - 10) * 128 = 252
((0x8C - 10) * 252) >> 7 = 255

Вместо сдвига вправо на 7 естественно будет 16-ти битный сдвиг влево на 1 с извлечением старшего байта.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пн апр 05, 2021 09:36:14

Akl, не понял что такое 502, посчитал на бумажке( в екселе то есть), работает. Reflector, доходчиво, на бумажке тоже работает. Посмотрю, как лучше в ассемблере сделать.
Единственное, что я и сам пока не знаю, а не придётся ли это преобразование делать нелинейным. :( типа х^2. Но пока для тестов подойдёт линейное преобразование.
СПАСИБО.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пн апр 05, 2021 09:38:37

коэффициент будет ... 1,97

502/256 = 1.96

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пн апр 05, 2021 09:40:37

Единственное, что я и сам пока не знаю, а не придётся ли это преобразование делать нелинейным. :( типа х^2.

Тогда проще из таблицы дёргать, если есть ограничения у МК.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пн апр 05, 2021 09:47:36

Тоже неплохо. Мега8, места во флеше свободного доуя. Протестирую и решу. Спс всем!!
:)

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пн апр 05, 2021 10:40:10

Наиболее эффективно будет таки при помощи табличного декодера выполнить.
:roll:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пн апр 05, 2021 10:41:23

Наиболее эффективно...
... с точки зрения быстродействия.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пн апр 05, 2021 10:45:35

Да, хорошее решение. Только таблицу надо предварительно составить и занести в память.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пн апр 05, 2021 10:47:34

{.. с точки зрения быстродействия}
По сути и расчёт на асме не займёт значительного времени. Да и спешить некуда. В моём случае 100 мс ничего не решают.
{таблицу надо предварительно составить и занести в память.}
Я же «на бумажке « посчитал уже, Вам спасибо.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пн апр 05, 2021 10:54:56

Gudd-Head писал(а):...с точки зрения быстродействия.

Ну там не только быстродействие - возможность оперативного изменения диапазона и/или характеристик преобразования при коэффициенте в виде данных в любом из регистров (0-31) или константного смещения 0-63 для регистровой пары как указателя.
Единственный минус - придется Z занять.
8)

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пн апр 05, 2021 11:01:21

c точки зрения быстродействия.

Умножение 8x8 вместе со сдвигом на 1 бит влево - это одна FMUL выполняемая за 2 такта, плюс еще одна LDI нужна, итого 3 такта.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пн апр 05, 2021 12:22:05

Единственный минус - придется Z занять.
8)

Ассемблер это всегда поиск компромиссов. Объем памяти, быстро действие, занимаемые регистры.
Я не вижу минуса в том, что ах, регистры Z надо занимать. Минуса как такового нет. Это ваше личное предпочтение, как вы распределяете регистры в своих программах. Ваши личные правила.
Есть задача. Есть условия. И ты определяешь, на какие компромиссы идёшь, и какие регистры использовать. Нужно чётко разделять личные предпочтения и целесообразность.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пн апр 05, 2021 12:31:22

Да в конце концов с пушпопом можно любой регистр пользовать.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Вс апр 11, 2021 08:45:23

День добрый всем.
Компилятор Avrasm2. Столкнулся с непонятными его действиями при задании констант.
.equ N=10
.equ t1= int(666938/N-7.9207)
.equ t2= int(666938/N-7-9207/10000)

Почему-то t1 не равно t2, который дает корректный для работы устройства результат.

Второй вопрос. Как задать вещественную константу, например 34.5, чтобы потом простые формулы с её участием использовать для задания целых констант (хотелось как ниже представлено)
A=34.5????
.equ t3= int(666938/A)

Вот не нашел в разных описания avrasm2 этих моментов. Может кто сталкивался.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Вс апр 11, 2021 10:04:18

Посмотрите instruction set (хотя-бы Atmel-0856L-AVR-Instruction-Set-Manual)...
Ежли найдете команду, в которой в качестве данных подставляется ДРОБНОЕ значение - тогда можете работать с оным и под ассемблером.
8)
Не надо путать препроцессор с собственно системой команд.
Собственно система команд и АЛУ могут работать только со знаковой арифметикой.
Для обработки дробных величин (и прочего...) необходимо предварительно создать соответствующие подпрограммы и уж затем скармливать им соответствующего формата данные.
:tea:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Вс апр 11, 2021 10:39:02

в avrasm2 есть
INT(expression) Truncates a floating point expression to integer (ie discards fractional part)
FRAC(expression) Extracts fractional part of a floating point expression (ie discards integer part).
Q7(expression) Converts a fractional floating point expression to a form suitable for the FMUL/FMULS/FMULSU instructions. (sign + 7-bit fraction)
Q15(expression) Converts a fractional floating point expression to a form suitable for the FMUL/FMULS/FMULSU instructions. (sign +15-bit fraction)


перевод
Следующие функции определены только в AVRASM2:
INT (выражение) Обрезает выражение с плавающей запятой до целого числа (т.е. отбрасывает дробную часть)
FRAC (выражение) Извлекает дробную часть выражения с плавающей запятой (т.е. отбрасывает целую часть).
Q7 (выражение) Преобразует дробное выражение с плавающей запятой в форму, подходящую для инструкций FMUL / FMULS / FMULSU. (знак + 7-битная дробь)
Q15 (выражение) Преобразует дробное выражение с плавающей запятой в форму, подходящую для инструкций FMUL / FMULS / FMULSU. (знак + 15-битная дробь

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Вс апр 11, 2021 10:41:49

Спасибо за содержательный ответ.

Я Вас не спрашивал про арифметику вещественных чисел. Вопрос был именно по avrasm2, а не к набору инструкций.
С set ничего не получалось. А по первому есть что сказать?

Архитектурой и ассемблером avr владею на серьезном уровне. Английским техническим тоже.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Вс апр 11, 2021 11:32:50

С.Н. писал(а):Архитектурой и ассемблером avr владею на серьезном уровне
очень плохо ты владеешь, если пытаешься подставить дробное число.
на самом деле делается так:
числа, которые должны быть дробными, представляются целыми числами с фиксированной точкой.
и для каждого такого числа программописатель знает, где в этом числе находится точка.
С.Н. писал(а):A=34.5????
.equ t3= int(666938/A)
поэтому в данном конкретном случае нужно записать так:
.equ t3= 666938 * 10 / 345

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Вс апр 11, 2021 11:44:32

А по первому есть что сказать?
Архитектурой и ассемблером avr владею на серьезном уровне. Английским техническим тоже.

ну в документации на английском ничего нет про флоат константы (там в формуле есть 7.9207),
есть Integer Constants и Strings и Character Constants. Может пропустил.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Вс апр 11, 2021 12:12:29

очень плохо ты владеешь, если пытаешься подставить дробное число.

Во первых, призываю Вас сохранять уважительный тон общения и обращаться на "Вы".
Во-вторых, я спросил то что спросил. Мне не надо объяснять про альтернативную форму представления, тем более что она есть в первой части вопроса, а глаза цепляются за последнюю строчку. Правда?

Я программу пишу для других, у которых познания в этом близко к нулю. Им приходиться править прошивку под себя. Так вот, они в состоянии число записать как привыкли "34.5", а не приводить к удобной форме. Пока обхожусь и без этого, но хочется упростить кое какие моменты.

Вопросы снимаю... Спрашивал личный опыт, а не вырезки документации, которые и сам читал.

Добавлено after 3 minutes 29 seconds:
А по первому есть что сказать?
Архитектурой и ассемблером avr владею на серьезном уровне. Английским техническим тоже.

ну в документации на английском ничего нет про флоат константы (там в формуле есть 7.9207),
есть Integer Constants и Strings и Character Constants. Может пропустил.


Да я тоже не нашел и мало того переперобывал разные комбинации... Видать придется мириться с этим.
Ответить