1717 Версии:
1818 v1.0 - релиз
1919 v1.1 - добавил микросекундный режим
20+ v1.2 - внёс микросекундный режим в класс
2021*/
2122
2223#ifndef _GyverOS_h
2324#define _GyverOS_h
2425
25- #ifndef OS_MICROS
26- #define OS_TIME () millis()
27- #else
28- #define OS_TIME () micros()
29- #endif
30-
3126template < uint16_t _AMOUNT >
3227class GyverOS {
3328public:
29+ // включить микросекундный режим (true)
30+ void setMicros (bool mode) {
31+ usMode = mode;
32+ }
33+
3434 // тикер. Вызывать как можно чаще
3535 void tick () {
3636 #ifdef OS_BENCH
3737 if (loadP > 0 ) {
38- if (OS_TIME () - loadTmr >= loadP) {
38+ if (uptime () - loadTmr >= loadP) {
3939 loadTmr += loadP;
4040 load = (loadSum / 10ul ) / loadP; // (loadSum / 1000) / loadP * 100
4141 loadSum = 0 ;
@@ -49,7 +49,7 @@ class GyverOS {
4949 #endif
5050 for (int i = 0 ; i < _AMOUNT; i++) {
5151 if (callbacks[i] && states[i]) {
52- uint32_t left = OS_TIME () - tmrs[i];
52+ uint32_t left = uptime () - tmrs[i];
5353 if (prds[i] == 0 || left >= prds[i]) {
5454 if (prds[i] > 0 ) tmrs[i] += prds[i] * (left / prds[i]);
5555 #ifdef OS_BENCH
@@ -89,14 +89,14 @@ class GyverOS {
8989 void setPeriod (int num, uint32_t prd) {
9090 if (num >= _AMOUNT) return ;
9191 prds[num] = prd;
92- tmrs[num] = OS_TIME ();
92+ tmrs[num] = uptime ();
9393 }
9494
9595 // запустить задачу
9696 void start (int num) {
9797 if (num >= _AMOUNT) return ;
9898 states[num] = 1 ;
99- tmrs[num] = OS_TIME ();
99+ tmrs[num] = uptime ();
100100 }
101101
102102 // перезапустить задачу
@@ -122,7 +122,7 @@ class GyverOS {
122122 uint32_t tm = 0 ;
123123 for (int i = 0 ; i < _AMOUNT; i++) {
124124 if (callbacks[i] && states[i]) {
125- tm = prds[i] + tmrs[i] - OS_TIME ();
125+ tm = prds[i] + tmrs[i] - uptime ();
126126 nearPrd = min (nearPrd, tm);
127127 }
128128 }
@@ -176,7 +176,7 @@ class GyverOS {
176176 void enableLoad (uint32_t loadp = 1000 ) {
177177 #ifdef OS_BENCH
178178 loadP = loadp;
179- loadTmr = OS_TIME ();
179+ loadTmr = uptime ();
180180 loadSum = 0 ;
181181 #endif
182182 }
@@ -189,9 +189,19 @@ class GyverOS {
189189 }
190190
191191private:
192+ uint32_t uptime () {
193+ return usMode ? micros () : millis ();
194+ }
195+
192196 void (*callbacks[_AMOUNT])() = {};
193197 uint32_t tmrs[_AMOUNT], prds[_AMOUNT], loopTime = 0 , loopTimeMax = 0 ;
194198 bool states[_AMOUNT];
199+ #ifdef OS_MICROS
200+ bool usMode = 1 ;
201+ #else
202+ bool usMode = 0 ;
203+ #endif
204+
195205#ifdef OS_BENCH
196206 uint32_t loadP = 0 , us = 0 , loadTmr = 0 , loadSum = 0 ;
197207 int load = 0 , loopTimeNum = -1 ;
0 commit comments