Вопрос по serialEvent()

Vovka
Vovka аватар
Offline
Зарегистрирован: 04.09.2018

Объясните логику работы функции serialEvent():
допустим, только один раз пришел пакет из 10 байтов, вызвалась функция serialEvent(), но в ней на какое-то время запрещено чтение из буфера. Функция serialEvent() так и будет периодически вызываться пока не считаем из буфера или это одноразовый вызов?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015
void serialEventRun(void)
{
#if defined(HAVE_HWSERIAL0)
  if (Serial0_available && serialEvent && Serial0_available()) serialEvent();
#endif
#if defined(HAVE_HWSERIAL1)
  if (Serial1_available && serialEvent1 && Serial1_available()) serialEvent1();
#endif
#if defined(HAVE_HWSERIAL2)
  if (Serial2_available && serialEvent2 && Serial2_available()) serialEvent2();
#endif
#if defined(HAVE_HWSERIAL3)
  if (Serial3_available && serialEvent3 && Serial3_available()) serialEvent3();
#endif
}

Вопросы?

 

strarbit
Offline
Зарегистрирован: 12.06.2016

функция serialEvent() вызывается каждый раз, когда байт получен в аппаратный USART на вход RX

Vovka
Vovka аватар
Offline
Зарегистрирован: 04.09.2018

DIYMan, внимательно прочитайте мой вопрос!

strarbit, т.е. получается, что если не был обработан полученный байт, то функция больше не вызывается? Если так, тогда какой смысл в функции serialEvent(), если в loop() придется постоянно дергать функцию available() ?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Vovka пишет:

т.е. получается, что если не был обработан полученный байт, то функция больше не вызывается? 

Можете указать строку в коде из которой это "получается"?

b707
Онлайн
Зарегистрирован: 26.05.2017

Vovka, вы код совсем читать не умеете? В коде, что привел DIYMan - наиболее полный ответ на вопрос.

Главная часть вызова SerialEvent() - проверка Serial.availiable(). Вот теперь подумайте - Serial.availiable() становится истинной один раз при приходе 10 байтов или остается такой, пока байты не будут обработаны?

Чеж такую элемементарщину-то обьяснять приходится...

strarbit
Offline
Зарегистрирован: 12.06.2016

Vovka, DIYMan верно указал. Читайте ответ b707. Также вы можете играть пример Examples>Comunication>Serial Event в IDE arduino

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Vovka пишет:

DIYMan, внимательно прочитайте мой вопрос!

Я его внимательно прочитал, и дал ПОЛНЫЙ ответ, поскольку в коде, который вызывает serialEvent - ясными глазёнками видно, при каких условиях этот самый serialEvent вызывается. Что ещё нужно - не понимаю. Ответ дан, полнее некуда.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

DIYMan пишет:
Ответ дан, полнее некуда.
Как это некуда? А попу подтереть готовый код для задачи ТС?

Vovka
Vovka аватар
Offline
Зарегистрирован: 04.09.2018

Хорошо, давайте начнем с самого начала:
подали питание на МК. На ножку Rx пришел байт, UART его принял, выставил флаг.
Сработало прерывание, выполнилась внутренняя функция и байт оказался в буфере, счетчик байт в буфере стал равным единице.
После этого функция serialEvent() будет вызвана?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Vovka пишет:
Хорошо, давайте начнем с самого начала: подали питание на МК. На ножку Rx пришел байт, UART его принял, выставил флаг. Сработало прерывание, выполнилась внутренняя функция и байт оказался в буфере, счетчик байт в буфере стал равным единице. После этого функция serialEvent() будет вызвана?

Ты код читать умеешь? Что непонятного в приведённом мной куске кода? Перевожу: функция serialEventN вызывается КАЖДЫЙ ПРОХОД loop в том случае, если в приёмном буфере соответствующего UART есть по крайней мере 1 байт. И будет вызываться до посинения, пока все байты из приёмного буфера не вычитать вызовом SerialN.read().

Ещё раз кусок кода привести, или не надо? Там вот ровно такими же словами всё написано.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Vovka пишет:
Хорошо, давайте начнем с самого начала:

А, давайте! Начало находится в книге Кернигана и Ритчи.

Давайте Вы прочитаете её от корки до корки, попутно разбирая и запуская примеры.

Потом, после прочтения, разберёте кусок кода, который Вам дали.

После этого у Вас больше не останется вопросов типа тех, что Вы задаёте. А если останутся, то бросайте это дело - не Ваше оно.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Vovka, Вы перепутали форум. На этом форуме не дают призы за интересные вопросы. Так что не ждите призов от DIYMan или кого либо. Здесь такое не практикуется .

Vovka
Vovka аватар
Offline
Зарегистрирован: 04.09.2018

DIYMan пишет:

Перевожу: функция serialEventN вызывается КАЖДЫЙ ПРОХОД loop в том случае, если в приёмном буфере соответствующего UART есть по крайней мере 1 байт. И будет вызываться до посинения, пока все байты из приёмного буфера не вычитать вызовом SerialN.read().

Как долго я добивался ответа на мой вопрос!

Vovka пишет:

Функция serialEvent() так и будет периодически вызываться пока не считаем из буфера или это одноразовый вызов?

Теперь мне не понятно, зачем сделали функцию serialEvent(), которая вызывается каждый проход loop() - ведь в нутрь loop() можно добавить нужную проверку наличия байта в буфере и делать нужные действия? К чему эти лишние телодвижения?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Vovka пишет:
Теперь мне не понятно, зачем сделали функцию serialEvent(), которая вызывается каждый проход loop() - ведь в нутрь loop() можно добавить нужную проверку наличия байта в буфере и делать нужные действия? К чему эти лишние телодвижения?
А почему здесь вы ищете ответы. Все вопросы и притензии к разработчикам.

sadman41
Offline
Зарегистрирован: 19.10.2016

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Vovka пишет:

Теперь мне не понятно, зачем сделали функцию serialEvent(), которая вызывается каждый проход loop() - ведь в нутрь loop() можно добавить нужную проверку наличия байта в буфере и делать нужные действия? К чему эти лишние телодвижения?

Теперь мне непонятно, Вы сделали то, что я Вам писал в посте #11

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

Vovka
Vovka аватар
Offline
Зарегистрирован: 04.09.2018

qwone пишет:

А почему здесь вы ищете ответы. Все вопросы и притензии к разработчикам.

Я думал, что здесь собрались те, кто разобрался как работает "система Ардуино" и может объяснить чего и как...

sadman41
Offline
Зарегистрирован: 19.10.2016

"Как работает" и "Почему именно так" - это вопросы, между которыми может лежать пропасть.

Vovka
Vovka аватар
Offline
Зарегистрирован: 04.09.2018

ЕвгенийП пишет:

Теперь мне непонятно, Вы сделали то, что я Вам писал в посте #11

С этой книгой я познакомился лет 20 назад... А перед этим писал на асме для 580ИК80А... И я привык, прежде чем что-то писать, нужно разобраться как работает железо и сама "система"... Ардуино я только начал изучать - мне стало интересно почему столько поклонников...

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Vovka пишет:
Я думал, что здесь собрались те, кто разобрался как работает "система Ардуино" и может объяснить чего и как...

Вы что уже сделали то что написано #11 . Или здесь специально для вас устроить курс чтения этой замечательной книги. А не высокого вы мнения о себе.

Vovka пишет:
С этой книгой я познакомился лет 20 назад... А перед этим писал на асме для 580ИК80А...

Не про вас анекдот.

Ой,Абрам, шо я тебе скажу. Ты слыхал, как поет Карузо?
-Не, а как?
-Дерьмо ! Мне Мойша вчера напел...

 

Vovka
Vovka аватар
Offline
Зарегистрирован: 04.09.2018

Вы ошибаетесь! А можно посмотреть на Ваш сайт, где размещены Ваши разработки?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Vovka пишет:

Как долго я добивался ответа на мой вопрос!

Ответ на твой вопрос тебе был дан сразу. А добивался ты - чтобы тебе разжевали очевидное, вместо того, чтобы чуть наморщить лоб и понять по коду, что там происходит. Но щас не модно - лоб морщить, от этого морщины образуются - а зачем они гламурным кисо?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Vovka пишет:

С этой книгой я познакомился лет 20 назад... А перед этим писал на асме для 580ИК80А... 

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

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Vovka пишет:

Вы ошибаетесь! А можно посмотреть на Ваш сайт, где размещены Ваши разработки?

Это  кому вопрос?

Vovka
Vovka аватар
Offline
Зарегистрирован: 04.09.2018

Нажал "Ответить" для qwone

Vovka
Vovka аватар
Offline
Зарегистрирован: 04.09.2018

DIYMan пишет:

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

Вот даже как! Тогда давай и на твой сайт посмотрим!

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Vovka пишет:

Нажал "Ответить" для qwone

А как наличие моего сайта относится к Ардуино. Или Вы считаете что это как меряние пенисами. Так я давно такой туфтой не занимаесь и не вижу смысла оголяться перед Вами.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Vovka пишет:

DIYMan пишет:

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

Вот даже как! Тогда давай и на твой сайт посмотрим!

Ну давай, не вопрос: http://gardenboss.ru, там есть ссылки на исходники на гитхабе, если тебя, помимо PHP и JS ещё С++ интересует. Нужны будут исходники на С# - не стесняйся.

Дитё, не надо меня на слабо брать :)

Vovka
Vovka аватар
Offline
Зарегистрирован: 04.09.2018

qwone пишет:

А как наличие моего сайта относится к Ардуино.

Просто засомневался, что общаюсь с Программистом...

qwone пишет:

Или Вы считаете что это как меряние пенисами

Я таким тоже не занимаюсь - просто хочу доказательства того, какой у Вас уровень профессионализма..

qwone пишет:

Так я давно такой туфтой не занимаесь и не вижу смысла оголяться перед Вами.

Слился... ;))

sadman41
Offline
Зарегистрирован: 19.10.2016

Квон, загоняй его в классы.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Vovka пишет:
Просто засомневался, что общаюсь с Программистом...
А Вы не общаетесь с программистом. Ардуино это хобби. Программист это ну очень расплвчатое понятие. Но я точно уверен что Си вы не знаете. Современное Си а не ту архаику которую вам напели когда-то в детстве.

Vovka
Vovka аватар
Offline
Зарегистрирован: 04.09.2018

DIYMan пишет:

Ну давай, не вопрос: http://gardenboss.ru, там есть ссылки на исходники на гитхабе, если тебя, помимо PHP и JS ещё С++ интересует. Нужны будут исходники на С# - не стесняйся.

Дитё, не надо меня на слабо брать :)

PHP и JS ? А сайт сделан на готовом движке!
С++, скорей всего Билдер? :))
Шарп... не, для моих задач и Visual C++ с лихвой!

Дите? Ну-ну... :)))

Кстати, папаша, не слишком ли много гонора? Из простого вопроса развить такой срачь?

Vovka
Vovka аватар
Offline
Зарегистрирован: 04.09.2018

qwone пишет:

А Вы не общаетесь с программистом. Ардуино это хобби. Программист это ну очень расплвчатое понятие.

Вот поэтому, если не до конца понимаете вопрос, то не стоит пытаться что-то объяснять другим!

qwone пишет:

Но я точно уверен что Си вы не знаете. Современное Си а не ту архаику которую вам напели когда-то в детстве.

Вы слишком большого о себе мнения!
И как Вы можете судить о современном Си, если:

qwone пишет:

А Вы не общаетесь с программистом.

Vovka
Vovka аватар
Offline
Зарегистрирован: 04.09.2018

sadman41 пишет:

Квон, загоняй его в классы.

Самому слабо?

 

Ухожу с форума, не моя компания... Дальнейший срач не интересен!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Vovka пишет:

С этой книгой я познакомился лет 20 назад... 

Самое время обновить знакомство. Судя по Вашим вопросам, Вы ничегошеньки из неё не помните. После поста №1 написать то, что Вы написали в посте №3 - это значит, что Вы не поняли ни одной буквы в коде из поста №1.

Так что хотите нормального взрослого к себе отношения - прокачайте матчасть. Пока же Вы только права качаете - это неинтересно.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Vovka пишет:

Ухожу с форума, не моя компания... Дальнейший срач не интересен!

А сиськи показать? Пока сиськи не показал, уходить нельзя! Это правила такие.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Vovka пишет:

PHP и JS ? А сайт сделан на готовом движке!
С++, скорей всего Билдер? :))
Шарп... не, для моих задач и Visual C++ с лихвой!

Дите? Ну-ну... :)))

Кстати, папаша, не слишком ли много гонора? Из простого вопроса развить такой срачь?

1. Да, PHP и JS, фреймворк - Laravel + Bootstrap. Могу и ручками, но смысл? Контроллеры, вьюхи и фронтэнд за меня Laravel не напишет, знаешь ли. Подобный высером ты только подтверждаешь свою некомптентность и малый возраст;

2. С++ деБилдер последний раз юзал где-то лет десять назад, если не более того. С++ - это язык, а деБилдер - IDE. Опять вопиющая некомпетентность с твоей стороны;

3. Что сказать-то хотел? То, что ты не знаешь шарпа - это уже ясно, как и то, что не знаешь и С++;

4. Да, дитё - морально незрелый младенец. Биологический возраст тут не при чём;

5. Не, нормально. Ты же позволяешь себе брызгать во все стороны непроходимой тупостью и упрямством в этой тупости - вот и я волен выказывать гонор так, как мне того хочется. Пуркуа бы и не па, isn't it?

С тобой всё ясно, следующий.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Vovka пишет:

Ухожу с форума, не моя компания... 

https://www.youtube.com/watch?v=MZnDzG5lRx0

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Vovka пишет:
И как Вы можете судить о современном Си, если:
Да в легкую открываете ядро среды Ардуины и читаете. Если вы это читаете как букварь, то уровень соответсующий. А если тупите на пустиках и ждете что бы вам это еще расжевывали. Причем легко открыть c помощью Notepad++ ядро Ардуины "C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino" . 

andycat
andycat аватар
Онлайн
Зарегистрирован: 07.09.2017

Интересная тема (гнилая) развивается, для Вовки наверное сайт на ассемблере должен быть написан, тогда он обканчается от восхищения и поймёт свою гнилость (

Беда.....

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Не пугайте, а то он и впрямь уйдёт, чего делать-то будем?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

andycat пишет:
Интересная тема (гнилая) развивается, для Вовки наверное сайт на ассемблере должен быть написан, тогда он обканчается от восхищения и поймёт свою гнилость ( Беда.....
И сидеть этот сайт должен на Ардуино Uno.

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

Vovka пишет:

С этой книгой я познакомился лет 20 назад... А перед этим писал на асме для 580ИК80А... И я привык, прежде чем что-то писать, нужно разобраться как работает железо и сама "система"... Ардуино я только начал изучать - мне стало интересно почему столько поклонников...

Вы писали на асме? Да не смешите меня. Позанимавшись с ардуино пару лет по выходным, по часику, почитав Кернигана и Ритчи немного полазив в уже ткнутом меня носом коде даже я с моими скромными навыками могу разобраться что и как работает в данном случае. А тут на асме писатель :-)
Или имеется в виду копипаст? И по статье с картинками компиляция?

А ко всем остальным участникам - дискусии ну че накинулись, хороший КлапауцийХХХ мог бы вырасти, написал бы титановый велосипед для SerialEvent.

Ведь смотрите как хорошо все начиналось, тут Вован конкретно в лужу пернул сел

Vovka пишет:

DIYMan пишет:

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

Вот даже как! Тогда давай и на твой сайт посмотрим!