এভিআর এসইআই নির্দেশনা


13

AVR SEI নির্দেশিকা ( http://www.atmel.com/webdoc/avrassembler/avrassembler.wb_SEI.html ) বাধা সক্ষম করার আগে পরবর্তী নির্দেশনা শেষ করার জন্য অপেক্ষা করে।

আমি যদি এসআরইজে আই পতাকা সেট করতে অন্য নির্দেশনা ব্যবহার করি তবে এটিও কি 1 নির্দেশের অপেক্ষা করবে?

অন্য কথায়: অপেক্ষা কি এসইআই নির্দেশাবলীর কোনও বৈশিষ্ট্য বা স্থিতি রেজিস্টার?

এটি যদি এসইআই নির্দেশাবলীর একটি বৈশিষ্ট্য হয়, তবে SEI নির্বাহকারী চক্রের মধ্যে বা পরবর্তী নির্দেশের সাথে পতাকাটি আসলে কোন মুহুর্তে সেট হয়ে যায়?


এটি দুর্দান্ত প্রশ্ন, তবে এটি পরীক্ষা করা এবং নিশ্চিত হওয়া খুব বেশি কঠিন হওয়া উচিত নয়।
ভোরাক

1
@ ভোরাক আপনি কীভাবে এটি পরীক্ষা করা যেতে পারে তার একটি উদাহরণ দিতে পারেন? এটি নিশ্চিতভাবে আমার গৃহীত উত্তর হবে।
জয়জয় 5'16

1
এটি এভিআর আর্কিটেকচারের প্রয়োগের বৈশিষ্ট্য হতে পারে এবং যেখানে বাধা হ্যান্ডল করা যায়। আইআইআরসি, এভিআর আর্কিটেকচার 3-স্টেজের পাইপলাইন ব্যবহার করেছে। সুতরাং পরবর্তী নির্দেশটি ইতোমধ্যে 'ইন-ফ্লাইট' (যেমন পাইপলাইন পর্যায়ে এক বা আরও) আগে আই ফ্ল্যাগ পরিবর্তন ব্যাঘাতের জন্য যাচাই করতে ব্যবহৃত হতে পারে। আমি দীর্ঘ সময় সন্ধান করিনি, তবে আমি মনে করি না যে AVR আর্কিটেকচারের ডিজাইনাররা নিজেরাই অত্যধিক সীমাবদ্ধ থাকবেন। সুতরাং, পাইপলাইনের প্রথম ধাপে নির্দেশের জন্য বাধা পরীক্ষা করা, এবং পরবর্তী নির্দেশের আগে নয় (দ্বিতীয় পর্যায়ে) তাদের কিছুটা নমনীয়তা দেয়।
gulmermer

উত্তর:


8

পরীক্ষামূলক ফলাফল!

অন্য উত্তরগুলি চিন্তাশীল এবং যথাযথ যুক্তিযুক্ত হলেও এগুলি সমস্তই অসম্পূর্ণ বা কেবল অনুমানযোগ্য। ডকুমেন্টেশন যেখানে অস্পষ্ট, সেখানে আমাদের অবশ্যই পরীক্ষা-নিরীক্ষা করা উচিত এবং আমাদের প্রতিটি ক্ষেত্রেই পরীক্ষা করতে হবে।

এই প্রশ্নটি একটি চূড়ান্ত উত্তরের প্রাপ্য, সুতরাং আসুন একটি AVR খুঁজে বের করুন এবং কিছু বিট সেট করা শুরু করুন!

কার্যপ্রণালী

পরীক্ষা করার জন্য, আমি একটি সামান্য আরডিনো (এটিএমইজিএ 328 পি) প্রোগ্রাম তৈরি করেছি যা ...

  1. কোনও আইএসআর সেটআপ করুন যা কখনই ফিরে আসবে না ( while (1))
  2. আইএসআরকে এমন একটি উত্সকে বরাদ্দ করা হয়েছে যা আমি সফ্টওয়্যারটিতে ট্রিগার করতে পারি ( INT0কম চলছে)
  3. অক্ষম বাধা
  4. সক্ষম এবং ব্যত্যয় ঘটাচ্ছে যাতে এটি মুলতুবি থাকবে

আমি একটি পরীক্ষার বিছানা ব্যবহার করেছি যা বাধা সক্ষম করার পরে একক নির্দেশে একটি এলইডি চালু করবে। পরীক্ষার বিছানায় বিঘ্ন সক্ষম করার বিভিন্ন উপায়ে চেষ্টা করে এবং এলইডি পরীক্ষা করে, আমি বলতে পারি যে সক্ষম করার নির্দেশের পরে নির্দেশটি কার্যকর হয়েছিল কি না।

যদি এলইডি না আসে, তবে আমি জানি যে বাধা সক্ষম করার পরে তত্ক্ষণাত আইএসআর কার্যকর করা হয়েছিল (এবং লকড)।

যদি এলইডিটি আসে, তবে আমি জানি যে পরবর্তী নির্দেশটি আইএসআর ডাকার আগেই কার্যকর করতে দেওয়া হয়েছিল।

ফলাফল

SEI নির্দেশ (বেস কেস)

কোড:

sei

ফলাফল: LED চালু। নিম্নলিখিত নির্দেশনা কার্যকর করা হয়েছে

OUT নির্দেশ

কোড:

in  r16,0x3f   // Get SREG
ori r16,128    // Set I bit 
out 0x3f,r16   // Save back to SREG

ফলাফল:

নেতৃত্বে. নিম্নলিখিত নির্দেশনা কার্যকর করা হয়েছে

ST নির্দেশ

কোড:

   clr r29        // Clear Y high byte
   ldi r28,0x5f   // Set Y low byte to point to SREG
   ld r16, Y      // Get SREG
   ori r16,128    // Set I bit 
   st Y,r16       // Put SREG

ফলাফল:

নেতৃত্বে. নিম্নলিখিত নির্দেশনা কার্যকর করা হয়েছে

উপসংহার!

প্রশ্ন: অপেক্ষা কি এসইআই নির্দেশাবলীর কোনও বৈশিষ্ট্য বা স্থিতি রেজিস্টার?

উত্তর: মনে হচ্ছে পরিবর্তন Iমধ্যে বিট SREGথেকে একটি হল 0একটি থেকে 1নিম্নলিখিত নির্দেশ পরবর্তী চালানো এমনকি যদি সেখানে একটি মুলতুবি বিঘ্ন, কি নির্দেশ বিট সেট করতে ব্যবহৃত হয় নির্বিশেষে অনুমতি দেবে।

মন্তব্য

এটি আসলে প্রচুর জটিলতার সাথে একটি খুব আকর্ষণীয় প্রশ্নে পরিণত হয়েছিল। আপনি যদি আগ্রহী হন তবে তিনি বিশদটি বিস্তারিতভাবে দেখুন ...

http://wp.josh.com/2016/01/05/different-ways-to-set-i-bit-in-avr-sreg-besides-sei/


2
স্পেসিফিকেশনটি অস্পষ্ট হলে, "অভিজ্ঞতামূলক ফলাফল" নিয়ে সমস্যা হয়। কেবলমাত্র আপনি পরীক্ষিত হার্ডওয়ারের নির্দিষ্ট অংশটি একটি নির্দিষ্ট উপায়ে কাজ করে, তার অর্থ এই নয় যে অন্যান্য অংশগুলি সেভাবে কাজ করবে। এতে স্পেসিফিকেশন পরিবর্তন না হওয়ায় এটমেল বাস্তবায়ন পরিবর্তন করতে পারে ber সুতরাং, "যেখানে ডকুমেন্টেশনটি অস্পষ্ট, ..." এটি ঠিক রয়ে গেছে, পরীক্ষা-নিরীক্ষার পরেও এটি এখনও অস্পষ্ট।
গলবারার

@gulmer আমি 100% সম্মত। যিনি প্রযোজনায় অনাবৃত বৈশিষ্ট্যগুলি ব্যবহার করেন তিনি দুঃখী হতে বাধ্য। এখনও একটি আকর্ষণীয় অভিজ্ঞতামূলক প্রশ্ন (এবং উত্তর), এবং সম্ভবত এক-অফ ব্যক্তিগত প্রকল্পের উপর নির্ভর করতে ঠিক আছে।
bigjosh

হ্যাঁ, আপনি একটি চিত্তাকর্ষক তদন্ত করেছেন।
gulmermer

4

ডকুমেন্টেশন থেকে আমার বোঝা যাচ্ছে যে seiনির্দেশনাটি সম্পাদন করা এসআরইজি-এর আই বিটটিতে সরাসরি 1 লিখার চেয়ে আলাদা নয়। নির্দেশের সুবিধাটি 1<<Iহ'ল এসআরইজি পরিবর্তন করার জন্য আপনাকে প্রথমে একটি কার্যনির্বাহী রেজিস্টারে কোনও মান লোড করতে হবে না , ফলে এটি সময় সাশ্রয় করে।

বিস্তারিতভাবে ব্যবহার করে sei:

sei ; One cycle

বিটটি ব্যবহার করে সেট করা sbi(কেবলমাত্র এসআরইজি যদি নিবন্ধকের মানচিত্রের 32 টি বাইটে থাকে তবে এটি কাজ করবে তবে মনে হয় বেশিরভাগ ক্ষেত্রে যদি এটি না হয় তবে))

sbi SREG,7 ; Two cycles

সরাসরি এসআরজি-তে আমার কাছে লিখিত:

in  r24,SREG ;
ori r24,0x80 ;
out SREG,r24 ; Three cycles

Iবিট যত তাড়াতাড়ি SREG মধ্যে নির্ধারণ করা উচিত seiনির্দেশ (অথবা sbiবা out) সমাপ্ত হবে। যাইহোক, পরবর্তী নির্দেশ সম্পূর্ণ না হওয়া পর্যন্ত কোনও বিচারাধীন বাধা হ্যান্ডল করা হবে না - বিট সেট করা হবে, তবে বাধাগুলি সক্ষম হয়ে উঠতে এটি একটি অতিরিক্ত চক্র গ্রহণ করে। কারণ কোনও বিঘ্ন মাঝারি নির্দেশকে পরিচালনা করা যায় না এবং কিছু নির্দেশাবলী কার্যকর করতে একাধিক চক্র গ্রহণ করে, তারা একটি নির্দেশ হিসাবে সক্ষম হওয়ার জন্য সময়টি নির্দিষ্ট করে। কোডের সমস্ত সংস্করণের ক্ষেত্রে এটি হওয়া উচিত - উদাহরণস্বরূপ উপরের প্রতিটিটি কোনও নির্দেশকে বিলম্বিত করে।


কিছুটা অনুসন্ধানের পরে, আমি এই থ্রেডটি আরডুইনো ফোরামে পেয়েছি যাতে আচরণটি যাচাই করার জন্য বেশ কয়েকটি বিভিন্ন পরীক্ষা করা হয়েছিল। আমি উপরে যা বলেছিলাম তাতে এটি একমত বলে মনে হচ্ছে।

তদুপরি, এই থ্রেড অনুসারে, Iপতাকাটি যদি ইতিমধ্যে সেট করা থাকে, তবে কোনও বিঘ্নিত হওয়ার কোনও বিলম্বিত প্রতিক্রিয়া নেই seiযার দ্বারা বোঝা যায় যে বিলম্বিত প্রতিক্রিয়াটি নিজেই নির্দেশের দ্বারা নয়, বরং Iপতাকা দ্বারা নিয়ন্ত্রিত অভ্যন্তরীণ হার্ডওয়্যারে - কোন অপারেশন যা SREG মধ্যে পতাকা পরিবর্তন তাই হয়, এটা হতে seiবা outবা stsথাকবে ঠিক একই আচরণ।


সুতরাং অপারেশনটি বিলম্ব করার কোনও দিক নেই, SEI নির্দিষ্ট কিন্তু আউট নয়, যা নিম্নলিখিত নির্দেশাবলী সম্পূর্ণ করতে দেয়?
ব্রায়ান ড্রামমন্ড

আপনার দ্বিতীয় উদাহরণের ক্ষেত্রে, কখন একটি মুলতুবি বাধা দেওয়া হয়? প্রথমটির মতো চক্রের বিলম্ব কি আছে?
জয়জয়

@ জয়জয় আমার আপডেট দেখুন।
টম কার্পেন্টার

1
দ্রষ্টব্য যে কোনও কোডে বিট SBIসেট করতে ব্যবহার করা যাবে না যা সম্ভবত এটি বাস্তব জীবনে পরীক্ষিত হয়নি কারণ এটি এমনকি একত্রিত হবে না। শুধুমাত্র উপর কাজ করতে পারে নিম্ন 32 রেজিস্টার এবং SREG স্লট 63. এISREGSBI
bigjosh

@ বিজেজোশ এসবিআইয়ের উদাহরণটি আমি পরে ভেবেছিলাম - outএটিই ছিল আমি মূলত ব্যবহার করছি। আমি ভেবেছিলাম আমি এমন একটি এভিআর (একটি এটিটিনি হতে পারে) পেরিয়ে এসেছি যার নীচে 32 টি রেজিস্টারে এসআরইজি রয়েছে, তবে আমি এটি কল্পনাও করতে পারি।
টম কার্পেন্টার

1

আইএমএইচও এসআরজি-তে লেখার জন্য এখনও বিলম্ব করে না 1 টি নির্দেশের এই জাতীয় পরীক্ষা করা যেতে পারে (সিউডোকোড):

ISR() { PORTA = 0; while(1); }
main() 
{
    cli();
    DDRA = 0xff;
    configure_isr_for_level_interrupt_that_will_trigger_immediately();
    SREG = 0xff;
    cli();
    PORTA = 0xff;
    while(1);
}

দুর্ভাগ্যক্রমে আমার এটি করার সময় নেই :(


0

এটি যা বলে তা নয়। নথি বলছে

এসইআই অনুসরণের নির্দেশাবলী যে কোনও মুলতুবি বিঘ্নের আগে কার্যকর করা হবে।

এটি পরবর্তী নির্দেশের জন্য অপেক্ষা করে না। পতাকাটি তাত্ক্ষণিক সেট হয়ে যাওয়ার সাথে সাথে এটি পড়েছি তবে সক্ষম হওয়া সত্ত্বেও পরবর্তী নির্দেশনা কার্যকর না হওয়া পর্যন্ত কোনও বিঘ্ন হস্তান্তর করা হবে না।


এটি সমস্ত সত্য, তবে আমার প্রশ্নটি: এই আচরণটি কি এসইআইয়ের সাথে নির্দিষ্ট?
জয়জয়

@jayjay আমি সন্দেহ এই নির্দেশ পাইপলাইন দৈর্ঘ্য কারণে
crasic
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.