मेरे पास एक (कुछ हद तक) बड़ी सत्य तालिका/राज्य मशीन है जिसे मुझे अपने कोड (एम्बेडेड सी) में लागू करने की आवश्यकता है। मैं भविष्य में बदलने के लिए इस राज्य मशीन के व्यवहार विनिर्देश की उम्मीद करता हूं, और इसलिए मैं इसे भविष्य में आसानी से संशोधित रखना चाहता हूं।कोड में सत्य सारणी? राज्य मशीन की संरचना कैसे करें?
मेरी सच्ची तालिका में 4 इनपुट और 4 आउटपुट हैं। मेरे पास यह सब एक एक्सेल स्प्रेडशीट में है, और अगर मैं इसे थोड़ा कोडेटिंग के साथ अपने कोड में पेस्ट कर सकता हूं, तो यह आदर्श होगा।
मैं सोच रहा था मैं बहुत तरह मेरे सच तालिका को एक्सेस करना चाहते हैं:
u8 newState[] = decisionTable[input1][input2][input3][input4];
और फिर मैं के साथ उत्पादन मूल्यों पहुंच सकता है:
setOutputPin(LINE_0, newState[0]);
setOutputPin(LINE_1, newState[1]);
setOutputPin(LINE_2, newState[2]);
setOutputPin(LINE_3, newState[3]);
लेकिन उस पाने के लिए आदेश में यह, ऐसा लगता है कि मुझे एक बिल्कुल भ्रमित करने वाली टेबल करना होगा:
static u8 decisionTable[][][][][] =
{{{{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 }},
{{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 }}},
{{{ 0, 0, 1, 1 },
{ 0, 1, 1, 1 }},
{{ 0, 1, 0, 1 },
{ 1, 1, 1, 1 }}}},
{{{{ 0, 1, 0, 1 },
{ 1, 1, 1, 1 }},
{{ 0, 1, 0, 1 },
{ 1, 1, 1, 1 }}},
{{{ 0, 1, 1, 1 },
{ 0, 1, 1, 1 }},
{{ 0, 1, 0, 1 },
{ 1, 1, 1, 1 }}}};
उन नेस्टेड ब्रैकेट्स सीए n कुछ हद तक भ्रमित हो रहा है - क्या किसी के पास एक बेहतर विचार है कि मैं अपने कोड में एक सुंदर दिखने वाली तालिका कैसे रख सकता हूं?
धन्यवाद!
संपादित HUAGHAGUAH के उत्तर के आधार पर:
हर किसी के इनपुट की एक समामेलन का उपयोग करना (धन्यवाद - काश मैं "स्वीकार" कर सकता है 3 या इन उत्तरों की 4), मुझे लगता है कि मैं इसे करने की कोशिश करने जा रहा हूँ एक दो आयामी सरणी के रूप में। मैं हूँ मेरी सरणी एक छोटा-सा बदलने मैक्रो का उपयोग में सूचकांक:
#define SM_INPUTS(in0, in1, in2, in3) ((in0 << 0) | (in1 << 1) | (in2 << 2) | (in3 << 3))
और वह मेरी सच्चाई तालिका सरणी इस तरह दिखना दूँगी:
static u8 decisionTable[][] = {
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 1, 1 },
{ 0, 1, 1, 1 },
{ 0, 1, 0, 1 },
{ 1, 1, 1, 1 },
{ 0, 1, 0, 1 },
{ 1, 1, 1, 1 },
{ 0, 1, 0, 1 },
{ 1, 1, 1, 1 },
{ 0, 1, 1, 1 },
{ 0, 1, 1, 1 },
{ 0, 1, 0, 1 },
{ 1, 1, 1, 1 }};
और मैं तो जैसे मेरी सच्चाई तालिका का उपयोग कर सकते इसलिए:
decisionTable[ SM_INPUTS(line1, line2, line3, line4) ]
मैं इसे एक शॉट दूंगा और देखें कि यह कैसे काम करता है। मैं 0 और 1 के साथ और अधिक सहायक # डिफाईन्स को प्रतिस्थापित कर दूंगा जो प्रत्येक राज्य का अर्थ है/**/टिप्पणियों के साथ जो आउटपुट की प्रत्येक पंक्ति के लिए इनपुट की व्याख्या करता है। सहायता के लिए हर किसी को धन्यवाद!
चूंकि आप एम्बेडेड हैं, तो स्मृति उपयोग संसाधन संसाधन होना चाहिए? – EvilTeach
@EvilTeach: प्रश्न के लिए धन्यवाद। भले ही यह एम्बेडेड हो, हम कुछ बहुत भारी लोहे पर चल रहे हैं जिसमें बहुत सारे फ्लैश और रैम के साथ फेंकने के लिए (कारण के भीतर) चल रहा है। कोड पठनीयता यहां सबसे महत्वपूर्ण कारक है। – HanClinto
एक और। क्या आपके पास एक एपीआई कॉल है जो आपको एक ही समय में सभी 4 पिन सेट करने देता है? – EvilTeach