- سیمفور کیا ہے؟
- فری آر ٹی او ایس میں سیمفور کا استعمال کیسے کریں؟
- سیمفور کوڈ کی وضاحت
- سرکٹ ڈایاگرام
- میٹیکس کیا ہے؟
- فری آر ٹی او ایس میں میٹیکس کا استعمال کیسے کریں؟
- میٹیکس کوڈ کی وضاحت
پچھلے سبق میں ، ہم نے فری آر ٹی او ایس آردوینو میں فری آر ٹی او ایس کی بنیادی باتوں کا احاطہ کیا ہے۔ اب ، اس تیسرے فری آر ٹی او ایس ٹیوٹوریل میں ، ہم فری آر ٹی او ایس اور اس کے پیشگی APIs کے بارے میں مزید معلومات حاصل کریں گے ، جس سے آپ ملٹی ٹاسکنگ پلیٹ فارم کو مزید گہرائی سے سمجھ سکتے ہیں۔
سیمفور اور میٹیکس (باہمی اخراج) وہ دانی کی چیزیں ہیں جو مطابقت پذیری ، وسائل کے انتظام اور وسائل کو بدعنوانی سے بچانے کے لئے استعمال کی جاتی ہیں۔ اس ٹیوٹوریل کے پہلے نصف حصے میں ، ہم سیمفور کے پیچھے یہ خیال دیکھیں گے کہ اسے کس طرح اور کہاں استعمال کیا جائے۔ دوسرے ہاف میں ، ہم میٹیکس کے ساتھ جاری رکھیں گے ۔
سیمفور کیا ہے؟
پچھلے سبق میں ، ہم نے کام کی ترجیحات کے بارے میں تبادلہ خیال کیا ہے اور یہ بھی جان لیا ہے کہ اعلی ترجیحی کام کم ترجیحی کام کو پہلے سے ختم کرتا ہے لہذا اعلی ترجیحی ٹاسک پر عمل درآمد کا امکان موجود رہ سکتا ہے کیونکہ اعداد و شمار میں بدعنوانی کم ترجیحی کام میں ہوسکتی ہے کیونکہ یہ ابھی تک اس پر عمل نہیں کیا گیا ہے اور اس کام پر اعداد و شمار ایک سینسر سے مستقل طور پر آرہے ہیں جس کی وجہ سے ڈیٹا میں کمی اور پوری ایپلی کیشن کی خرابی ہوتی ہے۔
لہذا ، اعداد و شمار کے نقصان سے وسائل کو بچانے کی ضرورت ہے اور یہاں سیمفور ایک اہم کردار ادا کرتا ہے۔
سیمفور ایک اشارہ کرنے والا طریقہ کار ہے جس میں ایک منتظر حالت میں کام کو انجام دینے کے لئے کسی اور کام کے ذریعہ اشارہ کیا جاتا ہے۔ دوسرے لفظوں میں ، جب ٹاسک 1 نے اپنا کام ختم کرلیا ، تب وہ جھنڈا دکھائے گا یا 1 جھنڈے میں اضافہ کرے گا اور پھر یہ جھنڈا کسی اور ٹاسک (ٹاسک 2) کے ذریعہ موصول ہوگا جس میں دکھایا گیا ہے کہ وہ اب اپنا کام انجام دے سکتا ہے۔ جب ٹاسک 2 نے اپنا کام ختم کرلیا تو پھر پرچم میں 1 کی کمی واقع ہوگی۔
لہذا ، بنیادی طور پر ، یہ ایک "دے" اور "لے" کا طریقہ کار ہے اور سیمفور ایک عدد متغیر ہے جو وسائل تک رسائی کو ہم آہنگ کرنے کے لئے استعمال ہوتا ہے۔
فری آر ٹی او ایس میں سیمفور کی اقسام:
سیمفور دو قسموں کا ہے۔
- ثنائی سیمفور
- سیمفور کی گنتی
1. بائنری سیمفور: اس کی دو عددی اقدار 0 اور 1. ہیں۔ یہ کسی حد تک قطار کی طرح ہے 1. مثال کے طور پر ، ہمارے پاس دو کام ہیں ، ٹاسک 1 اور ٹاسک 2۔ ٹاسک 1 ٹاسک 2 کو ڈیٹا بھیجتا ہے لہذا ٹاسک 2 قطار آئٹم کو مستقل طور پر چیک کرتا ہے اگر 1 موجود ہے ، تو وہ ڈیٹا کو پڑھ سکتا ہے ورنہ اسے 1 بننے تک انتظار کرنا پڑتا ہے۔ ڈیٹا لینے کے بعد ، ٹاسک 2 قطار کو کم کردیتی ہے اور اسے 0 بناتی ہے جس کا مطلب ہے ٹاسک 1 دوبارہ۔ ٹاسک 2 پر ڈیٹا بھیج سکتے ہیں۔
مذکورہ بالا مثال سے ، یہ کہا جاسکتا ہے کہ بائنری سیمفور کاموں کے درمیان یا کاموں اور مداخلت کے مابین ہم آہنگی کے لئے استعمال ہوتا ہے۔
2. سیمیفور کی گنتی: اس کی قیمت 0 سے زیادہ ہے اور 1 سے زیادہ لمبائی کی قطار کے بارے میں سوچا جاسکتا ہے۔ یہ سیمفور واقعات گننے کے لئے استعمال ہوتا ہے۔ اس استعمال کے منظر نامے میں ، واقعہ پیش آنے پر ہر مرتبہ ایک ایونٹ ہینڈلر سیمفور کو 'دے' گا (اور سیم پورٹ کاؤنٹی ویلیو میں اضافہ) ، اور ایک ہینڈلر ٹاسک ہر بار اس واقعے پر کارروائی کرتے ہوئے سیمفور کو 'لے' گا (سیمفور کی گنتی کی قیمت میں کمی).
لہذا ، گنتی کی قیمت واقع ہوئی ہے کہ واقعات کی تعداد اور کارروائی کی گئی تعداد کے درمیان فرق ہے۔
اب ، دیکھتے ہیں کہ ہمارے فری آر ٹی او ایس کوڈ میں سیمفور کو کس طرح استعمال کریں۔
فری آر ٹی او ایس میں سیمفور کا استعمال کیسے کریں؟
فری آر ٹی او ایس سیمفور بنانے ، سیمفور لینے اور سیمفور دینے کیلئے مختلف APIs کی حمایت کرتا ہے۔
اب ، ایک ہی دانا آبجیکٹ کے لئے دو قسم کے API ہوسکتے ہیں۔ اگر ہمیں کسی ISR سے سیمفور دینا ہے تو ، عام سیمفور API استعمال نہیں کیا جاسکتا ہے۔ آپ کو مداخلت سے محفوظ APIs کا استعمال کرنا چاہئے۔
اس ٹیوٹوریل میں ، ہم بائنری سیمفور کا استعمال کریں گے کیونکہ سمجھنے اور اس پر عملدرآمد کرنا آسان ہے۔ چونکہ یہاں رکاوٹ فعالیت کا استعمال کیا جاتا ہے ، لہذا آپ کو ISR فنکشن میں مداخلت سے محفوظ APIs استعمال کرنے کی ضرورت ہے۔ جب ہم کسی کام کو کسی رکاوٹ کے ساتھ ہم آہنگ کرنے کے لئے کہہ رہے ہیں تو ، اس کا مطلب یہ ہے کہ اس کام کو آئی ایس آر کے ٹھیک بعد چلانے والی حالت میں ڈالیں۔
سیمفور بنانا:
کسی بھی دانا شے کو استعمال کرنے کے ل we ، ہمیں پہلے اسے بنانا ہوگا۔ بائنری سیمفور بنانے کے لئے ، vSemaphoreCreateBinary () استعمال کریں ۔
یہ API کوئی پیرامیٹر نہیں لیتا ہے اور SemaphoreHandle_t کی قسم کا ایک متغیر واپس کرتا ہے۔ سیمفور کو ذخیرہ کرنے کے لئے ایک عالمی متغیر نام سیما_ وی تشکیل دیا گیا ہے۔
سیمفور ہینڈل_ٹ سیما_ وی؛ sema_v = xSemaphoreCreateBinary ()؛
سیمفور دینا:
سیمفور دینے کے لئے ، دو ورژن ہیں- ایک رکاوٹ کے لئے اور دوسرا عام کام کے لئے۔
- xSemaphoreGive (): یہ API صرف ایک دلیل لیتا ہے جو سیمافور کا متغیر نام ہے جیسے سیما_ وی جیسے سیما پور بنانے کے دوران اوپر دیا گیا ہے۔ اس کو کسی بھی عام کام سے کہا جاسکتا ہے جسے آپ مطابقت پذیر بنانا چاہتے ہیں۔
- xSemaphoreGiveFromISR (): یہ xSemaphoreGive () کا وقفے سے محفوظ API کا ورژن ہے۔ جب ہمیں کسی ISR اور عام کام کی ہم وقت سازی کرنے کی ضرورت ہوتی ہے تو ، پھر ISS فنکشن سے xSemaphoreGiveFromISR () استعمال کیا جانا چاہئے۔
سیمفور لینا:
سیمفور لینے کے لئے ، API فنکشن xSemaphoreTake () استعمال کریں ۔ یہ API دو پیرامیٹرز لیتا ہے۔
xSemaphoreTake (سیمفور ہینڈل_ٹ x سیما فور ، ٹک ٹائپ_ٹ x ٹکس ٹو وائٹ)؛
xSemaphore: سیما پور کا نام ہمارے معاملے میں لیا جانا چاہئے sema_v.
xTicksToWait: یہ زیادہ سے زیادہ وقت ہے جس میں یہ کام سیمفور کے دستیاب ہونے کے لئے مسدود حالت میں انتظار کرے گا۔ ہمارے منصوبے میں، ہم نے مقرر کرے گا xTicksToWait کرنے portMAX_DELAY sema_v دستیاب ہے جب تک التواء ریاست میں غیر معینہ مدت تک انتظار کرنا task_1 بنانے کے لئے.
اب ، ہم ان APIs کا استعمال کریں اور کچھ کام انجام دینے کے لئے ایک کوڈ لکھیں۔
یہاں ایک پش بٹن اور دو ایل ای ڈی انٹرفیس ہیں۔ پش بٹن ایک رکاوٹ بٹن کے طور پر کام کرے گا جو اردوینو یونو کے پن 2 سے منسلک ہے۔ جب اس بٹن کو دبایا جائے گا تو ایک رکاوٹ پیدا ہوجائے گا اور ایک ایل ای ڈی جو پن 8 سے منسلک ہے اسے آن کر دیا جائے گا اور جب آپ اسے دوبارہ دبائیں گے تو وہ آف ہوجائے گا۔
لہذا ، جب بٹن دبایا جاتا ہے تو xSemaphoreGiveFromISR () کو ISR فنکشن سے طلب کیا جائے گا اور xSemaphoreTake () فنکشن کو TaskLED تقریب سے طلب کیا جائے گا۔
سسٹم کو ملٹی ٹاسک کرنے کے ل make ، دیگر ایل ای ڈی کو پن 7 سے مربوط کریں جو ہمیشہ پلک جھپکنے والی حالت میں رہے گا۔
سیمفور کوڈ کی وضاحت
آئیے آرڈینوو IDE کھول کر کوڈ لکھنا شروع کریں
1. سب سے پہلے ، اردوینو_ فری آر ٹی او ایس ہیڈر فائل شامل کریں۔ اب ، اگر کسی بھی دانا آبجیکٹ کو قطار سیمفور کی طرح استعمال کیا جاتا ہے تو پھر اس کے لئے ہیڈر فائل بھی شامل کرنی ہوگی۔
# شامل کریں # شامل کریں
2. سیمفور کی اقدار کو ذخیرہ کرنے کے لئے SemaphoreHandle_t قسم کے متغیر کا اعلان کریں ۔
سیمفور ہینڈل_ٹ رکاوٹ سیمفاور؛
v. باطل سیٹ اپ () میں ، xTaskCreate () API کا استعمال کرتے ہوئے دو ٹاسک (TaskLED اور TaskBlink) بنائیں اور پھر xSemaphoreCreateBinary () کا استعمال کرتے ہوئے ایک سیمفور بنائیں۔ مساوی ترجیحات کے ساتھ ایک ٹاسک بنائیں اور بعد میں اس نمبر کے ساتھ کھیلنے کی کوشش کریں۔ نیز ، پن 2 کو ایک ان پٹ کے بطور تشکیل دیں اور اندرونی پل اپ مزاحم کو فعال کریں اور مداخلت کی پن کو جوڑیں۔ آخر میں ، جیسا کہ ذیل میں دکھایا گیا ہے شیڈیولر شروع کریں۔
باطل سیٹ اپ () { پن موڈ (2 ، INPUT_PULLUP)؛ xTaskCreate (ٹاسک لیڈ ، "قیادت" ، 128 ، NULL ، 0 ، NULL)؛ xTaskCreate (TaskBlink، "LedBlink"، 128، NULL، 0، NULL)؛ انٹرپریٹسمیفور = xSemaphoreCreateBinary ()؛ اگر ( انٹراپٹسماoreور ! = NULL) { منسلک انٹرپریٹ (ڈیجیٹلپن ٹن انٹرپروٹ (2) ، ڈیبونس انٹرپریٹ ، LOW)؛ } }
4. اب ، ISR فنکشن کو نافذ کریں۔ ایک فنکشن بنائیں اور اس کا نام اٹیچ انٹرپروٹ () فنکشن کی دوسری دلیل کی طرح رکھیں ۔ خلل ڈالنے والے کام کو صحیح طریقے سے کرنے کے ل you ، آپ کو ملیس یا مائیکرو فنکشن کا استعمال کرتے ہوئے اور ڈیبنگنگ ٹائم کو ایڈجسٹ کرکے پش بٹن کے لانچ مسئلہ کو دور کرنے کی ضرورت ہے۔ اس فنکشن سے ، انٹراپٹ ہینڈلر () فنکشن کو کال کریں جیسے نیچے دکھایا گیا ہے۔
لمبی ڈیبینسگ_ٹائم = 150؛ غیر مستحکم دستخط شدہ طویل آخری_مکرو؛ باطل ڈیبوناسٹرپٹ () { اگر ((لمبی) (مائکروس () - آخری_مکروس)> = ڈیبونسینگ_ٹائم * 1000) rupt انٹراپٹ ہینڈلر ()؛ آخری_مکرو = مائکرو ()؛ } }
میں interruptHandler () تقریب، کال xSemaphoreGiveFromISR () API.
کالعدم مداخلت ہینڈلر () { xSamaphoreGiveFromISR (انٹراپٹ سیمفور ، این یو ایل)؛ }
یہ فنکشن ایل ای ڈی کو چالو کرنے کے لئے ٹاسکلیڈ کو سیمفور دے گا۔
5. ایک بنائیں TaskLed تقریب اور اندر جبکہ لوپ، کال xSemaphoreTake () API اور semaphore کے کامیابی سے لیا جاتا ہے یا نہیں ہے چیک کریں. اگر یہ پی ڈی پی اے ایس (یعنی 1) کے برابر ہے تو نیچے دیئے گئے ایل ای ڈی ٹوگل کو بنائیں۔
باطل ٹاسکلیڈ (باطل * پی وی پیرامیٹرز) { (باطل) پی وی پیرامیٹرز؛ پن موڈ (8 ، آؤٹپٹ)؛ جبکہ (1) { اگر (xSemaphoreTake (انٹرٹینٹ سیمفور ، پورٹ MAX_DELAY) == pdPASS) { ڈیجیٹل رائٹ (8 ،! ڈیجیٹل ریڈ (8))؛ } } }
6. اس کے علاوہ ، پن 7 سے منسلک دیگر ایل ای ڈی کو پلکنے کے لئے ایک فنکشن بنائیں۔
باطل ٹاسکلیڈ 1 (باطل * پی وی پیرامیٹرز) { (باطل) پی وی پیرامیٹرز؛ پن موڈ (7 ، آؤٹپٹ)؛ جبکہ (1) { ڈیجیٹل رائٹ (7 ، ہائی)؛ vTaskDelay (200 / portTICK_PERIOD_MS)؛ ڈیجیٹل رائٹ (7 ، کم)؛ vTaskDelay (200 / portTICK_PERIOD_MS)؛ } }
7. باطل لوپ فنکشن خالی رہے گا۔ اسے مت بھولنا۔
باطل لوپ () {}
بس ، اس سبق کے آخر میں مکمل کوڈ پایا جاسکتا ہے۔ اب ، اس کوڈ کو اپ لوڈ کریں اور سرکٹ ڈایاگرام کے مطابق ایلڈیز اور پش بٹن کو ارڈینو یو این او کے ساتھ مربوط کریں۔
سرکٹ ڈایاگرام
کوڈ اپ لوڈ کرنے کے بعد ، آپ دیکھیں گے کہ 200 ملی میٹر کے بعد ایک ایل ای ڈی پلک جھپک رہی ہے اور جب بٹن دبایا جائے گا ، تو فوری طور پر دوسری ایل ای ڈی چمک جائے گی جیسے آخر میں دی گئی ویڈیو میں دکھایا گیا ہے۔
اس طرح سے ، سیمورفورس کو ارڈینو کے ساتھ فری آر ٹی او ایس میں استعمال کیا جاسکتا ہے جہاں اسے بغیر کسی نقصان کے کسی کام سے دوسرے میں ڈیٹا منتقل کرنے کی ضرورت ہے۔
اب ، دیکھتے ہیں کہ میٹیکس کیا ہے اور اسے فری آر ٹی او ایس کا استعمال کیسے کریں۔
میٹیکس کیا ہے؟
جیسا کہ مذکورہ بالا سیمفور ایک سگنلنگ میکانزم ہے ، اسی طرح ، میٹیکس سیمفور کے برخلاف ایک لاکنگ میکانزم ہے جس میں اضافہ اور کمی کے لئے الگ الگ افعال ہوتے ہیں لیکن میٹیکس میں ، یہ فنکشن اپنے آپ میں لیتا ہے اور دیتا ہے۔ مشترکہ وسائل کی بدعنوانی سے بچنے کے لئے یہ ایک تکنیک ہے۔
مشترکہ وسائل کی حفاظت کے ل one ، کوئی بھی وسائل کو ایک ٹوکن کارڈ (گونگا) تفویض کرتا ہے۔ جس کے پاس یہ کارڈ ہے وہ دوسرے وسائل تک رسائی حاصل کرسکتا ہے۔ دوسروں کو کارڈ واپس آنے تک انتظار کرنا چاہئے۔ اس طرح سے ، صرف ایک وسیلہ اس کام تک رسائی حاصل کرسکتا ہے اور دوسرے اپنے مواقع کا انتظار کرتے ہیں۔
آئیے ایک مثال کی مدد سے فری آر ٹی او ایس میں Mutex کو سمجھیں ۔
یہاں ہمارے تین کام ہیں ، ایک LCD پر ڈیٹا پرنٹنگ کے لئے ، دوسرا LDR ڈیٹا LCD ٹاسک بھیجنے کے لئے اور LCD پر درجہ حرارت کا ڈیٹا بھیجنے کا آخری کام۔ تو یہاں دو کام ایک ہی وسائل یعنی LCD کا اشتراک کر رہے ہیں۔ اگر LDR ٹاسک اور ٹمپریچر ٹاسک بیک وقت ڈیٹا بھیجتا ہے تو پھر ڈیٹا میں سے ایک خراب یا گم ہوسکتا ہے۔
لہذا ڈیٹا سے ہونے والے نقصان کو بچانے کے لئے ، جب تک کہ اس نے ڈسپلے کا ٹاسک ختم نہ کیا تب تک ہمیں ٹاسک 1 کے لئے LCD وسائل کو لاک کرنا ہوگا۔ پھر LCD ٹاسک انلاک ہوجائے گا اور پھر ٹاسک 2 اپنا کام انجام دے سکے گا۔
آپ نیچے آریھ میں Mutex اور سیمفورس کے کام کا مشاہدہ کرسکتے ہیں۔
فری آر ٹی او ایس میں میٹیکس کا استعمال کیسے کریں؟
میٹیکس بھی اسی طرح استعمال ہوتے ہیں جیسے سیمفورس۔ پہلے اسے بنائیں ، پھر متعلقہ APIs کا استعمال کریں اور دیں۔
گونگا بنانا:
ایک صوتی بنانے کے لئے ، xSemaphoreCreateMutex () API استعمال کریں ۔ جیسا کہ اس کے نام سے پتہ چلتا ہے کہ Mutex بائنری سیمفور کی ایک قسم ہے۔ وہ مختلف سیاق و سباق اور مقاصد میں استعمال ہوتے ہیں۔ ایک بائنری سیمفور کاموں کو ہم وقت سازی کے ل is ہے جب کہ میٹیکس مشترکہ وسائل کی حفاظت کے لئے استعمال ہوتا ہے۔
یہ API کوئی دلیل نہیں لیتا ہے اور SemaphoreHandle_t قسم کا متغیر واپس کرتا ہے ۔ اگر ممٹیکس نہیں بنایا جاسکتا ہے تو ، xSemaphoreCreateMutex () NULL واپس کردیں ۔
سیمفور ہینڈل_ٹ mutex_v؛ mutex_v = xSemaphoreCreateMutex ()؛
خاموشی اختیار کرنا:
جب کوئی ٹاسک کسی وسیل تک رسائی حاصل کرنا چاہتا ہے تو ، اس میں xSemaphoreTake () API کا استعمال کرکے ایک Mutex لے گا ۔ یہ بائنری سیمفور کی طرح ہے۔ اس میں دو پیرامیٹرز بھی لگتے ہیں۔
xSemaphore: ہمارے معاملے میں لے جانے والے گونگا کا نام mutex_v .
xTicksToWait: یہ زیادہ سے زیادہ وقت ہے جس میں یہ کام مسدود کی حالت میں خاموش کے دستیاب ہونے کا انتظار کرے گا۔ ہمارے منصوبے میں، ہم نے مقرر کرے گا xTicksToWait کرنے portMAX_DELAY تک التواء ریاست میں غیر معینہ مدت تک انتظار کرنا task_1 بنانا mutex_v دستیاب ہے.
گونگا دینا:
مشترکہ وسائل تک رسائی حاصل کرنے کے بعد ، کام کو خاموش کو واپس کرنا چاہئے تاکہ دوسرے کام اس تک رسائی حاصل کرسکیں۔ xSemaphoreGive () API Mutex کو واپس دینے کے لئے استعمال ہوتا ہے۔
xSemaphoreGive () فنکشن میں صرف ایک دلیل لی جاتی ہے جو ہمارے معاملے میں mtex_v میں دی جانے والی مکٹیکس ہے۔
مذکورہ بالا API کا استعمال کرتے ہوئے ، آریڈوینو IDE کا استعمال کرکے فری آر ٹی او ایس کوڈ میں Mutex کو نافذ کریں ۔
میٹیکس کوڈ کی وضاحت
یہاں اس حصے کا مقصد یہ ہے کہ سیریل مانیٹر کو مشترکہ وسائل کے طور پر استعمال کیا جائے اور کچھ پیغام کو پرنٹ کرنے کے لئے سیریل مانیٹر تک رسائی حاصل کرنے کے لئے دو مختلف کام ہوں۔
1. ہیڈر فائلیں سیمفور کی طرح ہی رہیں گی۔
# شامل کریں # شامل کریں
2. قسم کی ایک متغیر کا اعلان SemaphoreHandle_t Mutex کی اقدار کو ذخیرہ کرنے کے لئے.
سیمفور ہینڈل_ٹ mutex_v؛
v. باطل سیٹ اپ () میں ، 00 9600 ba باؤڈ ریٹ کے ساتھ سیریل مانیٹر شروع کریں اور xTaskCreate () API کا استعمال کرتے ہوئے دو ٹاسک (Task1 اور Task2) بنائیں ۔ پھر xSemaphoreCreateMutex () کا استعمال کرتے ہوئے ایک Mutex بنائیں ۔ مساوی ترجیحات کے ساتھ ایک کام بنائیں اور بعد میں اس نمبر کے ساتھ کھیلنے کی کوشش کریں۔
باطل سیٹ اپ () { سیریل.بیگین (9600)؛ mutex_v = xSemaphoreCreateMutex ()؛ if (mutex_v == NULL) { Serial.println ("خاموش نہیں بنایا جاسکتا")؛ } xTaskCreate (Task1، "ٹاسک 1"، 128، نل، 1، نل)؛ x ٹاسک کریٹ (ٹاسک 2 ، "ٹاسک 2" ، 128 ، این یو ایل ، 1 ، این یو ایل)؛ }
4. اب ، ٹاسک 1 اور ٹاسک 2 کے لئے ٹاسک فنکشنز بنائیں۔ اے میں جبکہ کام تقریب کے لوپ، سیریل مانیٹر پر ایک پیغام پرنٹنگ سے پہلے ہم استعمال کرتے ہوئے ایک Mutex لینا ہو xSemaphoreTake () کا استعمال کرتے ہوئے Mutex پھر پیغام کو پرنٹ اور پھر واپس آ xSemaphoreGive (). پھر تھوڑی دیر دیں۔
باطل ٹاسک 1 (باطل * پی وی پیرامیٹرز) { جبکہ (1) { xSemaphoreTake (mutex_v، portMAX_DELAY)؛ سیریل.پرنٹلن ("ٹاسک 1 سے ہائ")؛ xSemaphoreGive (mutex_v)؛ vTaskDelay (pdMS_TO_TICKS (1000))؛ } }
اسی طرح ، 500ms کی تاخیر کے ساتھ ٹاسک 2 فنکشن نافذ کریں۔
5. باطل لوپ () خالی رہے گا۔
اب ، اس کوڈ کو اردوینو یو این او پر اپ لوڈ کریں اور سیریل مانیٹر کھولیں۔
آپ دیکھیں گے کہ ٹاسک 1 اور ٹاسک 2 سے پیغامات پرنٹ ہو رہے ہیں۔
Mutex کے کام کو جانچنے کے لئے ، صرف xSemaphoreGive (mutex_v) پر تبصرہ کریں ؛ کسی بھی کام سے آپ دیکھ سکتے ہیں کہ پروگرام آخری پرنٹ میسج پر لٹکا ہوا ہے ۔
ارڈوینو کے ساتھ فری آر ٹی او ایس میں سیمفور اور میٹیکس کو اس طرح لاگو کیا جاسکتا ہے۔ سیمفور اور مکیکس کے بارے میں مزید معلومات کے ل you ، آپ فری آر ٹی او ایس کی سرکاری دستاویزات ملاحظہ کرسکتے ہیں۔
سیمفور اور خاموشوں کے لئے مکمل کوڈز اور ویڈیو ذیل میں دیا گیا ہے۔