fixed blocking bug
This commit is contained in:
parent
54b3399aca
commit
5fe396173b
12
README.md
12
README.md
|
@ -10,13 +10,11 @@ Die aktuell einzige externe Abhängigkeit ist die [U8g2-Library von olikraus](ht
|
||||||
|
|
||||||
## Probleme, offene Fragen
|
## Probleme, offene Fragen
|
||||||
|
|
||||||
- ***Großes Problem:*** Während des Gedrückthaltens einer Menütaste am Regler blockiert das Programm fast (nur noch ca. 10 Loops / Sekunde). In diesem Fall funktioiert Modbus nicht mehr.
|
- Das Macro *_FAST_STEP_MS* (Millisekunden, nach denen eine gedrückte Menütaste ein MenuEvent auslöst) darf nicht auf unter 100 gesetzt werden, da die Displayroutinen sonst zu sehr blockieren und Modbus nicht mehr funktioniert. Dabei muss jedenfalls der Konstruktor ***U8G2_ST7920_128X64_F_HW_SPI*** für das Display verwendet werden, da die Displayroutinen sonst zu langsam sind (siehe Liste unten). Eine Erhöhung der SPI-Clockrate kommt leider nicht in Frage, da im Test das Display dabei nicht mehr richtig funktionierte. Folgend die ungefähr benötigten Zeiten (abhängig vom Konstruktor) in ms, um den Displayinhalt aufzubauen (Homescreen, Startmenü):
|
||||||
***### TODO - Das liegt an der Zeit, die gebraucht wird, um das Display zu beschreiben (70 - 100+ ms). Wenn praktisch dauernd das Display neu beschrieben wird, bleibt einfach keine Zeit für was anderes -- SCHNELL EINE LÖSUNG FINDEN***
|
- *U8G2_ST7920_128X64_1_HW_SPI*: 192, 125
|
||||||
Eine Erhöhung der SPI-Clockrate kommt leider nicht in Frage, da im Test das Display dabei nicht mehr richtig funktionierte. Folgend die ungefähr benötigten Zeiten in ms, um den Displayinhalt aufzubauen (Homescreen, Startmenü):
|
- *U8G2_ST7920_128X64_2_HW_SPI*: 131, 92
|
||||||
- U8G2_ST7920_128X64_1_HW_SPI: 192, 125
|
- *U8G2_ST7920_128X64_F_HW_SPI*: 87, 67
|
||||||
- U8G2_ST7920_128X64_2_HW_SPI: 131, 92
|
- Der Durchschnittswert der Temperatur wird nicht mehr gebildet (außer das Macro *_MODBUS_AVERAGE_TEMPERATURES* ist 1 - dafür reicht der RAM aber eh nicht ;-) ).
|
||||||
- U8G2_ST7920_128X64_F_HW_SPI: 87, 67
|
|
||||||
- Der Durchschnittswert der Temperatur wird nicht mehr gebildet (außer das Macro _MODBUS_AVERAGE_TEMPERATURES ist 1 - dafür reicht der RAM aber eh nicht ;-) ).
|
|
||||||
***Frage:*** Ist die Mittelung der Temperatur wirklich nicht notwendig?
|
***Frage:*** Ist die Mittelung der Temperatur wirklich nicht notwendig?
|
||||||
|
|
||||||
# Modbus
|
# Modbus
|
||||||
|
|
|
@ -612,7 +612,7 @@ uint8_t Display::_event()
|
||||||
event = U8X8_MSG_GPIO_MENU_NEXT;
|
event = U8X8_MSG_GPIO_MENU_NEXT;
|
||||||
else if (prev)
|
else if (prev)
|
||||||
event = U8X8_MSG_GPIO_MENU_PREV;
|
event = U8X8_MSG_GPIO_MENU_PREV;
|
||||||
else if (cancel)
|
else if (cancel && _selection)
|
||||||
event = _BACK_TO_HOME_SCREEN;
|
event = _BACK_TO_HOME_SCREEN;
|
||||||
if (millis() - _checkFastStepTime > _BEGIN_BIG_STEPS_DELAY)
|
if (millis() - _checkFastStepTime > _BEGIN_BIG_STEPS_DELAY)
|
||||||
_enableBigSteps = true;
|
_enableBigSteps = true;
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
#define _BEGIN_FAST_STEPS_DELAY 500
|
#define _BEGIN_FAST_STEPS_DELAY 500
|
||||||
#define _BEGIN_BIG_STEPS_DELAY 3000
|
#define _BEGIN_BIG_STEPS_DELAY 3000
|
||||||
#define _FAST_STEP_MS 50
|
#define _FAST_STEP_MS 100
|
||||||
#define _BIG_STEP 10
|
#define _BIG_STEP 10
|
||||||
|
|
||||||
#define _BACK_TO_HOME_SCREEN 1
|
#define _BACK_TO_HOME_SCREEN 1
|
||||||
|
@ -76,6 +76,7 @@ extern "C" uint8_t my_UserInterfaceMessage(u8g2_t *u8g2, const char *title1, con
|
||||||
extern "C" uint8_t my_UserInterfaceSelectionList(u8g2_t *u8g2, const char *title, uint8_t start_pos, const char *sl);
|
extern "C" uint8_t my_UserInterfaceSelectionList(u8g2_t *u8g2, const char *title, uint8_t start_pos, const char *sl);
|
||||||
// extern "C" void my_UserInterfaceInputValue(u8g2_t *u8g2, const char *title, const char *pre, uint8_t value, uint8_t digits, const char *post);
|
// extern "C" void my_UserInterfaceInputValue(u8g2_t *u8g2, const char *title, const char *pre, uint8_t value, uint8_t digits, const char *post);
|
||||||
extern "C" void my_UserInterfaceInputValueString(u8g2_t *u8g2, const char *title, const char *sub, const char *text);
|
extern "C" void my_UserInterfaceInputValueString(u8g2_t *u8g2, const char *title, const char *sub, const char *text);
|
||||||
|
// extern "C" uint8_t my_read_pin_state(u8x8_t *u8x8);
|
||||||
|
|
||||||
class Display : public U8G2_ST7920_128X64_F_HW_SPI
|
class Display : public U8G2_ST7920_128X64_F_HW_SPI
|
||||||
{
|
{
|
||||||
|
@ -109,7 +110,6 @@ private:
|
||||||
unsigned long _checkFastStepTime; // letzte Zeit, zu der ein entsprechender Button NICHT gedrückt war
|
unsigned long _checkFastStepTime; // letzte Zeit, zu der ein entsprechender Button NICHT gedrückt war
|
||||||
unsigned long _lastFastStep; // letzte Zeit, zu der ein schneller Schritt ausgeführt wurde
|
unsigned long _lastFastStep; // letzte Zeit, zu der ein schneller Schritt ausgeführt wurde
|
||||||
int _stepSize; // Um wieviel der entsprechende Wert auf einmal geändert werden soll
|
int _stepSize; // Um wieviel der entsprechende Wert auf einmal geändert werden soll
|
||||||
// String _str1, _str2;
|
|
||||||
|
|
||||||
parameters *_params;
|
parameters *_params;
|
||||||
values *_vals;
|
values *_vals;
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
/*
|
/*
|
||||||
|
|
||||||
nonblockingUserinterface.cpp
|
myU8g2changes.cpp
|
||||||
|
|
||||||
These original files were modified to this file by brunotic:
|
This file contains brunotified (modified ;-) ) functions of the following
|
||||||
|
original files:
|
||||||
U8g2/src/clib/u8g2_message.c
|
U8g2/src/clib/u8g2_message.c
|
||||||
U8g2/src/clib/u8g2_selection_list.c
|
U8g2/src/clib/u8g2_selection_list.c
|
||||||
U8g2/src/clib/u8g2_input_value.c
|
U8g2/src/clib/u8g2_input_value.c
|
||||||
|
U8g2/src/clib/u8g2_debounce.c
|
||||||
|
|
||||||
|----------------
|
|----------------
|
||||||
| ORIGINAL TEXT:
|
| ORIGINAL TEXT:
|
||||||
|
@ -337,4 +339,24 @@ void my_UserInterfaceInputValueString(u8g2_t *u8g2, const char *title, const cha
|
||||||
// } while( u8g2_NextPage(u8g2) );
|
// } while( u8g2_NextPage(u8g2) );
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
// original u8x8_read_pin_state(), aber nicht static
|
||||||
|
uint8_t my_read_pin_state(u8x8_t *u8x8)
|
||||||
|
{
|
||||||
|
uint8_t i;
|
||||||
|
uint8_t pin_state;
|
||||||
|
|
||||||
|
pin_state = 255; /* be compatible with the setup of the default pin setup, which is 255 */
|
||||||
|
for( i = 0; i < U8X8_PIN_INPUT_CNT; i++ )
|
||||||
|
{
|
||||||
|
pin_state <<= 1;
|
||||||
|
|
||||||
|
/* the callback function should put the return value into this variable */
|
||||||
|
u8x8->gpio_result = 1;
|
||||||
|
u8x8_gpio_call(u8x8, U8X8_MSG_GPIO(i+U8X8_PIN_OUTPUT_CNT), 0);
|
||||||
|
pin_state |= u8x8->gpio_result & 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return pin_state;
|
||||||
|
}
|
||||||
|
|
||||||
} //extern "C"
|
} //extern "C"
|
Loading…
Reference in a new issue