PIC मेमोरी मैप को समझने में कुछ मदद चाहिए


9

कुछ पृष्ठभूमि। मैं विभिन्न प्रकार के चित्रों को प्रोग्राम करने के लिए PicKit2 के साथ MPLABx का उपयोग करता हूं। फिलहाल इसकी 16F887 है। मैं हाई-टेक PICC लाइट टूल चेन से चिपके रहने की कोशिश करता हूं लेकिन मैं इस बात से दुखी हो रहा हूं कि कुछ चीजें कैसे इकट्ठी होती हैं। ऑपरेशन जो तेजी से होना चाहिए (8Mhz पर 500ns निर्देश चक्र को देखते हुए) को पूरा करने के लिए 20us तक ले जा रहे हैं। इसलिए मैंने इससे निपटने के लिए अपना खुद का ASM कोड डालना शुरू कर दिया है।

हालाँकि, मुझे पृष्ठ 20 पर डेटाशीट में दिए गए मेमोरी मैप को समझने में कठिनाई हो रही है ।

कार्यक्रम की स्मृति 0005h से शुरू होती है। हालाँकि पेज 23 उदाहरण के लिए पोर्ट ए जैसे विशेष प्रयोजन रजिस्टर के फ़ाइल पते दिखाता है। पोर्ट ए का पता "05h" के रूप में दिखाया गया है।

मैं उलझन में हूं कि मेमोरी लोकेशन 0005h, और 05h पर स्थित विशेष प्रयोजन रजिस्टर में अंतर कैसे किया जाए। मैं विशेष प्रयोजन रजिस्टर का संदर्भ कैसे दूं?

मैं पुराने hc11 चिप्स के लिए बहुत व्यापक कोडांतरक प्रोग्रामिंग किया है, लेकिन यह PIC asm कोडिंग में मेरा पहला उद्यम है। यहाँ किसी भी मदद की सराहना की जाएगी।

जवाबों:


8

PIC का उपयोग "हार्वर्ड आर्किटेक्चर" कहा जाता है, जिसका अर्थ है कि इसमें निर्देशों और डेटा के लिए अलग-अलग पता स्थान हैं।

क्या कोई पता एक रजिस्टर को संदर्भित करता है या एक निर्देश उस संदर्भ पर निर्भर करता है जिसमें इसका उपयोग किया जाता है।

खंड 2.1 "प्रोग्राम मेमोरी ऑर्गनाइजेशन" में आरेख प्रोग्राम मेमोरी या इंस्ट्रक्शन एड्रेस स्पेस के बारे में हैं। खंड 2.2 "डेटा मेमोरी संगठन" में आरेख रजिस्टर और विशेष फ़ंक्शन रजिस्टर, या डेटा मेमोरी एड्रेस स्पेस के बारे में हैं।


तो अगर मैंने कहा "MOVWF 0x0005", PIC को पता होगा कि मैं डेटा मेमोरी में एड्रेस 0x0005 का संदर्भ दे रहा हूं, न कि प्रोग्राम स्पेस का?
माइकल 12

@ माइकल: हाँ। निर्देश में पता प्रोग्राम या डेटा मेमोरी को संदर्भित करता है या नहीं, यह निर्देश पर निर्भर करता है। यह प्रत्येक ओपकोड के लिए वर्णित है। मूल रूप से, यदि यह MOVWF की तरह डेटा से संबंधित है, तो यह डेटा मेमोरी को एक्सेस करेगा। यदि यह GOTO की तरह प्रोग्राम एड्रेस से निपटता है, तो यह प्रोग्राम मेमोरी को एक्सेस करेगा।
ओलिन लेट्रोप

धन्यवाद। मुझे लगता है कि मैं hc11 का उपयोग करने के लिए कोडांतरक कर रहा था वॉन न्यूमैन आर्क था। जब मैं सिर्फ सीख रहा था, तो मुझे अक्सर अपना निर्देश कोड लिखने की समस्या होती थी। फिर से धन्यवाद।
माइकल

3

डेव ने क्या कहा, लेकिन मैं यह भी बताना चाहता हूं कि प्रोग्राम मेमोरी 0 से शुरू होती है, न कि 5. एक रीसेट पर, प्रोसेसर पीसी को 0 पर सेट करता है और चलना शुरू करता है। एक रुकावट पर, प्रोसेसर प्रभावी रूप से 4 को कॉल करता है और वैश्विक रुकावट को कम करता है। प्रोग्राम मेमोरी लोकेशन 5 विशेष नहीं है, इसके अलावा यदि आप एक इंटरप्ट रूटीन रखते हैं तो यह इंटरप्ट रूटीन का दूसरा निर्देश होगा।


हाँ जो समझ में आ रहा है। मेरा मतलब था 5 पहला जेनेरिक इंस्ट्रक्शन एड्रेस है।
माइकल

@ माइकल: नहीं, ऐसा नहीं है। जैसा कि मैंने कहा, प्रोग्राम मेमोरी लोकेशन के बारे में वास्तव में कुछ खास नहीं है। लेबल पहला जेनेरिक इंस्ट्रक्शन एड्रेस इसके लिए कोई मतलब नहीं रखता है। पहला निर्देश पता 0 है, और 4 थोड़ा विशेष है जो बीच में आने के कारण भी है। बाकी वास्तव में विशेष नहीं हैं, और "सामान्य" इस संदर्भ में कोई मतलब नहीं है।
ओलिन लेट्रोप

ठीक है, इसके पहले गैर-रीसेट, बिना रुकावट वेक्टर पते के बारे में कैसे? मैं जो कह रहा हूं वह समझ रहा हूं कि आपका कहना क्या है।
माइकल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.