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

Обсуждаем контроллеры компании Atmel.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 20135
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Тогда учитесь на чистом АСМе. К чему эти СИшные вставки?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15816
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Хорошая идея... только чуток посложнее...
8)
Реклама
Вымогатель припоя
Сообщения: 615
Зарегистрирован: Вс дек 28, 2014 21:54:05

Сообщение dgrett »

Здравствуйте, я где-то видел (а теперь не нахожу) пример масштабирования диапазонов. Например, есть некая величина, изменяющаяся от 0А до 8С. Как её растянуть до диапазона байта? Какова там математика? Может кто-нибудь тоже встречал? Подскажите, пж, где искать.
Я всё-всё узнAю и стану профессором.
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="dgrett",url="/forum/viewtopic.php?p=4010207#p4010207"]Например, есть некая величина, изменяющаяся от 0А до 8С. Как её растянуть до диапазона байта? Какова там математика?[/uquote]
Очевидно же, что нужно умножать на 256 / 0x8C = ~1.83. Если под дробную часть выделить 7 бит, т.е. 128 будет равно 1, то 1.83 превращается в 1.83 * 128 = 234, что удобно, т.к. есть аппаратное умножение 8x8:
(234 * 0x0A) >> 7 = 18
(234 * 0x8C) >> 7 = 255
Реклама
Эиком - электронные компоненты и радиодетали
Вымогатель припоя
Сообщения: 615
Зарегистрирован: Вс дек 28, 2014 21:54:05

Сообщение dgrett »

Понял, спасибо.
О, немного не так. 0А должно было стать нулём. Запутался.
Я всё-всё узнAю и стану профессором.
Реклама
akl
Друг Кота
Сообщения: 4475
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Как вариант
X=[(CODE-10)*502+128]/256
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18828
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

между 8C и 0A лежит 130 чисел. если диапазон 0-255 приводить к этому количеству, то коэффициент будет не 1,8 а 1,97, т.е. почти 2.
следовательно, из кода надо отнять 10 и результат умножить на 2 - примерно то и выйдет, что надо.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

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

Сообщение dgrett »

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

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

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

Сообщение parovoZZ »

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

Сообщение dgrett »

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

Сообщение BOB51 »

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

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

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

Сообщение akl »

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

Сообщение dgrett »

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

Сообщение BOB51 »

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

Сообщение Reflector »

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

Сообщение Demiurg »

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

Сообщение dgrett »

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

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