Периодичность выполнения
- Войдите на сайт для отправки комментариев
Сб, 14/05/2016 - 06:29
Доброго дня
Небольшой вопрос, когда мне нужно что бы что-то выполнялось, допустим, раз в секунду я писал такое:
if (currentMillis - previousMillis > 1000) {
previousMillis = currentMillis;
//некий код
}
В сети нашел такой вариант:
if(millis()%1000==0) {
//некий код
}
Второй код мне конечно же понравился больше: там нет двух переменных занимающих много места. НО! не получится ли, что второй код будет выполняться через раз, а то и реже? Если контроллер будет чем либо занят и не обработает эту строку вовремя?
класс титановый велосипед для delay без delay().
Oooops.
Мало того! Определенные значения (каждую 43 мсек) millis() банально "проскакивает", поэтому % - ну никак не подходит. :)
класс титановый велосипед для delay без delay().
Все давно придумано до нас. Благодарю.
класс титановый велосипед для delay без delay().
Все давно придумано до нас. Благодарю.
внимательно там
27unsignedlongcurrent = micros(); tick = 0;28// unsigned long current = millis(); tick = 0;В сети нашел такой вариант:
if(millis()%1000==0) { //некий код }Второй код мне конечно же понравился больше: там нет двух переменных занимающих много места. НО! не получится ли, что второй код будет выполняться через раз, а то и реже? Если контроллер будет чем либо занят и не обработает эту строку вовремя?
1. А Вы поинтересуйтесь сколько и каких ресурсов занимает операция %
2. Получится.
if (currentMillis - previousMillis > 1000) { previousMillis = currentMillis; //некий код }Если Вам нужно, чтобы код исполнялся "раз в секунду", а не "не более одного раза в секунду", то следует писать:
if (currentMillis - previousMillis > 1000) { previousMillis += 1000; //некий код }