- ملٹی ٹاسکنگ کیا ہے؟
- ارڈینو میں تاخیر () کو کیوں چھوڑیں؟
- ملیس () کیوں استعمال کریں؟
- ضروری اجزاء
- سرکٹ ڈایاگرام
- ملٹی ٹاسکنگ کے لئے پروگرامنگ اردوینو یو این او
multitasking کی ایک یا زائد پروگراموں بیک وقت چلا سکتے ہیں جہاں ایک انقلاب کی کارکردگی، لچک، ملائمیت اور پیداوری بڑھاتا ہے جس کو کمپیوٹر وجہ سے ہے. ایمبیڈڈ سسٹم میں ، مائکروکونٹرولر ملٹی ٹاسکنگ کو بھی سنبھال سکتے ہیں اور موجودہ ہدایات کو روکنے کے بغیر بیک وقت دو یا زیادہ کام انجام دیتے ہیں۔
یہاں اس ٹیوٹوریل میں ہم سیکھیں گے Arduino کے multitasking کی کارکردگی کس طرح کے ساتھ Arduino کے Millis اس تقریب. عام طور پر آرڈینو میں ایک تاخیر () فنکشن کا استعمال ایل ای ڈی بلنکنگ جیسے وقتا فوقتا کے لئے کیا جاتا ہے لیکن یہ تاخیر () فنکشن کچھ خاص وقت کے لئے پروگرام کو روکتی ہے اور دوسرے کاموں کو انجام دینے کی اجازت نہیں دیتی ہے۔ لہذا یہ مضمون اس بات کی وضاحت کرتا ہے کہ ہم بیک وقت ایک سے زیادہ کام انجام دینے اور اریڈینو کو ملٹی ٹاسکنگ کنٹرولر بنانے کے ل delay کس طرح تاخیر () فنکشن کے استعمال سے بچ سکتے ہیں اور اسے ملیس () سے تبدیل کرسکتے ہیں ۔ تفصیل میں جانے سے پہلے آئیے ملٹی ٹاسکنگ کو کم کرنے کے ساتھ شروع کریں۔
ملٹی ٹاسکنگ کیا ہے؟
ملٹی ٹاسک کرنے کا مطلب صرف ایک ہی وقت میں ایک سے زیادہ ٹاسک یا پروگرام کو ایک ساتھ انجام دینا ہے۔ تقریبا تمام آپریٹنگ سسٹم میں ملٹی ٹاسکنگ کی خاصیت ہے۔ اس قسم کے آپریٹنگ سسٹم کو MOS (ملٹی ٹاسک آپریٹنگ سسٹم) کے نام سے جانا جاتا ہے۔ ایم او ایس موبائل یا ڈیسک ٹاپ پی سی آپریٹنگ سسٹم ہوسکتا ہے۔ کمپیوٹرز میں ملٹی ٹاسکنگ کی عمدہ مثال یہ ہے کہ جب صارفین ایک ہی وقت میں ای میل ایپلی کیشن ، انٹرنیٹ براؤزر ، میڈیا پلیئر ، گیمز چلاتے ہیں اور اگر صارف ایپلی کیشن کو استعمال نہیں کرنا چاہتے ہیں تو وہ بیک گراؤنڈ میں چلتا ہے۔ آخر صارف ان تمام ایپلی کیشنز کو بیک وقت استعمال کرتا ہے لیکن او ایس اس تصور کو کچھ مختلف سمجھتا ہے۔ آئیے اس پر تبادلہ خیال کریں کہ او ایس ملٹی ٹاسکنگ کا انتظام کس طرح کرتا ہے۔
جیسا کہ تصویر میں دیکھا گیا ہے ، سی پی یو وقت کو تین مساوی حصوں میں تقسیم کرتا ہے اور ہر ایک کام / درخواست کے لئے ہر حصہ تفویض کرتا ہے۔ زیادہ تر سسٹم میں ملٹی ٹاسکنگ اسی طرح کی جاتی ہے۔ ارڈینو ملٹی ٹاسکنگ کے لئے یہ تصور قریب قریب یکساں ہوگا ، سوائے وقت کی تقسیم تھوڑی مختلف ہوگی۔ چونکہ اردوینو کم فریکوینسی میں چلتا ہے اور رام کا موازنہ لیپ ٹاپ / موبائل / پی سی سے ہوتا ہے لہذا ہر کام کو دیا جانے والا وقت بھی مختلف ہوگا۔ ارڈینو میں بھی تاخیر () فنکشن ہوتا ہے جو بڑے پیمانے پر استعمال ہوتا ہے۔ لیکن شروع کرنے سے پہلے آئیے اس پر بات کرتے ہیں کہ ہمیں کسی منصوبے میں تاخیر () فنکشن کیوں نہیں استعمال کرنا چاہئے ۔
ارڈینو میں تاخیر () کو کیوں چھوڑیں؟
اگر آرڈینوو کے حوالہ دستاویزات پر غور کیا جائے تو اس میں تاخیر کی دو قسمیں ہیں ، پہلی تاخیر () اور دوسرا تاخیر مائیکرو سیکنڈ () ہے ۔ تاخیر پیدا کرنے کے معاملے میں دونوں کام ایک جیسے ہیں۔ فرق صرف اتنا ہے کہ ، تاخیر () فنکشن میں ، جو پیرامیٹر پاس ہوا وہ ملی سیکنڈ میں ہے یعنی اگر ہم (1000) تاخیر لکھتے ہیں تو تاخیر 1000 ملی سیکنڈ یعنی 1 سیکنڈ میں ہوگی۔ اسی طرح تاخیر سے مائیکرو سیکنڈ () فنکشن میں ، منظور شدہ پیرامیٹر مائیکرو سیکنڈ میں ہے یعنی اگر ہم ڈییل میکروسیکنڈ (1000) لکھتے ہیں تو تاخیر 1000 مائیکرو سیکنڈ یعنی 1 ملی سیکنڈ میں ہوگی۔
یہاں نقطہ آتا ہے ، دونوں افعال تاخیر کی تقریب میں وقت کی مقدار کے لئے پروگرام کو روکتے ہیں۔ لہذا اگر ہم 1 سیکنڈ کی تاخیر دے رہے ہیں تو پروسیسر اگلی ہدایت پر نہیں جاسکتا جب تک کہ 1 سیکنڈ گزر نہیں جاتا ہے۔ اسی طرح اگر تاخیر 10 سیکنڈ ہے تو پھر پروگرام 10 سیکنڈ کے لئے رک جائے گا اور 10 سیکنڈ گزرنے تک پروسیسر اگلی ہدایات پر جانے کی اجازت نہیں دے گا۔ یہ تیز رفتار اور ہدایات پر عمل درآمد کے معاملے میں مائکروکانٹرولر کی کارکردگی کو روکتا ہے۔
تاخیر کی تقریب کی خرابی کی وضاحت کرنے کی بہترین مثال دو پش بٹنوں کا استعمال ہے۔ غور کریں کہ ہم دو ایل ای ڈی کو دو پش بٹنوں کا استعمال کرتے ہوئے ٹوگل کرنا چاہتے ہیں۔ لہذا اگر ایک پش بٹن کو دھکا دیا جاتا ہے تو اسی ایل ای ڈی کو 2 سیکنڈ تک چمکنا چاہئے ، اسی طرح اگر دوسرا دھکا دیا جاتا ہے تو ایل ای ڈی کو 4 سیکنڈ تک چمکنا چاہئے۔ لیکن جب ہم تاخیر کا استعمال کرتے ہیں () ، اگر صارف پہلا بٹن دبائے گا تو پروگرام 2 سیکنڈ کے لئے رک جائے گا اور اگر صارف 2 سیکنڈ کی تاخیر سے پہلے دوسرا بٹن دبائے گا تو مائکروکانٹرلر ان پٹ کو قبول نہیں کرے گا جیسا کہ پروگرام ہے۔ روکنے کے مرحلے میں
اریڈوینو کی سرکاری دستاویزات میں اس کے نوٹس اور تاخیر () تقریب کی تفصیل کی وارننگ میں واضح طور پر اس کا تذکرہ کیا گیا ہے۔ آپ اسے مزید واضح کرنے کے لئے دیکھ سکتے ہیں۔
ملیس () کیوں استعمال کریں؟
تاخیر کے استعمال سے پیدا ہونے والی پریشانی پر قابو پانے کے ل a ، ایک ڈویلپر کو ملیس () فنکشن استعمال کرنا چاہئے جو ایک بار آپ کے عادت ہوجانے پر استعمال کرنا آسان ہے اور یہ ہدایات پر عمل درآمد میں تاخیر پیدا کیے بغیر 100 CP سی پی یو کی کارکردگی کا استعمال کرے گا۔ ملیس () ایک ایسا فنکشن ہے جو ارڈینو بورڈ نے بغیر کسی پروگرام کو منجمد کیے موجودہ پروگرام چلانے کا آغاز کیا ہے اس کے بعد سے ابھی گذر جانے والی ملی سیکنڈ کی مقدار کو واپس کرتا ہے۔ اس بار تعداد تقریبا over 50 دن بعد ، بہہ جائے گی (یعنی صفر پر واپس جائیں)۔
جس طرح آرڈینو میں تاخیر سے مائکرو سیکنڈز () ہوتا ہے ، اسی طرح اس میں مائلیس () مائکرو () کے بطور مائیکرو ورژن بھی ہے ۔ مائیکرو اور ملیس کے مابین فرق یہ ہے کہ ، ملیکس () جو 50 دن کے مقابلے میں ہے ، کے مقابلے میں مائکروس (70) تقریبا 70 منٹ کے بعد بہہ جائیں گے۔ لہذا درخواست پر منحصر ہے کہ آپ ملیس () یا مائیکرو () استعمال کرسکتے ہیں۔
تاخیر () کی بجائے ملیس () کا استعمال کریں:
وقت اور تاخیر کے لئے ملیس () کو استعمال کرنے کے ل you ، آپ کو وقت کو شروع کرنے کے لئے کارروائی کا وقت ریکارڈ کرنے اور اسے اسٹور کرنے کی ضرورت ہے اور پھر وقفوں سے یہ چیک کرنا ہوگا کہ آیا مقررہ وقت گزر گیا ہے یا نہیں۔ تو جیسا کہ بیان کیا گیا ہے ، موجودہ وقت کو متغیر میں اسٹور کریں۔
دستخط شدہ لمبی کرنٹمیلیس = ملیس ()؛
ہمیں یہ جاننے کے لئے دو مزید متغیرات کی ضرورت ہے کہ مطلوبہ وقت گزر گیا ہے یا نہیں ۔ ہم نے موجودہ وقت کو موجودہ ملس متغیر میں ذخیرہ کرلیا ہے لیکن ہمیں یہ بھی جاننے کی ضرورت ہے کہ وقت کی مدت کب شروع ہوئی اور مدت کتنی لمبی ہے۔ تو وقفہ اور سابقہ ملز اعلان کیا جاتا ہے۔ وقفہ ہمیں بتائے گا کہ وقت کی تاخیر اور previosMillis واقعہ پیش آنے کے آخری بار جمع کرے گی۔
دستخط شدہ لمبا پچھلا میلس؛ بغیر دستخط شدہ طویل مدت = 1000؛
اس کو سمجھنے کے ل let's ، پلکتے ہوئے ایک سادہ ایل ای ڈی کی مثال لیتے ہیں۔ مدت = 1000 ہمیں بتائے گی کہ ایل ای ڈی 1 سیکنڈ یا 1000 ایم ایس کے لئے پلک جھپکائے گی۔
const IN ledPin = 4؛ // ایل ای ڈی پن نمبر منسلک انٹ لیڈ اسٹیٹ = کم؛ // ایل ای ڈی ریاست کے بغیر دستخط شدہ لمبا پچھلا میلیس = 0 سیٹ کرنے کے لئے استعمال کیا جاتا ہے ؛ // آخری بار ایل ای ڈی کو صاف کرنا پڑے گا طویل مدت = 1000؛ // مدت جس میں ایم ایس باطل سیٹ اپ میں پلکیں مارنا ہے ( ) { پن موڈ (لیڈپین ، آؤٹپٹ)؛ // پیداوار کے طور پر سیٹ ledpin } باطل لوپ () { اہستاکشرت طویل currentMillis = Millis اس ()؛ // موجودہ وقت کو ذخیرہ کریں اگر ( موجودہ ملز - پچھلی میلیس> = مدت) {// چیک کریں کہ کیا 1000 ملی میٹر گذشتہ میلیس = کرنٹ میلیس گزر چکے ہیں ۔ // آخری بار جب آپ ایل ای ڈی کو پلکیں تو بچائیں اگر ( ایل ای ڈی اسٹیٹ == LOW) {// اگر ایل ای ڈی بند ہے تو اسے آن کریں اور اس کے برعکس لیڈ اسٹیٹ = HIGH؛ } else { ledState = LOW؛ } ڈیجیٹل رائٹ (لیڈپین ، لیڈ اسٹیٹ)؛ // پلکیں جھپکنے کے لئے لیڈ اسٹیٹ کے ساتھ ایل ای ڈی سیٹ کریں } }
یہاں ، بیان
ارڈینو میں رکاوٹیں دوسرے مائکروکینٹرولرز کی طرح کام کرتی ہیں۔ ارڈینو یو این او بورڈ کے پاس جی پی آئی او پن 2 اور 3 پر مداخلت کرنے کے ل two دو الگ الگ پن ہیں۔ ہم نے اسے اردوینو انٹروپٹس ٹیوٹوریل میں تفصیل سے احاطہ کیا ہے ، جہاں آپ انٹراپٹس اور ان کے استعمال کے بارے میں مزید جان سکتے ہیں۔
یہاں ہم ایک ہی وقت میں دو کاموں کو سنبھال کر اردوینو ملٹی ٹاسکنگ دکھائیں گے ۔ کاموں میں پش بٹن کے ساتھ مختلف وقت کی تاخیر میں دو ایل ای ڈی کو پلک جھپکانا شامل ہوگا جو ایل ای ڈی کی آن / آف حالت کو کنٹرول کرنے کے لئے استعمال ہوگا۔ تو بیک وقت تین کام انجام دیئے جائیں گے۔
ضروری اجزاء
- اردوینو یو این او
- تین ایل ای ڈی (کوئی رنگین)
- مزاحمت (470 ، 10 ک)
- جمپرز
- بریڈ بورڈ
سرکٹ ڈایاگرام
ارڈینو ملیس () فکشن کے استعمال کو ظاہر کرنے کے لئے سرکٹ ڈایاگرام میں بہت آسان ہے اور جیسا کہ ذیل میں دکھایا گیا ہے اس کو جوڑنے کے ل much زیادہ اجزاء نہیں ہیں۔
ملٹی ٹاسکنگ کے لئے پروگرامنگ اردوینو یو این او
ملٹی ٹاسکنگ کے لئے پروگرامنگ اریڈوینو یو این او کو صرف اس بات کے پیچھے منطق کی ضرورت ہوگی کہ ملیس () کام کیسے کرے جس کی وضاحت اوپر کی گئی ہو۔ ملٹی ٹاسکنگ کے لئے اردوینو یو این او کو پروگرام شروع کرنے سے قبل منطق کو واضح کرنے اور ملس () سے اپنے آپ کو راحت بخش بنانے کے لئے بار بار پلکنے والی ایل ای ڈی کو ملیس کا استعمال کرتے ہوئے مشق کرنے کی سفارش کی جاتی ہے ۔ اس ٹیوٹوریل میں رکاوٹ ملkingس ٹاسکنگ کے لئے بیک وقت ملس () کے ساتھ بھی استعمال ہوتا ہے۔ بٹن ایک رکاوٹ ہو گا ۔ لہذا جب بھی رکاوٹ پیدا ہوتی ہے یعنی پش بٹن دب جاتا ہے تو ، ایل ای ڈی آن یا آف اسٹیٹ میں تبدیل ہوجائے گا۔پروگرامنگ کی شروعات پن نمبروں کے ساتھ ہوتی ہے جہاں ایل ای ڈی اور پش بٹن منسلک ہوتے ہیں۔
int led1 = 6؛ int led2 = 7؛ int toggleLed = 5؛ انٹ پش بٹن = 2؛
اگلا ہم مستقبل کے استعمال کے ل LED ایل ای ڈی کی حیثیت کو ذخیرہ کرنے کے لئے متغیر لکھتے ہیں۔
int ledState1 = LOW؛ int ledState2 = LOW؛
جیسا کہ جھپکتی ہوئی مثال میں اوپر بیان کیا گیا ہے ، مدت اور پچھلی ملس کے متغیر کو ایل ای ڈی کے لئے موازنہ اور تاخیر پیدا کرنے کا اعلان کیا گیا ہے ۔ ہر 1 سیکنڈ کے بعد پہلا ایل ای ڈی پلک جھپکتا ہے اور 200 ملی میٹر کے بعد ایک اور ایل ای ڈی پلک جھپکتی ہے۔
دستخط شدہ لمبا پچھلا میلیس 1 = 0؛ const طویل مدت 1 = 1000؛ دستخط شدہ لمبا پچھلا میلیس 2 = 0؛ const طویل مدت 2 = 200؛
پش بٹن کے متعدد پریسوں سے بچنے کے لئے ایک اور ملیس فنکشن استعمال کرنے میں تاخیر پیدا کرے گی ۔ اوپر کی طرح اسی طرح کا نقطہ نظر ہوگا۔
int debouncePeriod = 20؛ int debounceMillis = 0؛
تین متغیروں تسلسل کے طور پر دھکا بٹن کی حیثیت ذخیرہ کرنے کے لئے استعمال کیا جائے گا ، ٹوگل کی قیادت کی اور دھکا بٹن ریاست.
bool buttonPused = غلط؛ int ledChange = LOW؛ int lastState = HIGH؛
پن کی کارروائی کی وضاحت کریں کہ کون سا پن INPUT یا OUTPUT کے طور پر کام کرے گا۔
پن موڈ (لیڈ 1 ، آؤٹپٹ)؛ پن موڈ (لیڈ 2 ، آؤٹپٹ)؛ پن موڈ (ٹوگل لیڈ ، آؤٹ پٹ)؛ پن موڈ (پش بٹن ، انپٹ)؛
اب آئی ایس آر اور انٹراپٹ موڈ کی تعریف کے ساتھ انٹراپٹ منسلک کرکے رکاوٹ پن کی تعریف کریں۔ نوٹ کریں کہ جب اصل ڈیجیٹل پن کو مخصوص مداخلت کی تعداد میں ترجمہ کرنے کے ل attach منسلک انٹریٹ () فنکشن کا اعلان کرتے ہو تو ڈیجیٹل پن ٹن انٹرپریٹ (پن_نمبر) استعمال کرنے کی سفارش کی جاتی ہے ۔
منسلک انٹرپریٹ (ڈیجیٹلپن ٹن انٹرپروٹ (پش بٹن)، پش بٹن_ آئس آر، چینج)؛
رکاوٹ سبروٹائن لکھی گئی ہے اور یہ صرف بٹن پش پرچم کو تبدیل کرے گا ۔ نوٹ کریں کہ ، خلل ڈالنے والے سبروٹین کو جتنا ممکن ہو کم ہونا چاہئے ، لہذا اسے لکھنے کی کوشش کریں اور اضافی ہدایات کو کم سے کم کریں۔
باطل دھکا بٹن_آس آر () { بٹن پشڈ = سچ؛ }
لوپ ایک موجودہ ملillس متغیر میں ملیس کی قیمت کو ذخیرہ کرنے کے ساتھ شروع ہوتا ہے جو ہر وقت لوپ کے دوبارہ چلنے پر وقت کی قیمت کو ضائع کردے گا۔
دستخط شدہ لمبی کرنٹمیلیس = ملیس ()؛
ملٹی ٹاسکنگ میں کل تین کام ہوتے ہیں ، ایک ایل ای ڈی کو 1 سیکنڈ میں پلکیں ، دوسرا ایل ای ڈی کو 200 ملی میٹر پر اور اگر پش بٹن دبایا گیا ہو تو آف / آن ایل ای ڈی سوئچ کریں ۔ لہذا ہم اس کام کو انجام دینے کے لئے تین حصے لکھیں گے۔
سب سے پہلے ملیس گذر جانے کا موازنہ کرکے ہر 1 سیکنڈ کے بعد ایل ای ڈی ریاست ٹوگل کرتا ہے۔
اگر (موجودہ ملز - پچھلا میلیس 1> = مدت 1) { پچھلا میلیس 1 = موجودہ ملز؛ if (ledState1 == LOW) { ledState1 = HIGH؛ } else { ledState1 = LOW؛ } ڈیجیٹل رائٹ (لیڈ 1 ، لیڈ اسٹیٹ 1)؛ }
اسی طرح دوسری بات یہ ہے کہ گذشتہ ملیس کا موازنہ کرکے ہر 200 ملی میٹر کے بعد ایل ای ڈی کو ٹوگل کرتا ہے۔ وضاحت پہلے ہی اس مضمون میں بیان کی جاچکی ہے۔
اگر (موجودہ ملز - پچھلا میلیس 2> = پیریڈ 2) { پچھلا میلیس 2 = موجودہ ملز؛ if (ledState2 == LOW) { ledState2 = HIGH؛ } else { ledState2 = LOW؛ } ڈیجیٹل رائٹ (led2 ، ledState2)؛ }
آخر میں ، بٹن دبائے ہوئے پرچم کی نگرانی کی جاتی ہے اور 20 ملی میٹر کی لانچ تاخیر پیدا کرنے کے بعد یہ صرف ایل ای ڈی کی حالت کو ٹوگل کرتا ہے جس طرح رکاوٹ کے طور پر منسلک بٹن سے دباؤ ہوتا ہے۔
if (بٹنپشڈ = سچ) // چیک کریں کہ آیا ISR کو { if ((کرنٹ میلیس - ڈیبون میلس)> ڈیبونس پیریوڈ && بٹن دباؤ) کہا جاتا ہے // متعدد پریسوں سے بچنے کے ل 20 20 ایم ایس ڈیبونس تاخیر پیدا کریں { ڈیبون میلس = موجودہ میلیس؛ // آخری ڈیبون میں تاخیر کا وقت بچائیں اگر (ڈیجیٹلریڈ (پش بٹن) == LOW && lastState == HIGH) // دباؤ بٹن دبانے کے بعد لیڈ کو تبدیل کریں { ledChange =! ایل ای ڈی چینج؛ ڈیجیٹل رائٹ (ٹوگل لیڈ ، لیڈ چینج)؛ آخری اسٹیٹ = LOW؛ } دوسری صورت میں اگر (ڈیجیٹلریڈ (پش بٹن) == اعلی && آخری اسٹیٹ == LOW) { آخری اسٹیٹ = ہائی؛ } بٹن پش = غلط؛ } }
یہ آرڈینو ملیس () سبق ختم کرتا ہے ۔ نوٹ کریں کہ ملیس () کی عادت ڈالنے کے ل just ، کچھ دیگر ایپلی کیشنز میں بھی اس منطق کو نافذ کرنے کی مشق کریں۔ آپ موٹروں ، امدادی موٹرز ، سینسر اور دیگر پردییوں کو استعمال کرنے کے ل expand بھی اسے بڑھا سکتے ہیں۔ کسی بھی شک کی صورت میں پھر ہمارے فورم پر لکھیں یا نیچے تبصرہ کریں۔
ارڈینو میں ملیس فنکشن کے استعمال کو ظاہر کرنے کے لئے مکمل کوڈ اور ویڈیو ذیل میں فراہم کیا گیا ہے۔