From a4df728115fa1906abfdd265d3622221a2ab8e43 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Wed, 7 Nov 2018 11:38:24 +0100
Subject: [PATCH] Moved func ptr tables to RAM
Moved function pointer tables to RAM to check performance issues
---
sonoff/xdrv_interface.ino | 7 +++++++
sonoff/xsns_interface.ino | 18 ++++++++++++++++++
2 files changed, 25 insertions(+)
diff --git a/sonoff/xdrv_interface.ino b/sonoff/xdrv_interface.ino
index 69bbcbada..11699543c 100644
--- a/sonoff/xdrv_interface.ino
+++ b/sonoff/xdrv_interface.ino
@@ -17,7 +17,14 @@
along with this program. If not, see .
*/
+//#define XDRV_IN_ROM
+
+#ifdef XDRV_IN_ROM
boolean (* const xdrv_func_ptr[])(byte) PROGMEM = { // Driver Function Pointers
+#else
+boolean (* const xdrv_func_ptr[])(byte) = { // Driver Function Pointers
+#endif
+
#ifdef XDRV_01
&Xdrv01,
#endif
diff --git a/sonoff/xsns_interface.ino b/sonoff/xsns_interface.ino
index e858ec43e..adfebea22 100644
--- a/sonoff/xsns_interface.ino
+++ b/sonoff/xsns_interface.ino
@@ -17,7 +17,13 @@
along with this program. If not, see .
*/
+//#define XSNS_IN_ROM
+
+#ifdef XSNS_IN_ROM
boolean (* const xsns_func_ptr[])(byte) PROGMEM = { // Sensor Function Pointers for simple implementation of sensors
+#else
+boolean (* const xsns_func_ptr[])(byte) = { // Sensor Function Pointers for simple implementation of sensors
+#endif
#ifdef XSNS_01
&Xsns01,
#endif
@@ -260,7 +266,11 @@ boolean (* const xsns_func_ptr[])(byte) PROGMEM = { // Sensor Function Pointers
const uint8_t xsns_present = sizeof(xsns_func_ptr) / sizeof(xsns_func_ptr[0]); // Number of External Sensors found
uint8_t xsns_index = 0;
+#ifdef XSNS_IN_ROM
const uint8_t kXsnsList[] PROGMEM = {
+#else
+const uint8_t kXsnsList[] = {
+#endif
#ifdef XSNS_01
XSNS_01,
#endif
@@ -508,7 +518,11 @@ const uint8_t kXsnsList[] PROGMEM = {
boolean XsnsEnabled(byte sns_index)
{
if (sns_index < sizeof(kXsnsList)) {
+#ifdef XSNS_IN_ROM
uint8_t index = pgm_read_byte(kXsnsList + sns_index);
+#else
+ uint8_t index = kXsnsList[sns_index];
+#endif
return bitRead(Settings.sensors[index / 32], index % 32);
}
return 1;
@@ -518,7 +532,11 @@ boolean XsnsPresent(byte sns_index)
{
uint8_t index = 0;
for (byte i = 0; i < sizeof(kXsnsList); i++) {
+#ifdef XSNS_IN_ROM
index = pgm_read_byte(kXsnsList + i);
+#else
+ index = kXsnsList[i];
+#endif
if (index == sns_index) { return true; }
}
return false;