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

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

Метки:
  1. offigate

    offigate Нерд

    Не-а. После того, как миллис стал FFFFFFFE сравнение прошло удачно, то к button.ts прибавляется 10 и он становится равен 8. Через 10 мс миллис тоже станет равен 8 и опять все сработает нормально. :p

    Какя-то программа может делать что угодно. Однако я не про невесть какаю программу спрашиваю, а про свою конкретно. Может в ней миллис вызываться настолько редко, что она залипнет? Че-то не видать, чтобы такое было возможно.
     
    Последнее редактирование: 20 ноя 2019
  2. DetSimen

    DetSimen Guest

    Я - ТУПОЙ.
    Запишите в скрижали.
     
    Andrey12 нравится это.
  3. akl

    akl Гуру

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

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

    Может проскочит, а может и завалится. :mad: на старте...
     
  5. offigate

    offigate Нерд

    Я подозреваю, что конкретно эта не завалится никогда. По причине того, что 10 - четное число.
     
  6. akl

    akl Гуру

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

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

    Может проще правильно написать, или ждать, чтобы обстоятельства мимо прошли?
    Ну, а у кого ракета не падала в момент выведения спутника? :(
     
  8. offigate

    offigate Нерд

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

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

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

    :)
     
  10. b707

    b707 Гуру

    Уважаемый, работа с кнопками обычно используется не сама по себе. а для управления остальной программой. И данный кусок кода - лишь небольшая заготовка. встаиваемая в другой код.
    Я соглашусь с вами - если вызывать условие
    if (millis() >= button.ts)
    строго раз в миллисекунду - глюков не будет.
    Но как только вы вставите этот кусок в реальную программу - вы увидите. что обеспечить столь частое исполнение loop() весьма непросто.
     
    Andrey12 нравится это.
  11. SergeiL

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

    Ну не понимает....
     
  12. b707

    b707 Гуру

    очень сильно сомневаюсь, что вы хотя бы прочитали. А уж что поняли - так вообще не верю :)
    Если бы поняли - не стали бы тут с пеной у рта доказывать. что в "данном конкретном коде" все отлично.

    И еще раз повторюсь - старайтесь меньше задавать прямых вопросов на форумах. а больше разбираться самостоятельно
     
    Andrey12 и DetSimen нравится это.
  13. offigate

    offigate Нерд

    А кто-нибудь способен дать ответ, залипнет или нет? Не голословный, а с доказательствами?

    PS: А, понял. "Сегодня в масле потребности нет" (с)
     
  14. b707

    b707 Гуру

    В сообщении #49 дан абсолютно конкретный ответ. только вы похоже даже не пытаетесь его понять.

    а насчет доказательств - это выглядит как "приведите доказательство. что 2 + 2 = 4"
     
  15. SergeiL

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

    Да не хочет он проверить.
    Проверил бы, Сам смеялся над своими вопросами :(
     
  16. akl

    akl Гуру

    не залипнет пока миллис() будет четенько срабатывать каждый раз. Короче это примерно то же самое что в этой же проверке вместо >= использовать ==
    работать будет, но в реальных условиях далеко не факт
     
    Andrey12 нравится это.
  17. Asper Daffy

    Asper Daffy Иксперд

    Родной, ты мой. Это программирование. Подозревать можно например, на форуме https://police-russia.ru/ - там специалисты по подозрениям.

    В программировании же нужно проверять. Ну, или внимательно читать, что умные люди пишут (дед тебе уже всё популярно объяснил, просто ты либо не читаешь, либо понималка недоросла, чтобы понять).

    Вот тебе проверка. Я чуть переработал твой код и сделал модельный "восьмибитовый миллис" - , чтобы переполнение быстрее наступало. Надеюсь, тест для проверки твоего кода корректен. Он должен раз в "10 миллисекунд модельного миллиса" печатать текущий счётчик проходов и реальный интервал с прошлой печати. Если считаешь, что код некорректен - говори в чём проблема и исправляй).

    Код вот он:
    Код (C++):
    #include <Printing.h>

    void loop(void) {
        static uint32_t counter = 0, oldCounter = 0; // для подсчёта реального интервала
       
        static uint8_t shortMillis = 0; // моделируем миллис на 8 битах
        static uint8_t buttonTs = 0;  
       
        unsigned long currMillis = shortMillis;
        if (currMillis >= buttonTs) {
            buttonTs = currMillis + 10; // +10 мс
            // печатаем текущий счётчик и реальный интервал
            printf("counter=%-5lu interval=%lu\r\n", counter, counter - oldCounter);
            oldCounter = counter;
        }

        counter++;
        shortMillis++;
    }

    void setup(void) {
        Serial.begin(57600);
        printf("Test Started\r\n");
    }
     
    а вот протокол его работы

    Код (C++):
    Test Started
    counter=0     interval=0
    counter=10    interval=10
    counter=20    interval=10
    counter=30    interval=10
    counter=40    interval=10
    counter=50    interval=10
    counter=60    interval=10
    counter=70    interval=10
    counter=80    interval=10
    counter=90    interval=10
    counter=100   interval=10
    counter=110   interval=10
    counter=120   interval=10
    counter=130   interval=10
    counter=140   interval=10
    counter=150   interval=10
    counter=160   interval=10
    counter=170   interval=10
    counter=180   interval=10
    counter=190   interval=10
    counter=200   interval=10
    counter=210   interval=10
    counter=220   interval=10
    counter=230   interval=10
    counter=240   interval=10
    counter=250   interval=10
    counter=251   interval=1
    counter=252   interval=1
    counter=253   interval=1
    counter=254   interval=1
    counter=255   interval=1
    counter=265   interval=10
    counter=275   interval=10
    counter=285   interval=10
    counter=295   interval=10
    counter=305   interval=10
    counter=315   interval=10
    counter=325   interval=10
    counter=335   interval=10
    counter=345   interval=10
    counter=355   interval=10
    counter=365   interval=10
    counter=375   interval=10
    counter=385   interval=10
    counter=395   interval=10
    counter=405   interval=10
    counter=415   interval=10
    counter=425   interval=10
    counter=435   interval=10
    counter=445   interval=10
    counter=455   interval=10
    counter=465   interval=10
    counter=475   interval=10
    counter=485   interval=10
    counter=495   interval=10
    counter=505   interval=10
    counter=506   interval=1
    counter=507   interval=1
    counter=508   interval=1
    counter=509   interval=1
    counter=510   interval=1
    counter=511   interval=1
    counter=521   interval=10
    counter=531   interval=10

    Вот теперь действительно
    И впредь, когда соберёшься спорить со специалистами, сначала проверь всё в коде, а потом уж спорь, чтобы идиотом как сейчас не выглядеть.
     
    Andrey12, Daniil, DetSimen и ещё 1-му нравится это.
  18. offigate

    offigate Нерд

    На #49 я ответил в #50 и №52, только вы похоже даже не пытаетесь их понять. Хотя сам автор #49 согласился с моими доводами. :rolleyes:

    Я уже несколько раз повторил, что сам я не знаю ответа на заданный вопрос. :cool:
     
  19. akl

    akl Гуру

    Но не полностью! к тому же я сам нубас и не гарантирую
     
    Andrey12 нравится это.
  20. b707

    b707 Гуру

    все ж обьяснили уже...
    "Ну тупые! сам уже понял - они ни в какую!!!"

    Дискуссия по третьему кругу пошла.
     
    Andrey12 нравится это.