Ассемблер (ASM) для AVR в вопросах и ответах
- Just_Fluffy
- Вымогатель припоя
- Сообщения: 532
- Зарегистрирован: Ср июн 29, 2022 16:25:45
Re: Ассемблер (ASM) для AVR в вопросах и ответах
shonty, да подожди... то конкурс на поиск одного бита завершился... А свап битов в слове - еще нет.
Белая и Пушистая
- Реклама
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Свап битов в слове мало чем отличается от свапа битов в байте - на выходе просто поменять порядок байт.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Ассемблер (ASM) для AVR в вопросах и ответах
при работе со словом добавляются некоторые инструкции.., так что может в этом и есть отличиеGudd-Head писал(а):Свап битов в слове мало чем отличается от свапа битов в байте
- Just_Fluffy
- Вымогатель припоя
- Сообщения: 532
- Зарегистрирован: Ср июн 29, 2022 16:25:45
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Ну один код, циклом, у нас есть, 7 слов.
Gudd-Head, вы так и не показали свой код с XORами.
Добавлено after 1 minute 11 seconds:
Кстати, проверку на единичный бит N and (N-1) я не знала. Кинула в копилку подсознания.
Gudd-Head, вы так и не показали свой код с XORами.
Добавлено after 1 minute 11 seconds:
Кстати, проверку на единичный бит N and (N-1) я не знала. Кинула в копилку подсознания.
Белая и Пушистая
Re: Ассемблер (ASM) для AVR в вопросах и ответах
[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4658438#p4658438"]Кстати, проверку на единичный бит N and (N-1) я не знала. Кинула в копилку подсознания.[/uquote]
Есть такая функция подсчета единичных битов, когда-то она у меня была, сейчас использую std::has_single_bit().
Есть такая функция подсчета единичных битов, когда-то она у меня была, сейчас использую 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 в вопросах и ответах
Adrift, не, я по тупому всегда делала, циклом сравнивала с двигающейся маской. В основном это для проверки, а не нажато ли более одной кнопки. Если нажато, то все события от кнопок блокируются, пока не будут отпущены все кнопки. Ну либо, если нужно отследить одновременно нажатые - то тут уже массив допустимых масок.
Белая и Пушистая
Re: Ассемблер (ASM) для AVR в вопросах и ответах
конкурсы, конкурсы.. а сама про дребезг завуалировалаJust_Fluffy писал(а):В основном это для проверки, а не нажато ли более одной кнопки.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
[uquote="КРАМ",url="/forum/viewtopic.php?p=4658000#p4658000"]А кнопка может дребезжать без нажатия на нее?
Какой смысл ждать бездребезгового состояния на интервале опроса большем, чем время дребезга?
Попадание на дребезг ничем не грозит. Просто читаете состояние.[/uquote]
Кнопки анализирую не по прерыванию, а делаю опрос на каждом витке программы.
Считывание кнопок во время дребезга надо исключать, это мусор. Какой отсчёт мусорный – неизвестно, а для дальнейшей обработки нужен правильный отсчёт. Для решения этой проблемы и применяю предложенный алгоритм.
Использовал три отсчёта с интервалом больше дребезга. При нажатии одной или двух кнопок один или два отсчёта могут быть мусором, но третье будет правильным. Соответственно, три одинаковых отсчёта всегда будут верными.
Придумал этот метод, когда был совсем начинающим. Наверно, нажатие на кнопку - вторая задача начинающих. Первая – помигать светодиодами.
Программа получилась очень простая, написать её намного проще, чем найти оптимальное решение на вторую задачу Just_Fluffy.
Про дребезг без нажатия кнопки не понял. Если это помеха, то здесь есть защита от неё.
[uquote="главный колбасист",url="/forum/viewtopic.php?p=4657965#p4657965"]А можно сделать программный симулятор дребезжащей кнопки,и сравнивать с ним,а не с предыдущими двумя считываниями ?[/uquote]
Для чего нужен программный симулятор – непонятно.
За всё время я не помню ни одной неправильной реакции на кнопку, что там проверять.
Симулятор при работе с внешними устройствами никогда не использовал, была уже такая полемика.
На фоне решения Adrift табличный вариант выглядит чудовищной растратой памяти. Но СИ-шникам, похоже, такие растраты привычны.
Какой смысл ждать бездребезгового состояния на интервале опроса большем, чем время дребезга?
Попадание на дребезг ничем не грозит. Просто читаете состояние.[/uquote]
Кнопки анализирую не по прерыванию, а делаю опрос на каждом витке программы.
Считывание кнопок во время дребезга надо исключать, это мусор. Какой отсчёт мусорный – неизвестно, а для дальнейшей обработки нужен правильный отсчёт. Для решения этой проблемы и применяю предложенный алгоритм.
Использовал три отсчёта с интервалом больше дребезга. При нажатии одной или двух кнопок один или два отсчёта могут быть мусором, но третье будет правильным. Соответственно, три одинаковых отсчёта всегда будут верными.
Придумал этот метод, когда был совсем начинающим. Наверно, нажатие на кнопку - вторая задача начинающих. Первая – помигать светодиодами.
Программа получилась очень простая, написать её намного проще, чем найти оптимальное решение на вторую задачу Just_Fluffy.
Про дребезг без нажатия кнопки не понял. Если это помеха, то здесь есть защита от неё.
[uquote="главный колбасист",url="/forum/viewtopic.php?p=4657965#p4657965"]А можно сделать программный симулятор дребезжащей кнопки,и сравнивать с ним,а не с предыдущими двумя считываниями ?[/uquote]
Для чего нужен программный симулятор – непонятно.
За всё время я не помню ни одной неправильной реакции на кнопку, что там проверять.
Симулятор при работе с внешними устройствами никогда не использовал, была уже такая полемика.
На фоне решения Adrift табличный вариант выглядит чудовищной растратой памяти. Но СИ-шникам, похоже, такие растраты привычны.
- Just_Fluffy
- Вымогатель припоя
- Сообщения: 532
- Зарегистрирован: Ср июн 29, 2022 16:25:45
Re: Ассемблер (ASM) для AVR в вопросах и ответах
1. Я описала 2 алгоритма, которые применяю при опросе кнопок.shonty писал(а):сама про дребезг завуалировала
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 кОм.
Метод, которым вы создаете интервал опроса значения не имеет. Но интервал создаваемый таймером выглядит куртуазнее. И не нужно обрабатывать захват в прерывании от таймера. Достаточно просто захватить порт и выставить флаг требования обработки. Хотя и в прерывании по таймеру обработка тоже не сильно тяготит.
Считывание кнопок во время дребезга надо исключать, это мусор. Какой отсчёт мусорный – неизвестно, а для дальнейшей обработки нужен правильный отсчёт. Для решения этой проблемы и применяю предложенный алгоритм.....
Про дребезг без нажатия кнопки не понял. Если это помеха, то здесь есть защита от неё.[/uquote]
1. Нарисуйте эпюру с нажатием и отпусканием кнопки с дребезгом и наложите на нее опрос с интервалом больше дребезга.
И вы внезапно обнаружите, что захват нажимаемой кнопки во время дребезга НИЧЕМ НЕ ГРОЗИТ.
Предположим вы ПРИ НАЖАТИИ на кнопку с какой то там вероятностью захватили во время дребезга состояние "нажато". Значит нажатие произойдет именно в этот момент. Следующий опрос гарантированно произойдет по завершении дребезга.
Предположим вы ПРИ НАЖАТИИ на кнопку с какой то там вероятностью попадете в состояние "НЕ нажато". Значит нажатие на кнопку произойдет В СЛЕДУЮЩЕМ ОПРОСЕ уже без дребезга.
Все тоже самое произойдет при отпускании кнопки.
2. Помех на кнопке кроме дребезга быть не может по определению. Там смещение чистым питанием через резистор порядка 1...10 кОм.
Метод, которым вы создаете интервал опроса значения не имеет. Но интервал создаваемый таймером выглядит куртуазнее. И не нужно обрабатывать захват в прерывании от таймера. Достаточно просто захватить порт и выставить флаг требования обработки. Хотя и в прерывании по таймеру обработка тоже не сильно тяготит.
Последний раз редактировалось КРАМ Пн дек 09, 2024 14:03:28, всего редактировалось 1 раз.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Дребезг мигрировал в мк из цифровой логики. Там он действительно представлял проблему, так как отсутствовало элементарное тактирование, была сложность с таймерами, сложность с установкой периода опроса клавиатуры, сложность с задержкой возврата из процедуры обработки нажатия.. и прочее. И во время ухода системы на обработку какого либо события опрос нажатий оставался постоянным.
Поэтому решали при помощи триггеров и других аппаратных наворотов. И этому посвящено достаточно литературы.
Но многие никак не могут расстаться с этим рудиментом.. видимо психологически

Поэтому решали при помощи триггеров и других аппаратных наворотов. И этому посвящено достаточно литературы.
Но многие никак не могут расстаться с этим рудиментом.. видимо психологически
- КРАМ
- Друг Кота
- Сообщения: 25219
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Ассемблер (ASM) для AVR в вопросах и ответах
[uquote="AQ29",url="/forum/viewtopic.php?p=4658489#p4658489"]табличный вариант выглядит чудовищной растратой памяти.[/uquote]
Все зависит от потребного объема флеша для кода и имеющегося в чипе флеша.
Не припомню в своей практике ни одного случая, когда были проблемы с размером флеша.
Это самый дешевый ресурс в МК.
Все зависит от потребного объема флеша для кода и имеющегося в чипе флеша.
Не припомню в своей практике ни одного случая, когда были проблемы с размером флеша.
Это самый дешевый ресурс в МК.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Кстати, рисовал уже и выкладывал.. примерную ))КРАМ писал(а):1. Нарисуйте эпюру с нажатием и отпусканием кнопки с дребезгом и наложите на нее опрос с интервалом больше дребезга.
И вы внезапно обнаружите, что захват нажимаемой кнопки во время дребезга НИЧЕМ НЕ ГРОЗИТ.
Добавлено after 1 minute 13 seconds:
но я под себя рисовал, у меня задержки перед возвратом
- Just_Fluffy
- Вымогатель припоя
- Сообщения: 532
- Зарегистрирован: Ср июн 29, 2022 16:25:45
Re: Ассемблер (ASM) для AVR в вопросах и ответах
shonty, Дребезг - это физическое явление. И от него никуда не деться.
Просто в МК варианты его нивелирования гораздо более широкие. И 2-3 опроса с интервалом больше дребезга - это тоже АЛГОРИТМ. С кучей реализаций - на обычных счетчиках, на вертикальных, на массивах, на задержках и повторных опросах....
Вот когда будут идеальные кнопки - тогда это будет рудиментом.
И, кстати, мы с вами уже проговорили - в вашем случае могут быть ложные срабатывания от коротких случайных нажатий на кнопку (но это частный случай, опять же... "Кто бросил сапог на пульт управления ядерной ракетой?!")
Просто в МК варианты его нивелирования гораздо более широкие. И 2-3 опроса с интервалом больше дребезга - это тоже АЛГОРИТМ. С кучей реализаций - на обычных счетчиках, на вертикальных, на массивах, на задержках и повторных опросах....
Вот когда будут идеальные кнопки - тогда это будет рудиментом.
И, кстати, мы с вами уже проговорили - в вашем случае могут быть ложные срабатывания от коротких случайных нажатий на кнопку (но это частный случай, опять же... "Кто бросил сапог на пульт управления ядерной ракетой?!")
Забейте. Когда мир сошелся клином на тине13 или меге8 с современным ассемблером - то да. А когда копеешный арм с мегабайтом флеша - то тут уже и ассемблер как то не в кассу, да и табличку можно разместить, не переживая за оставшееся место.КРАМ писал(а):Не припомню в своей практике ни одного случая, когда были проблемы с размером флеша.
Это самый дешевый ресурс в МК.
Белая и Пушистая
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Just_Fluffy, я кажется догадываюсь, зачем вам алгоритмы с наименьшим объёмом памяти))
Основная же память на обработку дребезга уходит
(это шутка
)
Добавлено after 15 minutes 33 seconds:
Основная же память на обработку дребезга уходит
(это шутка
Добавлено 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]
Идеальные кнопки есть и сейчас. Это кнопки с перебросом.
Но на самом деле для просто кнопок нажимаемых пальцем не нужно никаких сложных алгоритмов.
Алгоритмы с фильтрацией нужны для механических энкодеров с малым временем дребезга и потребностью не пропускать импульсы на максимально возможной скорости. Тогда можно разменять задержку получения информации на высокую скорость вращения без пропусков.
Это не имеет значения. Даже для шестиногих 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 в вопросах и ответах
Три страницы явно для темы про оригинальные алгоритмы, а не про ассемблер. Ну и часть сообщений надо в особую писькомерную тему модераторам выделить...
Кстати, про реверс битов: я такой вопрос-конкурс сто лет назад здесь проводил... Ничто не ново в подлунном мире...
Кстати, про реверс битов: я такой вопрос-конкурс сто лет назад здесь проводил... Ничто не ново в подлунном мире...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Так то можно на каждое слово тему создать.. но они мёртвые будут
Да и эта умрёт. Были же перерывы, когда тут никто не писал более чем по полгода.
Сейчас уже не та активность у людей
Всё переговорили вдоль и поперёк.
Не думаю, что обсуждение дребезга или "конкурсы" особо мешают кому то решать сложные задачи..
Но это моё мнение..
Да и эта умрёт. Были же перерывы, когда тут никто не писал более чем по полгода.
Сейчас уже не та активность у людей
Всё переговорили вдоль и поперёк.
Не думаю, что обсуждение дребезга или "конкурсы" особо мешают кому то решать сложные задачи..
Но это моё мнение..
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Тогда уж..
Может про мой ""слэнг" в работе с многофайловыми проектами" под ассемблером потрындеть?
В отличии от "стандарта" там только один файл в настройках компилятора указывается...
Удобненько получилось...

Так про то в почти половине котуинки ( https://radiokot.ru/forum/viewtopic.php?f=62&t=156720) проговорено...
Особо смысла не вижу...

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


