वर्तमान में मैं हीट पंप सिस्टम में तापमान, प्रवाह, वोल्टेज, शक्ति और ऊर्जा प्रदर्शित करने के लिए एक ग्राफिक एलसीडी सिस्टम विकसित कर रहा हूं। एक ग्राफिक एलसीडी के उपयोग का मतलब है कि मेरे SRAM का आधा और ~ 75% मेरे फ्लैश का उपयोग स्क्रीन बफर और स्ट्रिंग्स द्वारा किया गया है।
मैं वर्तमान में ऊर्जा के लिए न्यूनतम / अधिकतम / औसत आंकड़े प्रदर्शित कर रहा हूं जब आधी रात को दैनिक आंकड़ा रीसेट होता है, तो सिस्टम यह जांचता है कि दिन के लिए खपत पिछले न्यूनतम या अधिकतम से ऊपर है या नहीं, और मूल्य संग्रहीत करता है। औसत की गणना संचयी ऊर्जा खपत को दिनों की संख्या से विभाजित करके की जाती है।
मैं पिछले सप्ताह और महीने में दैनिक औसत (सादगी के लिए 4 सप्ताह) यानी एक रोलिंग औसत प्रदर्शित करना चाहूंगा। वर्तमान में इसमें पिछले 28 दिनों के मूल्यों की एक सरणी बनाए रखना और साप्ताहिक के लिए मासिक और पिछले 7 दिनों के लिए पूरे सरणी पर औसत की गणना करना शामिल है।
प्रारंभ में मैं यह फ़्लोट्स की एक सरणी का उपयोग करके कर रहा था (जैसा कि ऊर्जा "12.12kWh" के रूप में है), लेकिन यह 28 * 4 बाइट्स = 112 बाइट्स (SRAM का 5.4%) का उपयोग कर रहा था। मुझे संकल्प के केवल एक दशमलव बिंदु होने से कोई आपत्ति नहीं है, इसलिए मैं uint16_t का उपयोग करने और आंकड़ा को 100 से गुणा करने के लिए बदल गया। इसका मतलब है कि 12.12 को 1212 के रूप में दर्शाया गया है, और मैं प्रदर्शन उद्देश्यों के लिए 100 से विभाजित करता हूं।
सरणी का आकार अब 56 बाइट्स के नीचे है (बहुत बेहतर!)।
नीचे दिए गए चित्र को कम करने के लिए कोई तुच्छ तरीका नहीं है जिसे मैं देख सकता हूं। मैं एक दशमलव स्थान ("12.1kWh" के बजाय "12.12kWh") के नुकसान को बर्दाश्त कर सकता था, लेकिन खपत अक्सर 25.5kWh से अधिक होती है (255 एक 8-बिट अहस्ताक्षरित पूर्णांक द्वारा प्रतिनिधित्व किया जाने वाला उच्चतम मूल्य)। उपभोग कभी भी 10.0kWh से नीचे या 35.0kWh से ऊपर नहीं रहा है, इसलिए अनुमान है कि मैं संग्रहीत आंकड़ों से 10 घटा सकता हूं, लेकिन मुझे पता है कि एक दिन हम इन सीमाओं को पार कर जाएंगे।
फिर मैंने एक सरणी में 9-बिट मान को पैक करने के लिए कोड का परीक्षण किया। यह 0-51.2kWh की रेंज देता है और कुल 32 बाइट्स का उपयोग करता है। हालाँकि, इस तरह एक सरणी तक पहुँचना बहुत धीमी है, खासकर जब आपको एक औसत की गणना करने के लिए सभी मूल्यों पर पुनरावृत्त करना पड़ता है।
तो मेरा सवाल है - क्या तीन खिड़कियों के साथ चलती औसत की गणना करने का एक अधिक कुशल तरीका है - जीवनकाल, 28 दिन और 7 दिन? दक्षता का अर्थ SRAM उपयोग के संदर्भ में छोटा है, लेकिन विशाल कोड के दंड के बिना। क्या मैं सभी मूल्यों को संग्रहीत करने से बच सकता हूं?