serialEvent ()

Тема в разделе "Arduino & Shields", создана пользователем fixedip, 5 сен 2018.

  1. fixedip

    fixedip Гик

    Добрый день.
    Подскажите пожалуйста как будет работать функция
    serialEvent () если я в программе не использую loop?

    SerialEvent occurs whenever a new data comes in the hardware serial RX. This
    routine is run between each time loop() runs, so using delay inside loop can
    delay response. Multiple bytes of data may be available.
    __________________________________________________________________

    SerialEvent возникает всякий раз, когда новые данные поступают в аппаратное сериальное RX. Эта
    процедура запускается между циклами цикла time (), поэтому использование задержки внутри цикла может
    задержки ответа. Может быть доступно несколько байтов данных.
     
    Последнее редактирование модератором: 6 сен 2018
  2. Mitrandir

    Mitrandir Гуру

    Отлично отработает.

    Имеется в виду если один вызов функции loop длится час, то serialevent вызовется через час когда луп закончится
     
  3. fixedip

    fixedip Гик

    спасибо
     
  4. Mitrandir

    Mitrandir Гуру

    Там примерно так сделано

    Код (C++):
    void main() {

    setup() ;

    while(1) {
    loop() ;
    SerialEvent() ;
    }
    }
     
  5. fixedip

    fixedip Гик

    У меня в коде в loop () не заходит, а из setup уходит в функции и в loop вообще не заходит и не возвращается все "бегает" по функциям, вот по этому я и спросил будет-ли она работать.....хотя понимаю, что уже нет :)
     
  6. fixedip

    fixedip Гик

  7. parovoZZ

    parovoZZ Гуру

    а зачем эта фигня, если можно тупо самому обработать прерывание???
     
  8. fixedip

    fixedip Гик

    В примере сказано, что она автоматически вызывается года на RX есть готовность, могу-ли я самостоятельно вызывать эту функцию?
     
  9. fixedip

    fixedip Гик

    Направьте на путь?
     
  10. Mitrandir

    Mitrandir Гуру

    Не правильно вас понял. Если вы не выходите из сетапа, то работать не будет.
     
  11. fixedip

    fixedip Гик

    Вы имеете ввиду прерывания по последовательному порту?
     
  12. b707

    b707 Гуру

    ничего там автоматически не вызывается. SerialEvent() всего лишь выполняет проверку Serial.availiable() при каждом выходе из loop()
    Если вы своем коде будете сами проверять Serial.availiable(), никакой SerialEvent() вам будет не нужен, так как это будет ровно то же самое.
     
    Tomasina, fixedip, Mitrandir и ещё 1-му нравится это.
  13. parovoZZ

    parovoZZ Гуру

    а куда я выхожу из loop?

    Код (C++):
    ISR(USART_RXC_vect)
        {
               // твой код
        }
     
    Mitrandir нравится это.
  14. parovoZZ

    parovoZZ Гуру

    Если речь про очень высокие скорости (250 000 бод и выше), то лучше по прерыванию.