Библиотека ArduinoThread и прерывания.

Modsley
Offline
Зарегистрирован: 14.01.2018

Приветствую.

Есть такая библиотека ArduinoThread. Как я понимаю, всё в ней делается через millis и всё удобно и работает.

Но автор рекомендует запуск контроллера в свою очередь помещать в прерывание. 

А вот смысла этого я понять не могу. 

Не поясните?

Спасибо.

ThreadController controller = ThreadController();

// This is the callback for the Timer
void timerCallback(){
	controller.run();
}


void setup(){
	// Add the Threads to our ThreadController
	controller.add(&analog2);

	Timer1.attachInterrupt(timerCallback).start(10000);
}

 

b707
Offline
Зарегистрирован: 26.05.2017

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

Modsley
Offline
Зарегистрирован: 14.01.2018

Ну, без прерываний через millis эта эмуляция делается...

Собственно и эта библиотека без вызова её из прерываний работает. 

Зачем тогда она, если можно через обработчик прерывания всё и делать? 

Вот в чём был мой вопрос. 

 

Спасибо. 

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

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

Modsley
Offline
Зарегистрирован: 14.01.2018

Это понятно. 

Но зачем ставить в прерывание задачу, которая в свою очередь имеет свою периодичность? 

Например автор в примере пишет

	// Configures Thread analog1
	analog1.pin = A1;
	analog1.setInterval(100);

Значит этот thread запускаться будет через 100мс или больше. 

Зачем его ещё в прерывание пихать? 

Не понимаю смысла. Но смысл-то есть...

 

b707
Offline
Зарегистрирован: 26.05.2017

Modsley пишет:

Не понимаю смысла. Но смысл-то есть...

 

вы бы открыли исходник библиотеки и посмотрели, как она устроена. Уверен. что большая часть вопросов отпадет.

Вы, наверно, думаете, что стоит написать в программе set_interval(100) - и этот кусок кода САМ начнет вызываться каждые 100мс?

Modsley
Offline
Зарегистрирован: 14.01.2018

b707 пишет:
Вы, наверно, думаете, что стоит написать в программе set_interval(100)

Как это ни странно, я так не думаю. 

b707
Offline
Зарегистрирован: 26.05.2017

Modsley пишет:

Как это ни странно, я так не думаю. 

а очень похоже.

Зачем автору библиотеки прерывания - проще разобраться, посмотрев исходник, а не задавая вопросы на форуме.

Заодно и нам расскажете - хорошо ли написана библиотека и нужны ли там прерывания или автор лох и можно обойтись без них. Я библиотеку не смотрел, но по приведенным вами кускам кода подозреваю, что вызов метода setInterval(100) с периодичностью 100мс обеспечивается как раз той частью кода, которая запускается в прерывании. А без прерывания любой delay() в пользовательском скетче разрушит всю систему "многозадачности".

 

kalapanga
Offline
Зарегистрирован: 23.10.2016

Так автор библиотеки всё вроде написал:

It's a good idea, to create a Timer interrupt and call a ThreadController.run() there. That way, you don't need to worry about reading sensors and doing time-sensitive stuff on your main code (loop).

Logik
Offline
Зарегистрирован: 05.08.2014

та фигню он написал. Это и не хорошая и не идея. Уже сто раз обсосан такой подход. Дерьмо оно. Не теряйте время на фигню, учите Си, машинки состояния и работу с неблокирующими функциями. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Я специально для опроса всяких даччиков TimerList написал. На github-е есть, могу ссылку дать. Тама на русском все.

kalapanga
Offline
Зарегистрирован: 23.10.2016

Logik пишет:

та фигню он написал. Это и не хорошая и не идея. Уже сто раз обсосан такой подход. Дерьмо оно. Не теряйте время на фигню, учите Си, машинки состояния и работу с неблокирующими функциями. 

Согласен! :)

Modsley
Offline
Зарегистрирован: 14.01.2018

DetSimen пишет:

Я специально для опроса всяких даччиков TimerList написал. На github-е есть, могу ссылку дать. Тама на русском все.

Буду признателен. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017
Modsley
Offline
Зарегистрирован: 14.01.2018

Logik пишет:

учите Си, машинки состояния и работу с неблокирующими функциями. 

Машинки состояния это как я понимаю, конечные автоматы?