2011-11-17 8 views
6

सीरियल प्रतिलिपि क्या है? क्या यह गहरी प्रतिलिपि और उथले-प्रति से अलग है?धारावाहिक प्रति क्या है? और यह इस तरह क्यों लागू किया गया है?

Duff's device तहत विकी प्रविष्टि के अनुसार, यह पारंपरिक रूप के रूप में कार्यान्वित किया जाता है:

do {    //count > 0 assumed 
    *to = *from++; //Note that the 'to' pointer is NOT incremented 
} while(--count > 0); 

और फिर यह कह

ध्यान दें कि to वृद्धि नहीं है, क्योंकि गूंथा हुआ आटा पर कॉपी किया गया था एक नोट बना देता है, एक एकल मेमोरी-मैप आउटपुट रजिस्टर।

मुझे यह नोट वास्तव में समझ में नहीं आया।

यदि to पॉइंटर बढ़ता नहीं है, तो लूप का बिंदु क्या है?

*to = from[count-1]; //does it not do the same thing? 

मुझे लगता है यह धारावाहिक नकल की परिभाषा के साथ कुछ करने के लिए है कि: तो ऐसा क्यों है के रूप में कार्यान्वित किया जाता है।

हम to के लिए मेमोरी आवंटित कैसे कर सकते हैं ताकि लूप कुछ अंतर करे?

+0

शायद फीफो बफर के लिए एक प्रति है। उदाहरण के लिए। एक डिवाइस के लिए एक हार्डवेयर बफर। – neagoegab

उत्तर

9

ऐसी प्रतिलिपि का बिंदु यह है कि यह सामान्य स्मृति के लिए नहीं बल्कि एक धारावाहिक रजिस्टर के लिए किया जाता है।

तो, प्रत्येक बार जब रजिस्टर (to) के पते पर लिखा जाता है, तो रजिस्टर से जुड़े हार्डवेयर कुछ सीरियल लिंक पर बिट्स भेजते हैं, या किसी अन्य हार्डवेयर के लिए उन्हें कतार पर धक्का देते हैं साथ सौदा करने के लिए।

आमतौर पर आप इस तरह के रजिस्टर पते से भी नहीं पढ़ सकते हैं, इसलिए वे सामान्य memory से बहुत अलग हैं, और हार्डवेयर के एक विशेष टुकड़े के लिए एक इंटरफ़ेस के रूप में सबसे अच्छा विचार है जो स्मृति स्मृति में स्थित होता है।

4

http://en.wikipedia.org/wiki/Memory-mapped_I/O#Example

कुछ प्लेटफार्मों विशेष पतों कि जब आप से पढ़ने/यह करने के बारे में है, प्रणाली में कुछ आई/ओ प्रदर्शन करेंगे। उदाहरण के लिए, to एक पता हो सकता है जो लिखे जाने पर स्पीकर को नियंत्रित करता है। उस स्थिति में, लूप होगा, उदा। ध्वनि चलाने में सक्षम हो, जबकि *to = from[count-1]; कोई उपयोगी आउटपुट नहीं देगा।

+0

मैंने इसे समझना शुरू कर दिया। क्या आप इस पर और विस्तार से बता सकते हैं? – Nawaz

2

to सूचक यहां "विशेष" है। कुछ हार्डवेयर पर आप आईओ पोर्ट्स को विशेष मेमोरी क्षेत्रों में लिखकर एक्सेस कर सकते हैं। यदि आप आईओ पोर्ट पर थोड़ा सा पैटर्न भेजना चाहते थे, जहां पैटर्न पहले से ही स्मृति में था, तो यह वही चीज है जो आप करेंगे।

प्रत्येक लिखने के लिए to आम तौर पर आईओ पोर्ट से आउटपुट को बदलने का कारण बनता है। यह पैटर्न पर पुनरावृत्त करने और इसे "विशेष" स्मृति में लिखने के लिए है।

आप इस तरह के "विशेष" मेमोरी तक पहुंच कैसे प्राप्त करते हैं, यह बहुत ही मंच और कार्यान्वयन विशिष्ट है। कभी-कभी यह हमेशा एक निश्चित पते पर लिखने का एक प्रश्न है - आम तौर पर कुछ प्लेटफ़ॉर्म हेडर संकलन समय पर आपके लिए उपलब्ध जानकारी को बनाने के लिए #define या इसी तरह प्रदान करता है। कभी-कभी एक सिस्टम कॉल होता है जिसे आपको उस विशेष डिवाइस को संबोधित करने की आवश्यकता होती है जिसमें आप रुचि रखते हैं।