মাইক্রোকন্ট্রোলারদের জন্য আরটিএসের জন্য বার্তার সারি


10

আমি বর্তমানে মাইক্রোকন্ট্রোলারদের জন্য একটি আরটিওএস লিখছি। পুরো জিনিসটি C ++ 11 এ লিখিত আছে - যদি কেউ আগ্রহী হয় এবং সংগ্রহস্থলের লিঙ্কটি নীচে রয়েছে।

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

আমার সাধারণ "সমস্যা" হ'ল আমি এই দুটি ইন্টারফেসের মধ্যে সিদ্ধান্ত নিতে পারি না:

( std::chrono::duration<Rep, Period>একটি টেম্পলেটেড টাইপ, আমি স্পষ্টতার জন্য টেম্পলেট বয়লারপ্লেট বাদ দিই)

প্রথম সংস্করণ:

template<typename T>
class FifoQueue
{
public:
    ...
    template<typename... Args>
    int tryEmplaceFor(std::chrono::duration<Rep, Period>, Args&&... args);
    int tryPopFor(T&, std::chrono::duration<Rep, Period>);
    int tryPushFor(const T&, std::chrono::duration<Rep, Period>);
    int tryPushFor(T&&, std::chrono::duration<Rep, Period>);
    ...
}

দ্বিতীয় সংস্করণ:

template<typename T>
class FifoQueue
{
public:
    ...
    template<typename... Args>
    int tryEmplaceFor(std::chrono::duration<Rep, Period>, Args&&... args);
    int tryPopFor(std::chrono::duration<Rep, Period>, T&);
    int tryPushFor(std::chrono::duration<Rep, Period>, const T&);
    int tryPushFor(std::chrono::duration<Rep, Period>, T&&);
    ...
}

( ...Untilপ্রত্যয় সহ এই ফাংশনগুলির একটি দ্বিতীয় সেট থাকবে - এগুলি সময়কাল পরিবর্তে টাইমপয়েন্ট ব্যবহার করবে)

প্রথম সংস্করণটি শেষ প্যারামিটার হিসাবে টাইমআউট হওয়ার "সাধারণ স্টাইল" অনুসরণ করে (উদাহরণগুলি std::condition_variableমাইক্রোকন্ট্রোলারগুলির জন্য কোনও আরটিওএসে পসিক্স বার্তা সারি , সাধারণ সারি)। সমস্যাটি হ'ল ট্রাইএম্পলেসফোর () ফাংশনের জন্য শেষ হিসাবে এই সময়সীমা যুক্ত হওয়া সম্ভব নয়, কারণ বৈকল্পিক টেম্পলেটগুলির ক্ষেত্রে "জ্ঞাত" আর্গুমেন্ট অবশ্যই প্রথম (*) হওয়া উচিত। সুতরাং দ্বিতীয় সংস্করণটি "সামঞ্জস্যপূর্ণ" - টাইমআউট সহ সমস্ত ফাংশনের প্রথম আর্গুমেন্ট হিসাবে টাইমআউট হয়। এই বৈকল্পিকটির সম্ভবত কার্যকারিতাটির প্রথম আর্গুমেন্ট হিসাবে টাইমআউট হওয়ার প্রথম উদাহরণ হওয়ার সম্ভবত একটি স্পষ্ট সমস্যা রয়েছে।

কোন ইন্টারফেসটি ওএসকে আরও ভাল পরিবেশন করবে:

  • শেষ আর্গুমেন্ট হিসাবে সময়সীমা থাকার মান প্রতিষ্ঠিত (ব্যতীত tryEmplaceFor()এবং tryEmplaceUntil()- এটি প্রথম যুক্তি (*) হতে হবে)?
  • ধারাবাহিকতা - টাইমআউটটি প্রথম যুক্তি হিসাবে পছন্দ করবেন?

(*) - আমি জানি যে প্রযুক্তিগতভাবে আমার শেষ আর্গুমেন্ট হিসাবে সময়সীমা থাকতে পারে tryEmplaceFor()এবং tryEmplaceUntil()তবে আমি এ জাতীয় সরল দৃশ্যের জন্য এই জাতীয় টেমপ্লেট যাদুটি ব্যবহার করা এড়াতে চাই - শেষ যুক্তিটি পেতে কেবল এই সমস্ত পুনরাবৃত্তিমূলক ইনস্ট্যান্টেশনগুলি করা কিছুটা ওভারকিল বলে মনে হয়, বিশেষত যখন আমি ত্রুটিগুলি সংকলকটি দেখায় যখন ব্যবহারকারীরা কিছু ভুল করে ...



প্রথম এবং দ্বিতীয় সংস্করণের মধ্যে পার্থক্য কী? দয়া করে হাইলাইট করুন।
জেবিআরউইলকিনসন

1
পর্যবেক্ষণ: সবাই পসিক্সকে ভালভাবে জানে না যে সময় স্থান নির্ধারণের দ্বারা বিরক্ত হওয়ার জন্য, তবে আপনার ইন্টারফেসটি ব্যবহার করা সবাই অসামঞ্জস্যপূর্ণ এপিআই দ্বারা হতাশ হবেন। আমি # 2 ভোট দিই।
জে ট্রানা

উত্তর:


0

(দুর্ভাগ্যক্রমে) এবং মন্তব্যগুলি মুছে ফেলা একটি উত্তর দ্বারা প্রস্তাবিত হিসাবে, আমি "ধারাবাহিকতা" লাইনটি অনুসরণ করেছি (দ্বিতীয় উপস্থাপিত রূপটি) - সবকটিতে "চেষ্টা করুন ... জন্য" এবং "চেষ্টা করুন ..." সময়সীমা নির্ধারণ করে (সময়কাল বা সময় বিন্দু) প্রথম যুক্তি।

এটি বর্তমান পর্যায়ে কোড - লিঙ্ক

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