অ্যাসিঙ্ক্রোনাস ফাংশন আরডিনো স্কেচে কল করে


14

একটি আরডুইনো স্কেচে লুপের মধ্যে অ্যাসিনক্রোনাস ফাংশন কল করার কোনও উপায় আছে কি? HTTP সার্ভারের মাধ্যমে অনুরোধগুলি শুনতে এবং তাদের অবরুদ্ধকরণ পদ্ধতিতে প্রক্রিয়া করা পছন্দ করে ।


1
আপনি যদি সি ++ শিক্ষানবিস না হন তবে কোসা লাইব্রেরিতে ( github.com/mikaelpatel/Cosa ) একবার দেখে নিতে পারেন । এটি আরও উন্নত করার জন্য এটি আরডুইনো গ্রন্থাগারের সম্পূর্ণ পুনর্লিখন: ওওপি এবং সাধারণত বাধা-চালিত। আমি মনে করি তারা HTTP সমর্থন করে তবে আমি এখনও সেই অংশটি চেক করি নি।
jfpoil ব্যাখ্যা

উত্তর:


11

হ্যা এবং না. আপনি যা করতে চান তা সম্পর্কে আপনি অস্পষ্ট। আমি এটিকে কয়েকটি আলাদা বিভাগে তৈরি করেছি (মূলত সেন্সর ডেটা পড়ার উপর দৃষ্টি নিবদ্ধ করা ... এটি সমস্ত কিছুর জন্য প্রযোজ্য তবে আমি যে প্রসঙ্গে ব্যবহার করছি):

টপিক

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

এটি এইচটিটিপি দিয়ে অর্কেস্টেট করা কঠিন হবে, বিশেষত যেহেতু আপনাকে তৈরি করতে হবে

বিলম্ব

স্কেচ স্টল করার একটি সাধারণ উপায় হ'ল বিলম্বের ব্যবহার। এটি প্রধান লুপে, যদি একটি বিবৃতি এবং millis()ফাংশন যা একটি সময় (একটি ঘড়ির সময় নয়, বরং আরডুইনো শুরু হওয়ার পরে সময় থেকে) ব্যবহার করে সমাধান করা যায়। আপনি সেন্সর ডেটা পোল করতে লুপের মধ্যে একটি লুপও করতে পারেন।

millis()পদ্ধতির বিষয় আছে যা স্টল পুরো প্রোগ্রাম কারণ সাথে ভাল কাজ করবে না (অর্থাত আরো বিলম্ব বা লুপ যে গত সময় একটি লক্ষণীয় পরিমাণ)। নোট করুন যে 100 মিমি আইআইআরসি হ'ল কোনও ইউআইকে অল্প মনে হয় না এমন সাধারণ সময়।

ব্যাঘাত

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


আপনার উদাহরণ হিসাবে, থ্রেডিং বিভাগটি সর্বাধিক প্রযোজ্য হবে। এই বিষয়টি বেশ অস্পষ্ট, সুতরাং আপনাকে কয়েকটি জিনিস নিয়ে পরীক্ষা-নিরীক্ষা করতে হবে এবং কাজ করে এমন কিছু খুঁজে বের করতে হবে।


3

আমি অন্য দিন খেলার মাঠে টাস্ক শিডিয়ুলারের জন্য কিছু কোড পোস্ট করেছি , আপনি একটি উঁকি নিতে চাইতে পারেন, সম্ভবত আপনি এটি আপনার প্রয়োজনের সাথে খাপ খাইয়ে নিতে পারেন।

আরডুইনোর প্রসেসর সহজাতভাবে একক থ্রেডযুক্ত এবং বহু-টাস্ক করতে পারে না। যেমনটি উল্লেখ করা হয়েছে যে মাল্টি-টাস্কিংয়ের মায়া তৈরির উপায় রয়েছে। অ্যানোনোমাস পেঙ্গুইন তাদের বেশ ভালভাবে আঘাত করেছে।

এছাড়াও টাইমারঅন পরীক্ষা করে দেখুন (এটি সম্ভবত আরও ভাল;)


টাইমারঅন একটি খারাপ ধারণা কারণ এটি কেবলমাত্র এআরআর ভিত্তিক আরডুইনোসের সাথে কাজ করে। উদাহরণস্বরূপ আমার ওয়েমোস ডি 1 আর 1 কাজ করে না
ভাইচাস্লাভ গেরচিকভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.