Официальный сайт компании Arduino по адресу arduino.cc
Таймер перехватывает управление
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Вс, 01/10/2017 - 09:52
Arduino MEGA + Ethernet W5100 + 40-50 датчиков. Без таймера все работало без нареканий. Понадобилось добавить таймер. Использовал MsTimer2:
#include <MsTimer2.h> #include <PubSubClient.h> #include <DallasTemperature.h> #include <OneWire.h> #include "utils.h" //#include <Ethernet.h> #include "avr\wdt.h" #include "Mqtt.h" #include "configuration.h" #include "Action.h" #include "Relay.h" #include <Arduino.h> #include "definitions.h" #include "global.h" #include "Button.h" #include "Loger.h" #include "utils.h" void Timer2() { //it is started every 100ms Config.loop01(); //100ms Config.counter01++; if (Config.counter01 % 5 == 0) { //500ms Config.loop05(); Config.counter05++; if (Config.counter01 % 10 == 0) { //1sec Config.loop1(); Config.counter1++; if (Config.counter01 % 600 == 0) { //1min Config.loop60(); Config.counter60++; if (Config.counter01 % 3000 == 0) { //5min Config.loop300(); Config.counter300++; } } } } } void setup() { wdt_disable(); Serial.begin(115200); while (!Serial) { delay(10); // wait for serial port to connect. Needed for native USB port only } //init random generator randomSeed(analogRead(0)); //initialization of config Config.Init(); Loger::Info("Board is ready"); Loger::Info("Board Id:" + String(Config.BoardId)); Loger::Info("IP Address is:" + PrintIP(Ethernet.localIP())); //Set a timer MsTimer2::set(100, Timer2); MsTimer2::start(); pinMode(13, OUTPUT); digitalWrite(13, HIGH); Loger::Debug("Enjoy!"); } // the loop function runs over and over again until power down or reset void loop() { Config.MainLoop(); }
И начались проблемы зависания контроллера. Отладка выявила, что первые пару минут все работает как задумано - loop сам по себе, таймер сам по себе. А через несколько минут остается работать только таймер, а loop уже не вызывается. Что это может быть? Не мог ли я каким-то датчиком сбить нормальную работу?
Раз в пять минут у Вас будет выполняться сразу пять функций:
все за раз.
Текста этих функций нет. Вы уверены, что они (все пять по очереди) выполняются быстрее, чем 100ms?
На данный момент все, кроме одной, эти функции пустые. Поэтому выполнятся заметно быстрее, чем 100 мс. Но за идею спасибо. Действительно, в "1 мин" функции у меня идет отсылка WatchDog, которая вполне может и быть длиннее, если сеть споткнется. Придется что-то выдумывать с очередью...