यह आपके विशेष एम्बेडेड डिवाइस की वास्तुकला पर कुछ हद तक निर्भर करता है। मैं तीन उदाहरण दूंगा जो आम मामलों को कवर करते हैं। हालांकि, इसका मूलभूत ज्ञान यह है कि मूल रूप से सीपीयू कोर सीधे आई/ओ डिवाइस के रजिस्टरों पर काम नहीं कर सकता है, उन्हें एक बाइट-या यहां तक कि शब्द-आधारित फैशन में पढ़ने और लिखने के अलावा।
1) 68 एचसी 08 श्रृंखला, एक 8-बिट स्वयं निहित माइक्रोकंट्रोलर।
इसमें "बिट सेट" और "थोड़ा स्पष्ट" निर्देश शामिल है। ये, यदि आप मैन्युअल रूप से मैन्युअल रूप से पढ़ते हैं, तो वास्तव में आंतरिक रूप से आंतरिक रूप से एक रीड-संशोधित-लेखन चक्र निष्पादित करते हैं। उनके पास परमाणु संचालन होने का लाभ होता है, क्योंकि एकल निर्देशों के रूप में उन्हें बाधित नहीं किया जा सकता है।
आप यह भी देखेंगे कि वे व्यक्तिगत पढ़ने या लिखने के निर्देशों से अधिक समय लेते हैं, लेकिन नौकरी के लिए तीन निर्देशों का उपयोग करने से कम समय (नीचे देखें)।
2) एआरएम या पावरपीसी, पारंपरिक 32-बिट आरआईएससी सीपीयू (अक्सर उच्च अंत माइक्रोकंट्रोलर में भी पाए जाते हैं)।
इनमें कोई निर्देश शामिल नहीं हैं जो दोनों स्मृति तक पहुंच सकते हैं और एक बार गणना (और/या) कर सकते हैं। आप सी में लिखते हैं:
LBZ r4,r8
ORI r4,r4,#0x40
STB r4,r8
क्योंकि यह कई निर्देश है, यह नहीं है:
*register |= 0x40;
यह folowing विधानसभा में बदल जाता है (इस PowerPC उदाहरण के लिए, r8 रजिस्टर पते शामिल हैं) परमाणु, और इसे बाधित किया जा सकता है। इसे परमाणु बनाना या यहां तक कि एसएमपी-सुरक्षित इस उत्तर के दायरे से बाहर है - इसके लिए विशेष निर्देश और तकनीकें हैं।
3) आईए 32 (x86) और AMD64। आप इन्हें "एम्बेडेड" के लिए क्यों इस्तेमाल करेंगे, मेरे बाहर है, लेकिन वे दो अन्य उदाहरणों के बीच आधे रास्ते के घर हैं।
मैं भूल जाता हूं कि एक एकल-निर्देश-मेमोरी बिट-सेट और x86 पर बिट-साफ़ है या नहीं। यदि नहीं, तो ऊपर आरआईएससी अनुभाग देखें, यह केवल तीन के बजाय केवल दो निर्देश लेता है क्योंकि x86 एक निर्देश में लोड और संशोधित कर सकता है।
मान लीजिए कि ऐसे निर्देश हैं, भी को आंतरिक रूप से लोड करने और स्टोर को स्टोर करने और इसे संशोधित करने की आवश्यकता है। आधुनिक संस्करण आंतरिक रूप से तीन आरआईएससी-जैसे संचालन में निर्देश को तोड़ देंगे।
विचित्रता यह है कि x86 (एचसी 08 के विपरीत) बस मास्टर द्वारा मध्य-लेनदेन में मेमोरी बस पर बाधा डाली जा सकती है, न केवल पारंपरिक सीपीयू इंटरप्ट द्वारा। तो आप इस मामले में, जैसे कि कई मेमोरी चक्रों को पूरा करने के लिए एक निर्देश के लिए मैन्युअल रूप से एक LOCK उपसर्ग जोड़ सकते हैं। हालांकि आप इसे सादा सी से नहीं प्राप्त करेंगे।
धन्यवाद। मैं पावरपीसी का उपयोग कर रहा हूं, और मैंने बस कुछ अलग-अलग हिस्सों को सत्यापित करने के लिए पकड़ा है, और मैं 3 ऑप्स देखता हूं। मैंने सोचा था कि एक स्मृति स्थान के साथ एक मुखौटा एंडिंग/ऑरिंग के लिए एक एकल असेंबली निर्देश था। –
एक कारण अनुभवी डेवलपर्स आरएमडब्ल्यू चक्र स्पष्ट कर सकते हैं जब उचित हो तो संकलक द्वारा अनुकूलन की एक निश्चित डिग्री की अनुमति दें। उदाहरण के लिए, यदि वे पहले से ही सुनिश्चित कर चुके हैं कि कोई रुकावट या अन्य हस्तक्षेप नहीं हो सकता है, तो वे कई रजिस्टरों को लोड कर सकते हैं, उन्हें एक साथ संशोधित कर सकते हैं, और फिर उन्हें बैच में स्टोर कर सकते हैं। यह निर्देशों की एक ही संख्या है, लेकिन सीपीयू इंतजार करने में कम समय व्यतीत करेगा। – Chromatix
मैंने एक प्रोसेसर का उपयोग किया है जिसमें केवल-लिखने वाले रजिस्ट्रार थे, और रैम वेरिएबल में रजिस्टर की एक छाया प्रति रखने की आवश्यकता थी। उन मामलों में, आपको छाया पढ़नी, इसे संशोधित करना, रजिस्टर लिखना और छाया लिखना पड़ा। निश्चित रूप से परमाणु संचालन नहीं, इसलिए आपको इंटरप्ट को भी अक्षम करना होगा। – tomlogic