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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

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

Сообщение Just_Fluffy »

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

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

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

Свап битов в слове мало чем отличается от свапа битов в байте - на выходе просто поменять порядок байт.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

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

Сообщение shonty »

Gudd-Head писал(а):Свап битов в слове мало чем отличается от свапа битов в байте
при работе со словом добавляются некоторые инструкции.., так что может в этом и есть отличие :dont_know:
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

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

Сообщение Just_Fluffy »

Ну один код, циклом, у нас есть, 7 слов.
Gudd-Head, вы так и не показали свой код с XORами.

Добавлено after 1 minute 11 seconds:
Кстати, проверку на единичный бит N and (N-1) я не знала. Кинула в копилку подсознания.
Белая и Пушистая
Реклама
Эиком - электронные компоненты и радиодетали
Adrift
Вымогатель припоя
Сообщения: 540
Зарегистрирован: Вт окт 01, 2024 15:22:33

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

Сообщение Adrift »

[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4658438#p4658438"]Кстати, проверку на единичный бит N and (N-1) я не знала. Кинула в копилку подсознания.[/uquote]
Есть такая функция подсчета единичных битов, когда-то она у меня была, сейчас использую std::has_single_bit().

Код: Выделить всё

uint32_t countSetBits(uint32_t val)
{
	uint32_t cnt = 0;

	while (val)
	{
		val &= val - 1;
		cnt++;
	}
	return cnt;
}
Реклама
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

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

Сообщение Just_Fluffy »

Adrift, не, я по тупому всегда делала, циклом сравнивала с двигающейся маской. В основном это для проверки, а не нажато ли более одной кнопки. Если нажато, то все события от кнопок блокируются, пока не будут отпущены все кнопки. Ну либо, если нужно отследить одновременно нажатые - то тут уже массив допустимых масок.
Белая и Пушистая
Реклама
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

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

Сообщение shonty »

Just_Fluffy писал(а):В основном это для проверки, а не нажато ли более одной кнопки.
конкурсы, конкурсы.. а сама про дребезг завуалировала :)))
AQ29
Прорезались зубы
Сообщения: 201
Зарегистрирован: Сб июл 30, 2011 21:00:24

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

Сообщение AQ29 »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4658000#p4658000"]А кнопка может дребезжать без нажатия на нее?
Какой смысл ждать бездребезгового состояния на интервале опроса большем, чем время дребезга?
Попадание на дребезг ничем не грозит. Просто читаете состояние.[/uquote]
Кнопки анализирую не по прерыванию, а делаю опрос на каждом витке программы.
Считывание кнопок во время дребезга надо исключать, это мусор. Какой отсчёт мусорный – неизвестно, а для дальнейшей обработки нужен правильный отсчёт. Для решения этой проблемы и применяю предложенный алгоритм.
Использовал три отсчёта с интервалом больше дребезга. При нажатии одной или двух кнопок один или два отсчёта могут быть мусором, но третье будет правильным. Соответственно, три одинаковых отсчёта всегда будут верными.
Придумал этот метод, когда был совсем начинающим. Наверно, нажатие на кнопку - вторая задача начинающих. Первая – помигать светодиодами.
Программа получилась очень простая, написать её намного проще, чем найти оптимальное решение на вторую задачу Just_Fluffy.

Про дребезг без нажатия кнопки не понял. Если это помеха, то здесь есть защита от неё.

[uquote="главный колбасист",url="/forum/viewtopic.php?p=4657965#p4657965"]А можно сделать программный симулятор дребезжащей кнопки,и сравнивать с ним,а не с предыдущими двумя считываниями ?[/uquote]
Для чего нужен программный симулятор – непонятно.
За всё время я не помню ни одной неправильной реакции на кнопку, что там проверять.
Симулятор при работе с внешними устройствами никогда не использовал, была уже такая полемика.

На фоне решения Adrift табличный вариант выглядит чудовищной растратой памяти. Но СИ-шникам, похоже, такие растраты привычны.
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

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

Сообщение Just_Fluffy »

shonty писал(а):сама про дребезг завуалировала
1. Я описала 2 алгоритма, которые применяю при опросе кнопок.
2. Алгоритмы сами по себе никак не относятся к ликбезу по ассемблеру.
3. Реализации алгоритмов могут быть на любом языке. И красивые решения конкретных задач (как, например, проверка поднятости одного бита) - они могут быть применены в любом языке.
И да, я совершенно не возражаю, что некоторые частные случаи алгоритмов могут быть выписаны на ассемблере гораздо более изящно, нежели на любом ЯВУ. Но это конкретные частные случаи.
AQ29 писал(а):На фоне решения Adrift табличный вариант выглядит чудовищной растратой памяти. Но СИ-шникам, похоже, такие растраты привычны
Ну куда уж нам всем.... Главное - нужно применять современный супер-пупер-турбо-ассемблер. Тогда алгоритмы сами пишутся. Вроде как для этого даже есть супер-программа - алгоритм-билдер. Где то на форуме видела, хвалили её. Лограифм на асме за одну команду вычисляет.

Так вот, решение должно быть в голове. А только потом уже переложено на язык программирования. И не важно, какой это язык будет. И если есть задача выжать из кода максимум быстродействия - то и на асме можно применить табличное решение. Это ценой расхода ОЗУ/флеша сэкономит пару тактов.
Последний раз редактировалось Just_Fluffy Пн дек 09, 2024 13:58:13, всего редактировалось 1 раз.
Белая и Пушистая
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25219
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

[uquote="AQ29",url="/forum/viewtopic.php?p=4658489#p4658489"]Кнопки анализирую не по прерыванию, а делаю опрос на каждом витке программы.
Считывание кнопок во время дребезга надо исключать, это мусор. Какой отсчёт мусорный – неизвестно, а для дальнейшей обработки нужен правильный отсчёт. Для решения этой проблемы и применяю предложенный алгоритм.....
Про дребезг без нажатия кнопки не понял. Если это помеха, то здесь есть защита от неё.[/uquote]
1. Нарисуйте эпюру с нажатием и отпусканием кнопки с дребезгом и наложите на нее опрос с интервалом больше дребезга.
И вы внезапно обнаружите, что захват нажимаемой кнопки во время дребезга НИЧЕМ НЕ ГРОЗИТ.
Предположим вы ПРИ НАЖАТИИ на кнопку с какой то там вероятностью захватили во время дребезга состояние "нажато". Значит нажатие произойдет именно в этот момент. Следующий опрос гарантированно произойдет по завершении дребезга.
Предположим вы ПРИ НАЖАТИИ на кнопку с какой то там вероятностью попадете в состояние "НЕ нажато". Значит нажатие на кнопку произойдет В СЛЕДУЮЩЕМ ОПРОСЕ уже без дребезга.
Все тоже самое произойдет при отпускании кнопки.
2. Помех на кнопке кроме дребезга быть не может по определению. Там смещение чистым питанием через резистор порядка 1...10 кОм.
Метод, которым вы создаете интервал опроса значения не имеет. Но интервал создаваемый таймером выглядит куртуазнее. И не нужно обрабатывать захват в прерывании от таймера. Достаточно просто захватить порт и выставить флаг требования обработки. Хотя и в прерывании по таймеру обработка тоже не сильно тяготит.
Последний раз редактировалось КРАМ Пн дек 09, 2024 14:03:28, всего редактировалось 1 раз.
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

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

Сообщение shonty »

Дребезг мигрировал в мк из цифровой логики. Там он действительно представлял проблему, так как отсутствовало элементарное тактирование, была сложность с таймерами, сложность с установкой периода опроса клавиатуры, сложность с задержкой возврата из процедуры обработки нажатия.. и прочее. И во время ухода системы на обработку какого либо события опрос нажатий оставался постоянным.

Поэтому решали при помощи триггеров и других аппаратных наворотов. И этому посвящено достаточно литературы.

Но многие никак не могут расстаться с этим рудиментом.. видимо психологически :dont_know: :)
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25219
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

[uquote="AQ29",url="/forum/viewtopic.php?p=4658489#p4658489"]табличный вариант выглядит чудовищной растратой памяти.[/uquote]
Все зависит от потребного объема флеша для кода и имеющегося в чипе флеша.
Не припомню в своей практике ни одного случая, когда были проблемы с размером флеша.
Это самый дешевый ресурс в МК.
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

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

Сообщение shonty »

КРАМ писал(а):1. Нарисуйте эпюру с нажатием и отпусканием кнопки с дребезгом и наложите на нее опрос с интервалом больше дребезга.
И вы внезапно обнаружите, что захват нажимаемой кнопки во время дребезга НИЧЕМ НЕ ГРОЗИТ.
Кстати, рисовал уже и выкладывал.. примерную ))
Изображение

Добавлено after 1 minute 13 seconds:
но я под себя рисовал, у меня задержки перед возвратом
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

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

Сообщение Just_Fluffy »

shonty, Дребезг - это физическое явление. И от него никуда не деться.
Просто в МК варианты его нивелирования гораздо более широкие. И 2-3 опроса с интервалом больше дребезга - это тоже АЛГОРИТМ. С кучей реализаций - на обычных счетчиках, на вертикальных, на массивах, на задержках и повторных опросах....
Вот когда будут идеальные кнопки - тогда это будет рудиментом.

И, кстати, мы с вами уже проговорили - в вашем случае могут быть ложные срабатывания от коротких случайных нажатий на кнопку (но это частный случай, опять же... "Кто бросил сапог на пульт управления ядерной ракетой?!")
КРАМ писал(а):Не припомню в своей практике ни одного случая, когда были проблемы с размером флеша.
Это самый дешевый ресурс в МК.
Забейте. Когда мир сошелся клином на тине13 или меге8 с современным ассемблером - то да. А когда копеешный арм с мегабайтом флеша - то тут уже и ассемблер как то не в кассу, да и табличку можно разместить, не переживая за оставшееся место.
Белая и Пушистая
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

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

Сообщение shonty »

Just_Fluffy, я кажется догадываюсь, зачем вам алгоритмы с наименьшим объёмом памяти))
Основная же память на обработку дребезга уходит :)

(это шутка :beer: )

Добавлено after 15 minutes 33 seconds:
Just_Fluffy писал(а):И 2-3 опроса с интервалом больше дребезга - это тоже АЛГОРИТМ.
Нет)) это не алгоритм - это концепция)
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25219
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4658510#p4658510"]Когда мир сошелся клином на тине13[/uquote]
Это не имеет значения. Даже для шестиногих PIC10 с совсем небольшим флешем. Просто там другие задачи и другой размер таблиц.

Добавлено after 3 minutes 56 seconds:
[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4658510#p4658510"]Вот когда будут идеальные кнопки[/uquote]
Идеальные кнопки есть и сейчас. Это кнопки с перебросом.
Но на самом деле для просто кнопок нажимаемых пальцем не нужно никаких сложных алгоритмов.
Алгоритмы с фильтрацией нужны для механических энкодеров с малым временем дребезга и потребностью не пропускать импульсы на максимально возможной скорости. Тогда можно разменять задержку получения информации на высокую скорость вращения без пропусков.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

Три страницы явно для темы про оригинальные алгоритмы, а не про ассемблер. Ну и часть сообщений надо в особую писькомерную тему модераторам выделить...

Кстати, про реверс битов: я такой вопрос-конкурс сто лет назад здесь проводил... Ничто не ново в подлунном мире...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

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

Сообщение shonty »

Так то можно на каждое слово тему создать.. но они мёртвые будут :dont_know:
Да и эта умрёт. Были же перерывы, когда тут никто не писал более чем по полгода.
Сейчас уже не та активность у людей :dont_know:
Всё переговорили вдоль и поперёк.

Не думаю, что обсуждение дребезга или "конкурсы" особо мешают кому то решать сложные задачи..

Но это моё мнение..
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15556
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Тогда уж..
Может про мой ""слэнг" в работе с многофайловыми проектами" под ассемблером потрындеть?
В отличии от "стандарта" там только один файл в настройках компилятора указывается...
Удобненько получилось...
:roll:
Так про то в почти половине котуинки ( https://radiokot.ru/forum/viewtopic.php?f=62&t=156720) проговорено...
Особо смысла не вижу...
:sleep:
Аватара пользователя
ДядяВован
Мучитель микросхем
Сообщения: 493
Зарегистрирован: Вс окт 25, 2020 22:13:25
Откуда: Смоленск

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

Сообщение ДядяВован »

Почему бы и нет...
Ответить

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