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

Обсуждаем контроллеры компании Atmel.
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

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

Сообщение 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 с извлечением старшего байта.
Реклама
dgrett
Вымогатель припоя
Сообщения: 615
Зарегистрирован: Вс дек 28, 2014 21:54:05

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

Сообщение dgrett »

Akl, не понял что такое 502, посчитал на бумажке( в екселе то есть), работает. Reflector, доходчиво, на бумажке тоже работает. Посмотрю, как лучше в ассемблере сделать.
Единственное, что я и сам пока не знаю, а не придётся ли это преобразование делать нелинейным. :( типа х^2. Но пока для тестов подойдёт линейное преобразование.
СПАСИБО.
Я всё-всё узнAю и стану профессором.
Реклама
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

[uquote="ARV",url="/forum/viewtopic.php?p=4010219#p4010219"]коэффициент будет ... 1,97[/uquote]
502/256 = 1.96
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
parovoZZ
Мудрый кот
Сообщения: 1759
Зарегистрирован: Пт июн 01, 2018 07:28:45

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

Сообщение parovoZZ »

[uquote="dgrett",url="/forum/viewtopic.php?p=4010231#p4010231"]Единственное, что я и сам пока не знаю, а не придётся ли это преобразование делать нелинейным. :( типа х^2.[/uquote]
Тогда проще из таблицы дёргать, если есть ограничения у МК.
Реклама
Эиком - электронные компоненты и радиодетали
dgrett
Вымогатель припоя
Сообщения: 615
Зарегистрирован: Вс дек 28, 2014 21:54:05

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

Сообщение dgrett »

Тоже неплохо. Мега8, места во флеше свободного доуя. Протестирую и решу. Спс всем!!
:)
Я всё-всё узнAю и стану профессором.
Реклама
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15581
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Наиболее эффективно будет таки при помощи табличного декодера выполнить.
:roll:
Реклама
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

[uquote="BOB51",url="/forum/viewtopic.php?p=4010250#p4010250"]Наиболее эффективно...[/uquote]... с точки зрения быстродействия.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Да, хорошее решение. Только таблицу надо предварительно составить и занести в память.
dgrett
Вымогатель припоя
Сообщения: 615
Зарегистрирован: Вс дек 28, 2014 21:54:05

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

Сообщение dgrett »

{.. с точки зрения быстродействия}
По сути и расчёт на асме не займёт значительного времени. Да и спешить некуда. В моём случае 100 мс ничего не решают.
{таблицу надо предварительно составить и занести в память.}
Я же «на бумажке « посчитал уже, Вам спасибо.
Я всё-всё узнAю и стану профессором.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15581
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Gudd-Head писал(а):...с точки зрения быстродействия.
Ну там не только быстродействие - возможность оперативного изменения диапазона и/или характеристик преобразования при коэффициенте в виде данных в любом из регистров (0-31) или константного смещения 0-63 для регистровой пары как указателя.
Единственный минус - придется Z занять.
8)
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

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

Сообщение Reflector »

[uquote="Gudd-Head",url="/forum/viewtopic.php?p=4010251#p4010251"]c точки зрения быстродействия.[/uquote]
Умножение 8x8 вместе со сдвигом на 1 бит влево - это одна FMUL выполняемая за 2 такта, плюс еще одна LDI нужна, итого 3 такта.
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

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

Сообщение Demiurg »

[uquote="BOB51",url="/forum/viewtopic.php?p=4010261#p4010261"]Единственный минус - придется Z занять.
8)[/uquote]
Ассемблер это всегда поиск компромиссов. Объем памяти, быстро действие, занимаемые регистры.
Я не вижу минуса в том, что ах, регистры Z надо занимать. Минуса как такового нет. Это ваше личное предпочтение, как вы распределяете регистры в своих программах. Ваши личные правила.
Есть задача. Есть условия. И ты определяешь, на какие компромиссы идёшь, и какие регистры использовать. Нужно чётко разделять личные предпочтения и целесообразность.
dgrett
Вымогатель припоя
Сообщения: 615
Зарегистрирован: Вс дек 28, 2014 21:54:05

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

Сообщение dgrett »

Да в конце концов с пушпопом можно любой регистр пользовать.
Я всё-всё узнAю и стану профессором.
С.Н.
Потрогал лапой паяльник
Сообщения: 307
Зарегистрирован: Пн окт 26, 2020 08:37:51
Откуда: г.Волгоград

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

Сообщение С.Н. »

День добрый всем.
Компилятор 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 этих моментов. Может кто сталкивался.
ФУОЗ на платформе Ардуино: https://radiokot.ru/forum/viewtopic.php ... 6#p4366626
ВК - "ФУОЗ на микроконтроллере Atmega328P (МПСЗ)"
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15581
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

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

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

Сообщение 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-битная дробь
С.Н.
Потрогал лапой паяльник
Сообщения: 307
Зарегистрирован: Пн окт 26, 2020 08:37:51
Откуда: г.Волгоград

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

Сообщение С.Н. »

Спасибо за содержательный ответ.
[uquote="BOB51",url="/forum/viewtopic.php?p=4013722#p4013722"][/uquote]
Я Вас не спрашивал про арифметику вещественных чисел. Вопрос был именно по avrasm2, а не к набору инструкций.
С set ничего не получалось. А по первому есть что сказать?

Архитектурой и ассемблером avr владею на серьезном уровне. Английским техническим тоже.
ФУОЗ на платформе Ардуино: https://radiokot.ru/forum/viewtopic.php ... 6#p4366626
ВК - "ФУОЗ на микроконтроллере Atmega328P (МПСЗ)"
Аватара пользователя
Starichok51
Модератор
Сообщения: 19054
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

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

Сообщение Starichok51 »

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

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

Сообщение oleg110592 »

[uquote="С.Н.",url="/forum/viewtopic.php?p=4013743#p4013743"]А по первому есть что сказать?
Архитектурой и ассемблером avr владею на серьезном уровне. Английским техническим тоже.[/uquote]
ну в документации на английском ничего нет про флоат константы (там в формуле есть 7.9207),
есть Integer Constants и Strings и Character Constants. Может пропустил.
С.Н.
Потрогал лапой паяльник
Сообщения: 307
Зарегистрирован: Пн окт 26, 2020 08:37:51
Откуда: г.Волгоград

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

Сообщение С.Н. »

[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]

Да я тоже не нашел и мало того переперобывал разные комбинации... Видать придется мириться с этим.
ФУОЗ на платформе Ардуино: https://radiokot.ru/forum/viewtopic.php ... 6#p4366626
ВК - "ФУОЗ на микроконтроллере Atmega328P (МПСЗ)"
Ответить

Вернуться в «AVR»