Skip to content

Commit 3d95d45

Browse files
committed
upd
1 parent b40a0fc commit 3d95d45

File tree

4 files changed

+34
-22
lines changed

4 files changed

+34
-22
lines changed

README.md

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
[![Foo](https://img.shields.io/badge/Version-1.1-brightgreen.svg?style=flat-square)](#versions)
1+
[![Foo](https://img.shields.io/badge/Version-1.2-brightgreen.svg?style=flat-square)](#versions)
22
[![Foo](https://img.shields.io/badge/Website-AlexGyver.ru-blue.svg?style=flat-square)](https://alexgyver.ru/)
33
[![Foo](https://img.shields.io/badge/%E2%82%BD$%E2%82%AC%20%D0%9D%D0%B0%20%D0%BF%D0%B8%D0%B2%D0%BE-%D1%81%20%D1%80%D1%8B%D0%B1%D0%BA%D0%BE%D0%B9-orange.svg?style=flat-square)](https://alexgyver.ru/support_alex/)
44

@@ -44,15 +44,16 @@ GyverOS<5> OS; // указать макс. количество задач
4444
<a id="usage"></a>
4545
## Использование
4646
```cpp
47-
void tick(); // тикер. Вызывать как можно чаще
47+
void setMicros(bool mode); // включить микросекундный режим (true)
48+
void tick(); // тикер. Вызывать как можно чаще
4849
void attach(int num, void (*handler)(), uint32_t prd = 0); // подключить функцию обработчик задачи
49-
void detach(int num); // отключить функцию обработчик задачи
50+
void detach(int num); // отключить функцию обработчик задачи
5051
void setPeriod(int num, uint32_t prd); // установить период для задачи
51-
void start(int num); // запустить задачу
52-
void restart(int num); // перезапустить задачу
53-
void stop(int num); // остановить задачу
54-
void exec(int num); // вызвать задачу
55-
uint32_t getLeft(); // получить время до ближайшей задачи
52+
void start(int num); // запустить задачу
53+
void restart(int num); // перезапустить задачу
54+
void stop(int num); // остановить задачу
55+
void exec(int num); // вызвать задачу
56+
uint32_t getLeft(); // получить время до ближайшей задачи
5657

5758
// ====== БЕНЧМАРК ======
5859
void attachLoopTime(int num); // подключить счётчик времени выполнения задачи и сбросить максимум
@@ -66,7 +67,6 @@ int getLoad(); // получить загруженност
6667
// === ДЕФАЙНЫ НАСТРОЕК ===
6768
// объявлять ПЕРЕД подключением библиотеки
6869
#define OS_BENCH // подключить модуль бенчмарка (тест производительности)
69-
#define OS_MICROS // всё время будет считаться в микросекундах
7070
```
7171
7272
<a id="example"></a>
@@ -131,6 +131,7 @@ void f3() {
131131
## Версии
132132
- v1.0
133133
- v1.1 - добавил микросекундный режим
134+
- v1.2 - внёс микросекундный режим в класс
134135

135136
<a id="feedback"></a>
136137
## Баги и обратная связь

keywords.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ OS_MICROS KEYWORD1
1414
# Methods and Functions (KEYWORD2)
1515
#######################################
1616

17+
setMicros KEYWORD2
1718
tick KEYWORD2
1819
attach KEYWORD2
1920
detach KEYWORD2

library.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=GyverOS
2-
version=1.1
2+
version=1.2
33
author=AlexGyver <alex@alexgyver.ru>
44
maintainer=AlexGyver <alex@alexgyver.ru>
55
sentence=Simple task manager for Arduino

src/GyverOS.h

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,25 +17,25 @@
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-
3126
template < uint16_t _AMOUNT >
3227
class GyverOS {
3328
public:
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

191191
private:
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

Comments
 (0)