Skip to content

Commit 8321c63

Browse files
committed
upd
1 parent 9489ed5 commit 8321c63

File tree

4 files changed

+35
-32
lines changed

4 files changed

+35
-32
lines changed

README.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
[![Foo](https://img.shields.io/badge/Version-1.19.1-brightgreen.svg?style=flat-square)](#versions)
1+
[![Foo](https://img.shields.io/badge/Version-1.19.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

@@ -50,9 +50,9 @@
5050
Время холостого выполнения функции tick() при реальном устройстве (кнопка/энкодер подключены к пинам МК) на ATmega328, библиотека EncButton:
5151
| Режим | Время, мкс |
5252
| ----- | ---------- |
53-
| Энкодер + кнопка | 4.3 |
54-
| Энкодер | 2.5 |
55-
| Кнопка | 2.5 |
53+
| Энкодер + кнопка | 3.8 |
54+
| Энкодер | 2.4 |
55+
| Кнопка | 1.9 |
5656

5757
*Для сравнения, стандартный digitalRead() на AVR выполняется 3.5 us*
5858

@@ -522,6 +522,7 @@ void loop() {
522522
- v1.18.2 - fix compiler warnings
523523
- v1.19 - оптимизация скорости, уменьшен вес в sram
524524
- v1.19.1 - ещё чутка увеличена производительность
525+
- v1.19.2 - ещё немного увеличена производительность, спасибо XRay3D
525526

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

library.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=EncButton
2-
version=1.19.1
2+
version=1.19.2
33
author=AlexGyver <[email protected]>
44
maintainer=AlexGyver <[email protected]>
55
sentence=Light and fast library for button and encoder operation for Arduino

src/EncButton.h

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
v1.18.2 - fix compiler warnings
4343
v1.19 - оптимизация скорости, уменьшен вес в sram
4444
v1.19.1 - ещё чутка увеличена производительность
45+
v1.19.2 - ещё немного увеличена производительность, спасибо XRay3D
4546
*/
4647

4748
#ifndef _EncButton_h
@@ -189,8 +190,8 @@ class EncButton {
189190
_btnState ^= readF(11); // инверсия кнопки
190191
if (_btnState || readF(15)) poolBtn(); // опрос если кнопка нажата или не вышли таймауты
191192
}
193+
_isrFlag = 0;
192194
}
193-
_isrFlag = 0;
194195
return EBState;
195196
}
196197

@@ -310,9 +311,9 @@ class EncButton {
310311
_prev = state;
311312
#ifdef EB_HALFSTEP_ENC // полушаговый энкодер
312313
// спасибо https://github.com/GyverLibs/EncButton/issues/10#issue-1092009489
313-
if ((state == 0x3 || state == 0x0) && _ecount != 0) {
314+
if ((state == 0x3 || state == 0x0) && _ecount) {
314315
#else // полношаговый
315-
if (state == 0x3 && _ecount != 0) { // защёлкнули позицию
316+
if (state == 0x3 && _ecount) { // защёлкнули позицию
316317
#endif
317318
uint16_t ms = millis() & 0xFFFF;
318319
EBState = (_ecount < 0) ? 1 : 2;
@@ -431,24 +432,25 @@ class EncButton {
431432

432433
inline void setF(const uint8_t x) __attribute__((always_inline)) {flags |= 1 << x;}
433434
inline void clrF(const uint8_t x) __attribute__((always_inline)) {flags &= ~(1 << x);}
434-
inline bool readF(const uint8_t x) __attribute__((always_inline)) {return (flags >> x) & 1;}
435+
inline bool readF(const uint8_t x) __attribute__((always_inline)) {return flags & (1 << x);}
436+
437+
uint8_t _amount : 6;
438+
int8_t _dir : 2;
435439

436-
uint8_t _prev : 2;
437440
uint8_t EBState : 4;
441+
uint8_t _prev : 2; // можно ускорить ещё на 0.5us, если убрать битовые поля тут и ниже
438442
bool _btnState : 1;
439443
bool _encRST : 1;
440-
bool _isrFlag : 1;
444+
bool _isrFlag = 0;
441445
uint16_t flags = 0;
442-
443-
#ifdef EB_BETTER_ENC
444-
int8_t _ecount = 0;
445-
#endif
446-
446+
447447
uint16_t _debTmr = 0;
448448
uint8_t _holdT = (EB_HOLD >> 7);
449-
int8_t _dir = 0;
450449
void (*_callback[_EB_MODE ? 14 : 0])() = {};
451-
uint8_t _amount = 0;
450+
451+
#ifdef EB_BETTER_ENC
452+
int8_t _ecount = 0;
453+
#endif
452454

453455
// flags
454456
// 0 - enc turn

src/EncButton2.h

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,6 @@ class EncButton2 {
142142
uint8_t tickISR(uint8_t p0 = 0, uint8_t p1 = 0, uint8_t p2 = 0) {
143143
if (!_isrFlag) {
144144
_isrFlag = 1;
145-
146145
if (_EB_TYPE <= 3) { // РЕАЛЬНОЕ УСТРОЙСТВО
147146
if (_EB_TYPE >= 2) poolEnc(fastRead(0) | (fastRead(1) << 1)); // энк или энк с кнопкой
148147
if (_EB_TYPE <= 2) { // кнопка или энк с кнопкой
@@ -160,8 +159,8 @@ class EncButton2 {
160159
if (_btnState || readF(15)) poolBtn(); // опрос если кнопка нажата или не вышли таймауты
161160
}
162161
}
162+
_isrFlag = 0;
163163
}
164-
_isrFlag = 0;
165164
return EBState;
166165
}
167166

@@ -267,9 +266,9 @@ class EncButton2 {
267266
_prev = state;
268267
#ifdef EB_HALFSTEP_ENC // полушаговый энкодер
269268
// спасибо https://github.com/GyverLibs/EncButton/issues/10#issue-1092009489
270-
if ((state == 0x3 || state == 0x0) && _ecount != 0) {
269+
if ((state == 0x3 || state == 0x0) && _ecount) {
271270
#else // полношаговый
272-
if (state == 0x3 && _ecount != 0) { // защёлкнули позицию
271+
if (state == 0x3 && _ecount) { // защёлкнули позицию
273272
#endif
274273
uint16_t ms = millis() & 0xFFFF;
275274
EBState = (_ecount < 0) ? 1 : 2;
@@ -391,24 +390,25 @@ class EncButton2 {
391390

392391
inline void setF(const uint8_t x) __attribute__((always_inline)) {flags |= 1 << x;}
393392
inline void clrF(const uint8_t x) __attribute__((always_inline)) {flags &= ~(1 << x);}
394-
inline bool readF(const uint8_t x) __attribute__((always_inline)) {return (flags >> x) & 1;}
393+
inline bool readF(const uint8_t x) __attribute__((always_inline)) {return flags & (1 << x);}
395394

396-
uint8_t _prev : 2;
395+
uint8_t _amount : 6;
396+
int8_t _dir : 2;
397+
397398
uint8_t EBState : 4;
399+
uint8_t _prev : 2;
398400
bool _btnState : 1;
399401
bool _encRST : 1;
400-
bool _isrFlag : 1;
402+
bool _isrFlag = 0;
401403
uint16_t flags = 0;
402-
403-
#ifdef EB_BETTER_ENC
404-
int8_t _ecount = 0;
405-
#endif
406-
404+
407405
uint16_t _debTmr = 0;
408406
uint8_t _holdT = (EB_HOLD >> 7);
409-
int8_t _dir = 0;
410407
void (*_callback[_EB_MODE ? 14 : 0])() = {};
411-
uint8_t _amount = 0;
408+
409+
#ifdef EB_BETTER_ENC
410+
int8_t _ecount = 0;
411+
#endif
412412

413413
uint8_t _pins[EB_PIN_AM];
414414

0 commit comments

Comments
 (0)