की स्थिति ढूंढना मैं एक प्रोग्राम चला रहा हूं जो खुले या छोटे सर्किट के लिए तारों के एक सेट का परीक्षण करता है। कार्यक्रम, जो एक एवीआर पर चलता है, तारों पर एक परीक्षण वेक्टर (एक चलना '1') चलाता है और परिणाम वापस प्राप्त करता है। यह इस परिणामी वेक्टर की अपेक्षाकृत डेटा के साथ तुलना करता है जो पहले ही एसडी कार्ड या बाहरी ईईपीरोम पर संग्रहीत है।'1 की कुशलता से थोड़ा सरणी
यहां एक उदाहरण है, मान लीजिए कि हमारे पास 8 तारों का एक सेट है, जिनमें से सभी सीधे हैं या नहीं। उनके पास कोई जंक्शन नहीं है। तो अगर हम 0b00000010 ड्राइव करते हैं तो हमें 0b00000010 प्राप्त करना चाहिए।
मान लीजिए कि हमें 0b11000010 प्राप्त होता है। इसका मतलब है कि तार 7,8 और तार 2 के बीच एक शॉर्ट सर्किट है। मैं 0b00000010^0b11000010 = 0b11000000 द्वारा रुचि रखने वाली बिट्स का पता लगा सकता हूं। यह मुझे स्पष्ट रूप से तार 7 और 8 को गलती से बताता है लेकिन मैं इन '1 की स्थिति को बड़ी बिट-सरणी में कुशलता से कैसे ढूंढूं। बिट मास्क का उपयोग करके केवल 8 तारों के लिए ऐसा करना आसान है, लेकिन जिस प्रणाली को मैं विकसित कर रहा हूं उसे 300 तारों (बिट्स) तक संभालना चाहिए। इससे पहले कि मैंने निम्नलिखित मैक्रोज़ का उपयोग शुरू किया और 300 * 300-बिट्स की सरणी में प्रत्येक बिट का परीक्षण करना शुरू किया, मैं यहां पूछना चाहता था कि क्या एक और अधिक शानदार समाधान था।
#define BITMASK(b) (1 << ((b) % 8))
#define BITSLOT(b) ((b/8))
#define BITSET(a, b) ((a)[BITSLOT(b)] |= BITMASK(b))
#define BITCLEAR(a,b) ((a)[BITSLOT(b)] &= ~BITMASK(b))
#define BITTEST(a,b) ((a)[BITSLOT(b)] & BITMASK(b))
#define BITNSLOTS(nb) ((nb + 8 - 1)/8)
बस एक खुला सर्किट का पता लगाने के तरीके को दिखाने के लिए। अपेक्षित डेटा: 0b00000010, प्राप्त डेटा: 0b00000000 (तार उच्च खींच नहीं लिया गया है)। 0b00000010^0b00000000 = 0b0b00000010 - तार 2 खुला है।
नोट: मुझे पता है कि 300 तारों का परीक्षण एक एवीआर मेगा 1281 के अंदर छोटी रैम नहीं है, इसलिए मैं इसे समूहों में विभाजित करूँगा यानी 50 तारों की तुलना करें, तुलना करें, परिणाम दिखाएं और फिर आगे बढ़ें।
मैं डी ब्रुज़िन लिंक के माध्यम से पढ़ता हूं और ऐसा लगता है कि लगातार 0 की आवश्यकता होती है। यहां कोई गारंटी नहीं है कि दोष लगातार रहेगा। मेरा कंपाइलर एवीआर-जीसीसी है। यह देखने के लिए कुछ शोध करें कि यह इन्हें लागू करता है या नहीं। – saad