কর্টেক্স-এম 3 এর সমালোচনা বিভাগসমূহ


10

আমি একটি কর্টেক্স-এম 3-তে সমালোচনামূলক কোড বিভাগগুলি বাস্তবায়নের বিষয়ে কিছুটা ভাবছি যেখানে সময়সীমাবদ্ধতা বা সম্মতিযুক্ত সমস্যার কারণে ব্যতিক্রমগুলি অনুমোদিত নয়।

আমার ক্ষেত্রে, আমি একটি LPC1758 চালাচ্ছি এবং আমার বোর্ডে একটি টিআই সিসি 2500 ট্রানসিভার রয়েছে। সিসি 2500 এর মধ্যে পিন রয়েছে যা আরএক্স বাফার এবং টিএক্স বাফার মুক্ত স্থানের ডেটার জন্য বিঘ্নিত লাইন হিসাবে ব্যবহৃত হতে পারে।

উদাহরণস্বরূপ, আমি আমার এমসিইউর এসআরএমে একটি টিএক্স বাফার রাখতে চাই এবং যখন ট্রানসিভারের টিএক্স বাফারে ফাঁকা জায়গা থাকবে, আমি সেখানে এই তথ্যটি লিখতে চাই। তবে যে রুটিনটি এসআরএএম বাফারটিতে ডেটা রাখে তা অবশ্যই স্পেস-ইন-টিএক্স-বিঘ্নিত দ্বারা বাধা দেওয়া যায় না। সুতরাং আমি যা করতে চাই তা হ'ল এই বাফারটি পূরণ করার এই প্রক্রিয়াটি করার সময় অস্থায়ীভাবে বাধাগুলি অক্ষম করা but

কর্টেক্স-এম 3 এ এটি কীভাবে সেরা হয়?

উত্তর:


11

কর্টেক্স এম 3 "লোড-এক্সক্লুসিভ" (এলডিআরএক্স) এবং "স্টোর-এক্সক্লুসিভ" (এসটিআরএক্স) নামে অভিহিত অপারেশনগুলির কার্যকর জুড়ি (অন্যান্য অনেক মেশিনেও সাধারণ) সমর্থন করে। ধারণাগতভাবে, LDREX অপারেশন একটি লোড সঞ্চালন করে, লোড হয়েছে এমন স্থানটি অন্য কোনও কারণে লিখিত হতে পারে কিনা তা পর্যবেক্ষণ করতে কিছু বিশেষ হার্ডওয়্যারও সেট করে। শেষ এলডিআরএক্স-এর ব্যবহৃত ঠিকানায় একটি স্ট্রাক্স সম্পাদন করা হলে সেই ঠিকানাটি কেবল তখনই লেখা হয় যদি অন্য কোনও কিছু না লিখে থাকে । স্ট্রাক্সের নির্দেশনা যদি স্টোর হয় তবে 0 দিয়ে একটি রেজিস্টার, বা যদি এটি বাতিল করা হয় তবে 1 দিয়ে একটি লোড করবে।

দ্রষ্টব্য যে স্ট্রেক্স প্রায়শই হতাশাবাদী। বিভিন্ন পরিস্থিতিতে রয়েছে যেখানে এটি ঠিক করতে পারে যদি প্রশ্নটির অবস্থানটি স্পর্শ না করা হয় তবে এমনকি দোকানটি সম্পাদন না করার সিদ্ধান্ত নিতে পারে। উদাহরণস্বরূপ, একটি এলডিআরএক্স এবং স্ট্রেক্সের মধ্যে একটি বাধাগুলি স্ট্রেক্সকে ধরে নেওয়া লোকেশনটি আঘাত হানে বলে অনুমান করবে। এই কারণে, সাধারণত LDREX এবং STREX এর মধ্যে কোডের পরিমাণ হ্রাস করা ভাল ধারণা। উদাহরণস্বরূপ, নীচের মতো কিছু বিবেচনা করুন:

ইনলাইন শূন্যস্থান Safe_increment (uint32_t * সংযোজক)
{
  uint32_t new_value;
  করা
  {
    নতুন_মূল্য = __ldrex (সংযোজক) + 1;
  } যখন (__ স্ট্রেক্স (নতুন_মূল্য, সংযোজক));
}

যা এমন কিছুর সংকলন করে:

; ধরুন R0 প্রশ্নে ঠিকানাটি ধারণ করেছে; r1 ট্র্যাশেড
LP:
  ldrex r1, [r0]
  আর 1, আর 1, # 1 যুক্ত করুন
  strex আর 1, আর 1, [আর 0]
  সিএমপি আর 1, # 0; শূন্য না হলে পরীক্ষা করুন
  bne lp
  .. কোড অবিরত

কোডটি বেশিরভাগ সময় কার্যকর করে, এলডিআরএক্স এবং স্ট্রেক্সের মধ্যে তাদের "বিঘ্নিত" করার কিছুই ঘটবে না, সুতরাং স্ট্রেক্স আরও অগ্রগতি ছাড়াই সফল হবে। তবে, এলডিআরএক্স বা এডিডি নির্দেশের সাথে সাথেই যদি কোনও বাধা ঘটে, তবে স্ট্রিএক্স স্টোরটি সম্পাদন করবে না, পরিবর্তে কোডটি [r0] এর (সম্ভবত আপডেট হওয়া) মানটি পড়তে ফিরে যাবে এবং একটি নতুন বর্ধিত মানের গণনা করবে এর উপর ভিত্তি করে

Safe_increment এর মতো ক্রিয়াকলাপ তৈরি করতে LDREX / STREX ব্যবহার করে কেবল সমালোচনামূলক বিভাগই পরিচালনা করা সম্ভব হয় না, তবে অনেক ক্ষেত্রে তাদের প্রয়োজনীয়তা এড়াতেও সম্ভব করে তোলে।


সুতরাং "ব্লক করা" বাধা দেওয়ার কোনও উপায় নেই যাতে তারা আনব্লক হয়ে যাওয়ার পরে তাদের আবার পরিবেশন করা যায়? আমি বুঝতে পারি যে এটি সম্ভব হলেও সম্ভবত একটি অদৃশ্য সমাধান তবে আমি কেবল এআরএম বাধা হ্যান্ডলিং সম্পর্কে আরও জানতে চাই to
এমিল এরিকসন

3
বাধা নিষ্ক্রিয় করা সম্ভব এবং কর্টেক্স-এম 0 তে প্রায়শই এটি করার কোনও ব্যবহারিক বিকল্প নেই। আমি এলডিআরএক্স / স্ট্রাক্স পদ্ধতির ব্যত্যয়গুলি নিষ্ক্রিয় করার চেয়ে পরিষ্কার বলে বিবেচনা করি, যদিও অনেক ক্ষেত্রে স্বীকার করা সত্যই এটি বিবেচ্য নয় (আমি মনে করি প্রতিটি এক চক্র হয়ে শেষ এবং অক্ষম করা এবং পাঁচটি চক্রের জন্য বাধা নিষ্ক্রিয় করা সম্ভবত কোনও বড় বিষয় নয়) । নোট করুন যে কোডটি মাল্টি-কোর সিপিইউতে স্থানান্তরিত করা হলে একটি এলডিআরএক্স / স্ট্রেক্স পদ্ধতির কাজ করবে, অন্যদিকে বাধা নিষ্ক্রিয় করার মত পদ্ধতির কাজ করবে না। এছাড়াও, কিছু আরটিওএসের চালিত কোড হ্রাস করা অনুমতিতে যা বাধা নিষ্ক্রিয় করার অনুমতি নেই।
সুপারক্যাট

আমি সম্ভবত ফ্রিআরটিওএসের সাথে যাব তাই আমি নিজেই এটি করব না তবে আমি যেভাবেই শিখতে চাই। প্রক্রিয়া চলাকালীন যে কোনও বাধা বিঘ্নিত হওয়ার বিপরীতে বর্ণনা করা হয়েছে সে হিসাবে বাধাগুলি নিষ্ক্রিয় করার কোন পদ্ধতিটি ব্যবহার করা উচিত? আমি এগুলি বাতিল করতে চাইলে কীভাবে করব?
এমিল এরিকসন

উপরের একটি উত্তরে বিশ্বাস করা যায় না কারণ সম্পর্কিত কোডটি একটি প্রথম বন্ধনী অনুপস্থিত: while(STREXW(new_value, addr); আপনি যদি আমাদের কোডটি সংকলন না করেন তবে আপনি কী সঠিক বলেছিলেন তা কীভাবে বারণ করতে পারি?

@ টিম: দুঃখিত, আমার টাইপিং নিখুঁত নয়; তুলনার জন্য আমার হাতে লেখা সত্যিকারের কোডটি আমার কাছে নেই, সুতরাং আমি যে সিস্টেমটি STREXW বা __STREXW ব্যবহার করছিলাম তা মনে নেই, তবে একটি সংকলক রেফারেন্স __strex অন্তর্নিহিত হিসাবে তালিকাবদ্ধ করে (STREXW এর বিপরীতে যা সীমাবদ্ধ ৩২-বিট স্ট্রেক্স, __ স্ট্রেইক্স অভ্যন্তরীণ ব্যবহারগুলি সরবরাহ করা পয়েন্টারের আকারের উপর নির্ভর করে একটি স্ট্র্যাক্সবি, স্ট্রেক্স বা স্ট্রেইক্স উত্পন্ন করে)
সুপারক্যাট ২ '

4

মনে হচ্ছে আপনার এমসিইউ সফ্টওয়্যারটিতে আপনার কয়েকটি বৃত্তাকার বাফার বা ফিফো দরকার O পড়ার জন্য এবং লেখার জন্য অ্যারেতে দুটি সূচক বা পয়েন্টার ট্র্যাক করে আপনি হস্তক্ষেপ ছাড়াই একই বাফার অ্যাক্সেস করতে পটভূমি এবং পটভূমি উভয়ই রাখতে পারেন।

অগ্রভাগের কোডটি যে কোনও সময় বিজ্ঞপ্তি বাফারে লিখতে বিনামূল্যে। এটি লেখার পয়েন্টারে তথ্য সন্নিবেশ করে, তারপরে লেখার পয়েন্টারটি বাড়িয়ে তোলে।

পটভূমি (বিঘ্নিত হ্যান্ডলিং) কোড পঠিত পয়েন্টার থেকে ডেটা গ্রহণ করে এবং পড পয়েন্টারটিকে বাড়িয়ে তোলে।

পঠন এবং লেখার পয়েন্টার সমান হলে বাফার খালি থাকে এবং পটভূমি প্রক্রিয়াটি কোনও ডেটা প্রেরণ করে না। বাফার পূর্ণ হলে, অগ্রভাগ প্রক্রিয়াটি আর লিখতে অস্বীকার করে (বা আপনার প্রয়োজনের উপর নির্ভর করে পুরানো ডেটা ওভাররাইট করতে পারে)।

পাঠক এবং লেখকদের ডিকল করতে বিজ্ঞপ্তি বাফার ব্যবহার করে বাধা অক্ষম করার প্রয়োজনীয়তা অপসারণ করা উচিত।


হ্যাঁ, আমি অবশ্যই বিজ্ঞপ্তিযুক্ত বাফার ব্যবহার করতে যাচ্ছি তবে বৃদ্ধি এবং হ্রাস পারমাণবিক ক্রিয়াকলাপ নয়।
এমিল এরিকসন

3
@ এমিল: তাদের হতে হবে না। দুটি পয়েন্টার এবং একটি "অপ্রয়োজনীয়" স্লট সহ একটি ক্লাসিক বিজ্ঞপ্তি বাফারের জন্য, মেমরির লেখাগুলি হ'ল পারমাণবিক এবং কার্যকরভাবে সজ্জিত। পাঠক একটি পয়েন্টারের মালিক, লেখক অন্যটির মালিক, এবং যদিও উভয়ই পয়েন্টারটি পড়তে পারে তবে কেবল পয়েন্টারের মালিক তার পয়েন্টারটি লেখেন। এই মুহুর্তে, আপনার যা দরকার তা হ'ল পারমাণবিক ইন-অর্ডার লিখুন।
জন আর স্ট্রোহম

2

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


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