Страница 365 из 400
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн апр 05, 2021 08:54:47
Reflector
[uquote="ARV",url="/forum/viewtopic.php?p=4010219#p4010219"]следовательно, из кода надо отнять 10 и результат умножить на 2 - примерно то и выйдет, что надо.[/uquote]
Ох уж эти оптимизаторы

(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
dgrett
Akl, не понял что такое 502, посчитал на бумажке( в екселе то есть), работает. Reflector, доходчиво, на бумажке тоже работает. Посмотрю, как лучше в ассемблере сделать.
Единственное, что я и сам пока не знаю, а не придётся ли это преобразование делать нелинейным.

типа х^2. Но пока для тестов подойдёт линейное преобразование.
СПАСИБО.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн апр 05, 2021 09:38:37
Gudd-Head
[uquote="ARV",url="/forum/viewtopic.php?p=4010219#p4010219"]коэффициент будет ... 1,97[/uquote]
502/256 = 1.96
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн апр 05, 2021 09:40:37
parovoZZ
[uquote="dgrett",url="/forum/viewtopic.php?p=4010231#p4010231"]Единственное, что я и сам пока не знаю, а не придётся ли это преобразование делать нелинейным.

типа х^2.[/uquote]
Тогда проще из таблицы дёргать, если есть ограничения у МК.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн апр 05, 2021 09:47:36
dgrett
Тоже неплохо. Мега8, места во флеше свободного доуя. Протестирую и решу. Спс всем!!

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн апр 05, 2021 10:40:10
BOB51
Наиболее эффективно будет таки при помощи табличного декодера выполнить.

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн апр 05, 2021 10:41:23
Gudd-Head
[uquote="BOB51",url="/forum/viewtopic.php?p=4010250#p4010250"]Наиболее эффективно...[/uquote]... с точки зрения быстродействия.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн апр 05, 2021 10:45:35
akl
Да, хорошее решение. Только таблицу надо предварительно составить и занести в память.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн апр 05, 2021 10:47:34
dgrett
{.. с точки зрения быстродействия}
По сути и расчёт на асме не займёт значительного времени. Да и спешить некуда. В моём случае 100 мс ничего не решают.
{таблицу надо предварительно составить и занести в память.}
Я же «на бумажке « посчитал уже, Вам спасибо.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн апр 05, 2021 10:54:56
BOB51
Gudd-Head писал(а):...с точки зрения быстродействия.
Ну там не только быстродействие - возможность оперативного изменения диапазона и/или характеристик преобразования при коэффициенте в виде данных в любом из регистров (0-31) или константного смещения 0-63 для регистровой пары как указателя.
Единственный минус - придется Z занять.

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн апр 05, 2021 11:01:21
Reflector
[uquote="Gudd-Head",url="/forum/viewtopic.php?p=4010251#p4010251"]c точки зрения быстродействия.[/uquote]
Умножение 8x8 вместе со сдвигом на 1 бит влево - это одна FMUL выполняемая за 2 такта, плюс еще одна LDI нужна, итого 3 такта.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн апр 05, 2021 12:22:05
Demiurg
[uquote="BOB51",url="/forum/viewtopic.php?p=4010261#p4010261"]Единственный минус - придется Z занять.

[/uquote]
Ассемблер это всегда поиск компромиссов. Объем памяти, быстро действие, занимаемые регистры.
Я не вижу минуса в том, что ах, регистры Z надо занимать. Минуса как такового нет. Это ваше личное предпочтение, как вы распределяете регистры в своих программах. Ваши личные правила.
Есть задача. Есть условия. И ты определяешь, на какие компромиссы идёшь, и какие регистры использовать. Нужно чётко разделять личные предпочтения и целесообразность.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн апр 05, 2021 12:31:22
dgrett
Да в конце концов с пушпопом можно любой регистр пользовать.
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
BOB51
Посмотрите instruction set (хотя-бы Atmel-0856L-AVR-Instruction-Set-Manual)...
Ежли найдете команду, в которой в качестве данных подставляется ДРОБНОЕ значение - тогда можете работать с оным и под ассемблером.
Не надо путать препроцессор с собственно системой команд.
Собственно система команд и АЛУ могут работать только со знаковой арифметикой.
Для обработки дробных величин (и прочего...) необходимо предварительно создать соответствующие подпрограммы и уж затем скармливать им соответствующего формата данные.

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс апр 11, 2021 10:39:02
oleg110592
в 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
С.Н.
Спасибо за содержательный ответ.
[uquote="BOB51",url="/forum/viewtopic.php?p=4013722#p4013722"][/uquote]
Я Вас не спрашивал про арифметику вещественных чисел. Вопрос был именно по avrasm2, а не к набору инструкций.
С set ничего не получалось. А по первому есть что сказать?
Архитектурой и ассемблером avr владею на серьезном уровне. Английским техническим тоже.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс апр 11, 2021 11:32:50
Starichok51
С.Н. писал(а):Архитектурой и ассемблером avr владею на серьезном уровне
очень плохо ты владеешь, если пытаешься подставить дробное число.
на самом деле делается так:
числа, которые должны быть дробными, представляются целыми числами с фиксированной точкой.
и для каждого такого числа программописатель знает, где в этом числе находится точка.
С.Н. писал(а):A=34.5????
.equ t3= int(666938/A)
поэтому в данном конкретном случае нужно записать так:
.equ t3= 666938 * 10 / 345
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс апр 11, 2021 11:44:32
oleg110592
[uquote="С.Н.",url="/forum/viewtopic.php?p=4013743#p4013743"]А по первому есть что сказать?
Архитектурой и ассемблером avr владею на серьезном уровне. Английским техническим тоже.[/uquote]
ну в документации на английском ничего нет про флоат константы (там в формуле есть 7.9207),
есть Integer Constants и Strings и Character Constants. Может пропустил.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс апр 11, 2021 12:12:29
С.Н.
[uquote="Starichok51",url="/forum/viewtopic.php?p=4013763#p4013763"]очень плохо ты владеешь, если пытаешься подставить дробное число.[/uquote]
Во первых, призываю Вас сохранять уважительный тон общения и обращаться на "Вы".
Во-вторых, я спросил то что спросил. Мне не надо объяснять про альтернативную форму представления, тем более что она есть в первой части вопроса, а глаза цепляются за последнюю строчку. Правда?
Я программу пишу для других, у которых познания в этом близко к нулю. Им приходиться править прошивку под себя. Так вот, они в состоянии число записать как привыкли "34.5", а не приводить к удобной форме. Пока обхожусь и без этого, но хочется упростить кое какие моменты.
Вопросы снимаю... Спрашивал личный опыт, а не вырезки документации, которые и сам читал.
Добавлено after 3 minutes 29 seconds:
[uquote="oleg110592",url="/forum/viewtopic.php?p=4013766#p4013766"][uquote="С.Н.",url="/forum/viewtopic.php?p=4013743#p4013743"]А по первому есть что сказать?
Архитектурой и ассемблером avr владею на серьезном уровне. Английским техническим тоже.[/uquote]
ну в документации на английском ничего нет про флоат константы (там в формуле есть 7.9207),
есть Integer Constants и Strings и Character Constants. Может пропустил.[/uquote]
Да я тоже не нашел и мало того переперобывал разные комбинации... Видать придется мириться с этим.