код для КНОПОК - помогите разобраться

Тема в разделе "Микроконтроллеры AVR", создана пользователем Alexandro77, 26 сен 2019.

Метки:
  1. offigate

    offigate Нерд

    Но ведь "проскакивание" - это не заваливание, это несколько иная проблема, чем залипание на 50 дней. Проскакивание было очевидно после #33. А последние две страницы, начиная с #44, обсуждается как раз таки залипание. Так что не в кассу.

    Так залипнет когда-нибудь этот конкретный код или нет?

    Объяснили, что "надо ходить по камушкам, а если не будешь ходить по камушкам, то чего будет - не знаем". Я это понял.
     
  2. akl

    akl Гуру

    возможно, вот этот вот конкретный без всяких лишних задержек, сможет залипнуть если настроить атмегу на меньшую частоту и из-за этого миллис будет выдавать значения с шагом больше 1мс. но это не точно
     
    Andrey12 нравится это.
  3. SergeiL

    SergeiL Оракул Модератор

    Да чего тут говорить?
    А вдруг все будет удачно...
    Отписался.
     
  4. b707

    b707 Гуру

    Asper Daffy, тут кроме двух 8-битных счетчиков надо вывести в консоль реальный 32-бит миллис - иначе наш новичок не отличит "проскакивание" от "залипания"
     
    Andrey12 нравится это.
  5. akl

    akl Гуру

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


    охренеть я стал гурой [​IMG]
    вот что миллис животворящий делает
     
    Andrey12 и Daniil нравится это.
  6. offigate

    offigate Нерд

    Я-то как раз отличил.

    Упрощаю задачу. Бог с ними, с доказательствами. Здесь хоть кто-нибудь обладает достаточной эрудицией, чтобы хотя бы предположить, почему этот конкретный код может залипнуть? Описать возможный механизм залипания, кроме честного подкручивания клока? :cool:
     
  7. SergeiL

    SergeiL Оракул Модератор

    В свое время задался вопросом обработки кнопок и дребезга.
    Кнопки, входы - без разницы.
    Нашел, по моему мнению, лучший алгоритм. Его и использую везде. Сбоев не было.
    Написал здесь
     
    Andrey12 нравится это.
  8. b707

    b707 Гуру

    Слушайте, вы реально такой тупой или все-таки прикидываетесь?
    В сообщении #49 все четко по полочкам - что еще надо?
     
    Andrey12 нравится это.
  9. DetSimen

    DetSimen Guest

    Думаю, это тролль, типа знаменА.
     
    Andrey12 и Daniil нравится это.
  10. offigate

    offigate Нерд

    Только не надо тут "сказок про белого бычка". Я же сказал, что на #49 ответил в #50 и #52, "четко по полочкам". И в #56 добавил. Что вам там непонятно, с чем вы несогласны?
     
    Последнее редактирование: 20 ноя 2019
  11. akl

    akl Гуру

    не, в сообщении 49 неполное объяснение. потому что если цикл проходит быстрее чем за 1мс, то вроде не должно подвисать. Но если рассматривать более общий случай, и например уменьшать период с 10мс до например 1-2 или наоборот замедлять цикл, то тут уже не очень понятно что может происходить в эти хаотичные моменты
     
    Andrey12 нравится это.
  12. b707

    b707 Гуру

    на ваши #50 и #52 уже ответил в #70
     
    Andrey12 нравится это.
  13. Asper Daffy

    Asper Daffy Иксперд

    Я выводил 32-битные счётчики.

    И мой пример призван показать тот факт, что в коде ТС нельзя использовать + - интервалы сбиваются.

    Вы же видели, что "в районе переполнения" интервалы становяться 1, а не 10.

    Про залипание я не в курсе, т.к. не понимаю что это такое. Может где-то в теме и есть пояснение этого термина, но перечитывать пять страниц, состоящих на 80% из глупостей - не до сук. Если ТС задаст внятный вопрос, могу подумать.
     
    Andrey12 нравится это.
  14. Asper Daffy

    Asper Daffy Иксперд

    Ну, извини, я там видел, как ты доказывал, что "+" тоже можно использовать, вот про него тебе и показал - ни хрена нельзя и впредь не спорь об этом. А что такое "залипание" я не знаю. Объяснишь толком - постараюсь ответить.
     
    Andrey12 нравится это.
  15. akl

    akl Гуру

    залипание это например когда
    Код (C++):
    currmillis=millis();
    if(currmillis>=buttonTs){
       buttonTs=currmillis+1;
    }
    delay(2);
    тогда условие сработает например в 0xFE мс, buttonTs станет 0xFF, а при следующем вызове миллис() вернет уже 0x0 или 0x1

    это произойдет с меньшей вероятностью, но последствия гораздо вреднее
     
    Andrey12 нравится это.
  16. offigate

    offigate Нерд

    То есть, чтобы этот код залип на 50 дней, его надо добавить в другой код. Чтобы проверка условия была реже, чем раз в миллисекунду. Но в сумме это будет иной код.

    Я же спрашивал много раз, мне казалось, более чем ясно: сам по себе, как есть, без дополнительного кода, с очень частой проверкой условия, он может залипнуть?

    Разжую задачу дальше, поскольку вижу, что вы ее не понимаете. В сущности, вопрос залипания этого кода сводится вот к каким двум:
    • Может ли button.ts когда-либо принять значение 0xFFFFFFFF ?
    • Может ли когда-нибудь millis() после значения 0xFFFFFFFE сразу же, мгновенно, перейти в значение 0?
    Поскольку сам я не знаю точного ответа на эти два вопроса, то поэтому и сомневаюсь, будет ли код в его неизменном виде хотя бы иногда залипать или нет. Ну а если вы тут такие "знающие специалисты", вы можете ответить на эти два вопроса? Или опять сказку про белого бычка будете рассказывать, что "надо ходить по камушкам" и меняя по своему усмотрению условия задачи на ходу?
     
  17. akl

    akl Гуру

    а как иначе можно применять этот код, если не встраивать в другой? ведь сам по себе он не делает ничего полезного. софистика какая-то
     
    Andrey12, Asper Daffy, b707 и ещё 1-му нравится это.
  18. b707

    b707 Гуру

    На первый вопрос - да, запросто. Странно. что этот вопрос вообще возникает :)
    На второй - без каких либо дополнительных условий - не может.
     
    Andrey12 нравится это.
  19. offigate

    offigate Нерд

    Вы можете описать, каким образом это может произойти? Сучетом того, что к button.ts всегда прибавляется четное число 10.

    Странно, что ответив "да" на первый вопрос, вы ответили "нет" на второй.
     
  20. offigate

    offigate Нерд

    Учебная задача