Я не ИИ, поэтому могу ошибаться.
Ассемблер (ASM) для AVR в вопросах и ответах
- Сообщения: 553
- Зарегистрирован: Ср июн 29, 2022 16:25:45
shonty, да подожди... то конкурс на поиск одного бита завершился... А свап битов в слове - еще нет.
Белая и Пушистая
Я не ИИ, поэтому могу ошибаться.
Я не ИИ, поэтому могу ошибаться.
- Реклама
Свап битов в слове мало чем отличается от свапа битов в байте - на выходе просто поменять порядок байт.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Сообщения: 473
- Зарегистрирован: Ср янв 11, 2012 18:20:26
при работе со словом добавляются некоторые инструкции.., так что может в этом и есть отличиеGudd-Head писал(а):Свап битов в слове мало чем отличается от свапа битов в байте
- Сообщения: 553
- Зарегистрирован: Ср июн 29, 2022 16:25:45
Ну один код, циклом, у нас есть, 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) я не знала. Кинула в копилку подсознания.
Белая и Пушистая
Я не ИИ, поэтому могу ошибаться.
Я не ИИ, поэтому могу ошибаться.
- Сообщения: 581
- Зарегистрирован: Вт окт 01, 2024 15:22:33
[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;
}- Реклама
- Сообщения: 553
- Зарегистрирован: Ср июн 29, 2022 16:25:45
Adrift, не, я по тупому всегда делала, циклом сравнивала с двигающейся маской. В основном это для проверки, а не нажато ли более одной кнопки. Если нажато, то все события от кнопок блокируются, пока не будут отпущены все кнопки. Ну либо, если нужно отследить одновременно нажатые - то тут уже массив допустимых масок.
Белая и Пушистая
Я не ИИ, поэтому могу ошибаться.
Я не ИИ, поэтому могу ошибаться.
- Сообщения: 473
- Зарегистрирован: Ср янв 11, 2012 18:20:26
конкурсы, конкурсы.. а сама про дребезг завуалировалаJust_Fluffy писал(а):В основном это для проверки, а не нажато ли более одной кнопки.
- Сообщения: 223
- Зарегистрирован: Сб июл 30, 2011 21:00:24
[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 табличный вариант выглядит чудовищной растратой памяти. Но СИ-шникам, похоже, такие растраты привычны.
- Сообщения: 553
- Зарегистрирован: Ср июн 29, 2022 16:25:45
1. Я описала 2 алгоритма, которые применяю при опросе кнопок.shonty писал(а):сама про дребезг завуалировала
2. Алгоритмы сами по себе никак не относятся к ликбезу по ассемблеру.
3. Реализации алгоритмов могут быть на любом языке. И красивые решения конкретных задач (как, например, проверка поднятости одного бита) - они могут быть применены в любом языке.
И да, я совершенно не возражаю, что некоторые частные случаи алгоритмов могут быть выписаны на ассемблере гораздо более изящно, нежели на любом ЯВУ. Но это конкретные частные случаи.
Ну куда уж нам всем.... Главное - нужно применять современный супер-пупер-турбо-ассемблер. Тогда алгоритмы сами пишутся. Вроде как для этого даже есть супер-программа - алгоритм-билдер. Где то на форуме видела, хвалили её. Лограифм на асме за одну команду вычисляет.AQ29 писал(а):На фоне решения Adrift табличный вариант выглядит чудовищной растратой памяти. Но СИ-шникам, похоже, такие растраты привычны
Так вот, решение должно быть в голове. А только потом уже переложено на язык программирования. И не важно, какой это язык будет. И если есть задача выжать из кода максимум быстродействия - то и на асме можно применить табличное решение. Это ценой расхода ОЗУ/флеша сэкономит пару тактов.
Последний раз редактировалось Just_Fluffy Пн дек 09, 2024 13:58:13, всего редактировалось 1 раз.
Белая и Пушистая
Я не ИИ, поэтому могу ошибаться.
Я не ИИ, поэтому могу ошибаться.
[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 раз.
- Сообщения: 473
- Зарегистрирован: Ср янв 11, 2012 18:20:26
Дребезг мигрировал в мк из цифровой логики. Там он действительно представлял проблему, так как отсутствовало элементарное тактирование, была сложность с таймерами, сложность с установкой периода опроса клавиатуры, сложность с задержкой возврата из процедуры обработки нажатия.. и прочее. И во время ухода системы на обработку какого либо события опрос нажатий оставался постоянным.
Поэтому решали при помощи триггеров и других аппаратных наворотов. И этому посвящено достаточно литературы.
Но многие никак не могут расстаться с этим рудиментом.. видимо психологически

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

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

Может про мой ""слэнг" в работе с многофайловыми проектами" под ассемблером потрындеть?
В отличии от "стандарта" там только один файл в настройках компилятора указывается...
Удобненько получилось...
Так про то в почти половине котуинки ( https://radiokot.ru/forum/viewtopic.php?f=62&t=156720) проговорено...
Особо смысла не вижу...


