- فری آر ٹی اوس اردوینو میں ایک ٹاسک کو حذف کرنا
- فری آر ٹی او ایس میں قطار کیا ہے؟
- فری آر ٹی او ایس میں قطار بنانا
- سرکٹ ڈایاگرام
- آرڈینوو IDE میں فری آر ٹی او ایس قطار کو نافذ کرنا
پچھلے سبق میں ، ہم نے آرڈینوو یونو میں فری آر ٹی او ایس متعارف کرایا اور ٹمٹمانے والی ایل ای ڈی کے لئے ایک کام تشکیل دیا۔ اب ، اس ٹیوٹوریل میں ، ہم RTOS APIs کے پیشگی تصورات میں مزید غوطہ لائیں گے اور مختلف کاموں کے مابین مواصلت کے بارے میں جانیں گے۔ یہاں ہم قطار کے بارے میں بھی سیکھتے ہیں کہ ڈیٹا کو ایک کام سے دوسرے میں منتقل کیا جائے اور اردووینو کے ساتھ 16x2 LCD اور LDR میں مداخلت کرکے قطار API کے کام کا مظاہرہ کریں ۔
کوئز کے بارے میں گفتگو کرنے سے پہلے آئیے ، ایک اور فری آر ٹی او ایس API دیکھیں جو تفویض کردہ کام ختم ہونے پر کاموں کو حذف کرنے میں مددگار ہے۔ بعض اوقات الاٹ شدہ میموری کو آزاد کرنے کے ل the کام کو حذف کرنے کی ضرورت ہوتی ہے۔ پچھلے سبق کے تسلسل میں ، ہم ایک ہی کام کو حذف کرنے کے لئے اسی کوڈ میں vTaskDelete () API فنکشن استعمال کریں گے ۔ کوئی کام vTaskDelete () API فنکشن کا استعمال خود کو حذف کرنے کے لئے ، یا کوئی اور کام کرسکتا ہے۔
اس API کو استعمال کرنے کے ل you ، آپ کو FreeRTOSConfig.h فائل تشکیل دینا ہوگی۔ اس فائل کو اطلاق کے مطابق فری آر ٹی او ایس کے مطابق بنانے کے لئے استعمال کیا جاتا ہے۔ اس کا استعمال شیڈیولنگ الگورتھم اور بہت سارے دوسرے پیرامیٹرز کو تبدیل کرنے کے لئے کیا جاتا ہے۔ فائل ارڈینو ڈائرکٹری میں مل سکتی ہے جو عام طور پر آپ کے کمپیوٹر کے دستاویزات فولڈر میں دستیاب ہے۔ میرے معاملے میں ، یہ ذیل میں دکھائے جانے والے \ دستاویزات \ ارڈینو \ لائبریریوں \ فری آر ٹی او ایس \ ایس سی آر میں دستیاب ہے ۔
اب، کسی بھی ٹیکسٹ ایڈیٹر کا استعمال کرتے ہوئے اس فائل کو کھولنے اور تلاش کرتے ہیں # وضاحت INCLUDE_vTaskDelete اور اس کی قیمت ہے براہ کرم یقینی بنائیں '1' (1 اسباب کو فعال اور 0 اسباب غیر فعال). یہ پہلے سے 1 ہے لیکن اس کی جانچ پڑتال کرتی ہے۔
پیرامیٹرز کو ترتیب دینے کے ل config ہم اپنے اگلے سبق میں یہ تشکیل فائل کثرت سے استعمال کریں گے۔
اب ، دیکھیں کہ کسی کام کو کیسے حذف کریں۔
فری آر ٹی اوس اردوینو میں ایک ٹاسک کو حذف کرنا
کسی کام کو حذف کرنے کے ل we ، ہمیں vTaskDelete () API فنکشن استعمال کرنا ہوگا۔ اس میں صرف ایک دلیل لی جاتی ہے۔
vTaskDelete (TaskHandle_t pxTaskToDelete)؛
pxTaskToDelete: یہ کام کا ہینڈل ہے جسے حذف کرنا ہے۔ یہ xTaskCreate () API کی 6 ویں دلیل کی طرح ہے ۔ پچھلے سبق میں ، یہ استدلال NULL کے طور پر مرتب کیا گیا ہے لیکن آپ کسی بھی نام کا استعمال کرکے ٹاسک کے مندرجات کا پتہ منتقل کرسکتے ہیں۔ اگر آپ ٹاسک 2 کے لئے ٹاسک ہینڈل مرتب کرنا چاہتے ہیں تو بتادیں کہ جیسے اعلان کیا گیا ہے
ٹاسک ہینڈل_ کسی بھی نام کی؛ مثال: TaskHandle_t xTask2Handle؛
اب ، vTaskCreate () API میں 6 ویں دلیل مرتب کی گئی
xTaskCreate (ٹاسک بلنک 2 ، "ٹاسک 2" ، 128 ، NULL ، 1 ، اور xTask2 ہینڈل)؛
آپ کے ذریعہ دیئے گئے ہینڈل کا استعمال کرتے ہوئے اب اس کام کے مواد تک رسائی حاصل کی جاسکتی ہے۔
نیز ، کوئی ٹاسک ایک درست ٹاسک ہینڈل کی جگہ NULL پاس کرکے خود کو حذف کرسکتا ہے۔
اگر ہم خود ٹاسک 3 سے ٹاسک 3 کو حذف کرنا چاہتے ہیں تو آپ کو vTaskDelete (NULL) لکھنے کی ضرورت ہے ۔ ٹاسک 3 فنکشن کے اندر لیکن اگر آپ ٹاسک 3 سے ٹاسک from کو حذف کرنا چاہتے ہیں تو پھر vTaskDelete (xTask3Handle) لکھیں ۔ ٹاسک 2 فنکشن کے اندر۔
پچھلے ٹیوٹوریل کوڈ میں ، ٹاسک 2 کو خود ہی ٹاسک 2 سے حذف کرنے کے لئے ، صرف vTaskDelete (NULL) شامل کریں ۔ میں باطل TaskBlink2 (باطل * pvParameters) تقریب. تب مندرجہ بالا فنکشن اس طرح نظر آئے گا
باطل ٹاسک بلنک 2 (باطل * پی وی پیرامیٹرز) { سیریل.پرنٹل ("ٹاسک 2 چل رہا ہے اور اسے حذف کرنے والا ہے")؛ vTaskDelete (NULL)؛ پن موڈ (7 ، آؤٹپٹ)؛ جبکہ (1) { ڈیجیٹل رائٹ (7 ، ہائی)؛ vTaskDelay (300 / portTICK_PERIOD_MS)؛ digitalWrite (7، کم)؛ vTaskDelay (300 / portTICK_PERIOD_MS)؛ } }
اب ، کوڈ اپ لوڈ کریں اور ایل ای ڈی اور سیریل مانیٹر دیکھیں۔ آپ دیکھیں گے کہ اب دوسرا ایل ای ڈی چمک نہیں رہا ہے اور ڈیلیٹ API کا سامنا کرنے کے بعد ٹاسک 2 کو حذف کردیا گیا ہے۔
لہذا اس API کا استعمال خاص کام کی پھانسی کو روکنے کے لئے کیا جاسکتا ہے۔
اب ، قطار کے ساتھ شروع کریں۔
فری آر ٹی او ایس میں قطار کیا ہے؟
قطار اعداد و شمار کا ڈھانچہ ہے جو طے شدہ سائز کے عناصر کی محدود تعداد رکھ سکتا ہے اور اسے ایف ای ایف او اسکیم میں چلایا جاتا ہے (فرسٹ ان فرسٹ آؤٹ)۔ قطاریں ایک ٹاسک ٹو ٹاسک ، ٹاسک ٹو ٹو رکاوٹ ، اور رکاوٹ ٹو ٹاسک مواصلاتی میکانزم فراہم کرتی ہیں۔
عناصر کی قطار کی زیادہ سے زیادہ تعداد پکڑ سکتی ہے جسے اس کی "لمبائی" کہا جاتا ہے۔ قطار بننے پر ہر عنصر کی لمبائی اور جسامت دونوں طے ہوتی ہیں۔
ڈیٹا کی منتقلی کے لئے قطار کو کس طرح استعمال کیا جاتا ہے اس کی ایک مثال فری آر ٹی او ایس دستاویزات میں اچھی طرح پیش کی گئی ہے جو یہاں پایا جاسکتا ہے۔ آپ دی گئی مثال کو آسانی سے سمجھ سکتے ہیں۔
قطار کو سمجھنے کے بعد ، آئیے قطار بنانے کے عمل کو سمجھنے کی کوشش کریں اور اسے ہمارے فری آر ٹی او ایس کوڈ میں لاگو کرنے کی کوشش کریں۔
فری آر ٹی او ایس میں قطار بنانا
پہلے ، اس مسئلے کے بیان کی وضاحت کریں جسے فری آر ٹی او ایس قطار اور اردوینو یونو کی مدد سے نافذ کیا جانا ہے۔
ہم ایل ڈی آر سینسر کی مالیت 16 * 2 LCD پر پرنٹ کرنا چاہتے ہیں ۔ تو اب وہاں دو کام ہیں
- ٹاسک 1 کو ایل ڈی آر کے مطابق قدر مل رہے ہیں۔
- ٹاسک 2 ایل سی ڈی پر ینالاگ قیمت پرنٹ کر رہا ہے۔
تو ، یہاں قطار اپنا کردار ادا کرتی ہے کیونکہ ٹاسک 1 کے ذریعہ تیار کردہ ڈیٹا کو ٹاسک 2 پر بھیجنے کے لئے۔ ٹاسک 1 میں ، ہم قطار کو ینالاگ قدر بھیجیں گے اور ٹاسک 2 میں ، ہم اسے قطار سے وصول کریں گے۔
قطار کے ساتھ کام کرنے کے لئے تین کام ہیں
- ایک قطار بنانا
- قطار میں ڈیٹا بھیجنا
- قطار سے ڈیٹا وصول کرنا
قطار بنانے کیلئے ، xQueueCreate () فنکشن API استعمال کریں۔ اس میں دو دلائل لیتے ہیں۔
xQueueCreate (UBaseType_t uxQueueLength، UBaseType_t uIIItSize)؛
uxQueueLength: زیادہ سے زیادہ تعداد میں آئٹمز جو قطار بنائے جارہے ہیں وہ کسی بھی ایک وقت میں پکڑ سکتے ہیں۔
uxItemSize: ہر ڈیٹا آئٹم کے بائٹس کا سائز جو قطار میں محفوظ کیا جاسکتا ہے۔
اگر یہ فنکشن NULL واپس کرتا ہے تو پھر قطار ناکافی میموری کی وجہ سے نہیں بنتی ہے اور اگر یہ غیر NULL قدر واپس کرتا ہے تو قطار کامیابی کے ساتھ تشکیل دے دی جاتی ہے۔ اس ریٹرن ویلیو کو متغیر میں اسٹور کریں جیسا کہ ذیل میں دکھائے جانے والے قطار تک رسائی حاصل کرنے کے لئے اسے ہینڈل کے طور پر استعمال کریں۔
QueueHandle_t قطار 1؛ قطار 1 = xQueueCreate (4، سائز ((انٹ)))؛
اس سے انٹی سائز (ہر بلاک کے 2 بائٹ) کی ہیپ میموری میں 4 عنصر کی قطار پیدا ہوگی اور واپسی کی قیمت قطار 1 ہینڈل متغیر میں اسٹور ہوگی۔
2. فری آر ٹی او ایس میں ڈیٹا کو قطار میں بھیجنا
اقدار کو قطار میں بھیجنے کے ل Free ، اس مقصد کے لئے فری آر ٹی او ایس کے پاس API کی 2 اشکال ہیں۔
- xQueueSendToBack (): قطار کے پیچھے (دم) پر ڈیٹا بھیجنے کے لئے استعمال کیا جاتا ہے۔
- xQueueSendToFront (): قطار کے سامنے (سر) پر ڈیٹا بھیجنے کے لئے استعمال کیا جاتا ہے۔
اب ، xQueueSend () برابر ہے ، اور بالکل اسی طرح ، xQueueSendToBack ()۔
یہ سب APIs 3 دلائل لیتے ہیں۔
xQueueSendToBack (QueueHandle_t xQueue، Const void * pvItemToQueue، TickType_t xTicksToWait)؛
xQueue: قطار کا ہینڈل جس میں ڈیٹا بھیجا جارہا ہے (لکھا ہوا ہے)۔ یہ متغیر وہی ہے جو xQueueCreate API کی واپسی کی قیمت کو اسٹور کرنے کے لئے استعمال ہوتا ہے۔
pvItemToQueue: قطار میں کاپی کرنے کے لئے اعداد و شمار کے لئے ایک پوائنٹر.
xTicksToWait: قطار میں جگہ دستیاب ہونے کا انتظار کرنے کے لئے ٹاسک کا زیادہ سے زیادہ وقت مسدود حالت میں رہنا چاہئے۔
مقرر xTicksToWait کرنے portMAX_DELAY کام (باہر وقت بغیر) غیر معینہ مدت تک انتظار کرنے کا سبب بنے گی، بشرطیکہ INCLUDE_vTaskSuspend میں 1 پر سیٹ ہے FreeRTOSConfig.h پھر آپ کو میکرو استعمال کر سکتے ہیں () pdMS_TO_TICKS ticks کی میں وضاحت ایک ایسے وقت میں ملی سیکنڈز میں بیان ایک ایسے وقت میں تبدیل کرنے کے لئے.
3. فری آر ٹی او ایس میں قطار سے ڈیٹا وصول کرنا
قطار سے آئٹم وصول کرنے (پڑھنے) کے ل x ، xQueueReLive () استعمال کیا جاتا ہے۔ جو چیز موصول ہوتی ہے اسے قطار سے ہٹا دیا جاتا ہے۔
یہ API بھی تین دلائل لیتے ہیں۔
xQueueReLive (QueueHandle_t xQueue، void * Const pvBuffer، TickType_t xTicksToWait)؛
پہلے اور تیسرے دلائل API بھیجنے کے مترادف ہیں۔ صرف دوسری دلیل ہی مختلف ہے۔
const pvBuffer: میموری کا ایک اشارہ جس میں موصولہ ڈیٹا کاپی کیا جائے گا۔
امید ہے کہ آپ نے تینوں APIs کو سمجھا ہوگا۔ اب ، ہم ان APIs کو آرڈینوو IDE میں نافذ کریں گے اور اس مسئلے کے بیان کو حل کرنے کی کوشش کریں گے جو ہم نے اوپر بیان کیا ہے۔
سرکٹ ڈایاگرام
روٹی بورڈ پر اس طرح نظر آتی ہے:
آرڈینوو IDE میں فری آر ٹی او ایس قطار کو نافذ کرنا
آئیے اپنی درخواست کے لئے کوڈ لکھنا شروع کریں۔
1. سب سے پہلے ، آردوینو IDE کھولیں اور Ardino_FreeRTOS.h ہیڈر فائل کو شامل کریں۔ اب ، اگر قطار کی طرح کوئی دانا شبیہہ استعمال کیا جاتا ہے تو پھر اس کی ہیڈر فائل شامل کریں۔ چونکہ ہم 16 * 2 LCD استعمال کررہے ہیں لہذا اس کے لئے لائبریری بھی شامل کریں۔
# شامل کریں # شامل کریں
2. قطار کے مندرجات کو اسٹور کرنے کے لئے قطار ہینڈل کا آغاز کریں۔ نیز ، LCD پن نمبر شروع کریں۔
QueueHandle_t قطار_1؛ لیکویڈ کرسٹل ایل سی ڈی (7 ، 8 ، 9 ، 10 ، 11 ، 12)؛
3. باطل سیٹ اپ () میں ، ایل سی ڈی اور سیریل مانیٹر کو 9600 بوڈ ریٹ کے ساتھ شروع کریں۔ متعلقہ API کا استعمال کرتے ہوئے ایک قطار اور دو کام بنائیں۔ یہاں ہم عددی قسم کے ساتھ سائز 4 کی قطار بنائیں گے۔ مساوی ترجیحات کے ساتھ ایک کام بنائیں اور بعد میں اس نمبر کے ساتھ کھیلنے کی کوشش کریں۔ آخر میں ، جیسا کہ ذیل میں دکھایا گیا ہے شیڈیولر شروع کریں۔
باطل سیٹ اپ () { سیریل.بیگین (9600)؛ lcd.begin (16 ، 2)؛ قطار قطار_ = xQueueCreate (4، سائز ((انٹ)))؛ اگر (قطار_1 == NULL) ial Serial.println ("قطار نہیں بنائی جا سکتی")؛ } xTaskCreate (TaskDisplay، "Display_task"، 128، نل، 1، نل)؛ xTaskCreate (TaskLDR، "LDR_task"، 128، NULL، 1، NULL)؛ vTaskStartScheduler ()؛ }
4. اب ، دو کام ٹاسک ڈسپلے اور ٹاسک ایل ڈی آر بنائیں ۔ میں TaskLDR تقریب، ہم لیڈر Arduino اقوام متحدہ کے A0 پن سے منسلک ہے کے طور پر ایک متغیر میں ینالاگ پن A0 پڑھیں. اب متغیر میں ذخیرہ شدہ قدر کو xQueueSend API میں پاس کرکے بھیجیں اور ذیل میں دکھائے گئے vTaskDelay () API کا استعمال کرتے ہوئے 1 سیکنڈ کے بعد ریاست کو بلاک کرنے کے لئے ٹاسک بھیجیں ۔
باطل ٹاسک ایل ڈی آر (باطل * پی وی پیرامیٹرز) current موجودہ کرنٹ_ٹینٹیٹی ؛ جبکہ (1) { Serial.println ("Task1")؛ کرنٹ_ انٹنسٹی = اینالاگ ریڈ (A0)؛ سیریل.پرنٹلن (موجودہ_قابلیت)؛ xQueueSend (قطار_1 ، اور موجودہ_طاقت ، پورٹ MAX_DELAY)؛ vTaskDelay (1000 / portTICK_PERIOD_MS)؛ } }
Similarly. اسی طرح ، ٹاسک ڈسپلے کے لئے ایک فنکشن بنائیں اور ایک متغیر میں قدریں وصول کریں جو xQueueReLive فنکشن میں منتقل کی گئیں ۔ نیز ، xQueueReLive () pdPASS واپس کرتا ہے اگر قطار سے ڈیٹا کامیابی کے ساتھ وصول کیا جاسکتا ہے اور اگر کوئی قطار خالی ہے تو غلطی سے واپسی کرتا ہے۔
اب ، lcd.print () فنکشن کا استعمال کرکے LCD میں اقدار ڈسپلے کریں ۔
باطل ٹاسک ڈس پلے (باطل * پی وی پیرا میٹر) { شدت کی شدت = 0؛ جبکہ (1) { Serial.println ("Task2")؛ اگر (xQueueReLive (قطار_1 ، اور شدت ، portMAX_DELAY) == پی ڈی پی اے ایس ایس) { lcd.clear ()؛ lcd.setCursor (0 ، 0)؛ lcd.print ("شدت:")؛ lcd.setCursor (11 ، 0)؛ lcd.print (شدت)؛ } } }
یہی ہے. ہم نے قطار کے نفاذ کا کوڈنگ حصہ مکمل کرلیا ہے۔ کام کرنے والی ویڈیو والا مکمل کوڈ آخر میں پایا جاسکتا ہے۔
سرکٹ ڈایاگرام کے مطابق اب ، ایل ڈی سی اور ایل ڈی آر کو ارڈینو یو این او کے ساتھ مربوط کریں۔ سیریل مانیٹر کھولیں اور کاموں کا مشاہدہ کریں۔ آپ دیکھیں گے کہ کاموں میں تبدیلی آرہی ہے اور روشنی کی شدت کے مطابق ایل ڈی آر کی قدریں بدل رہی ہیں۔
نوٹ: لائبریریوں کے اندر کام کرنے میں تاخیر کے سبب مختلف سینسروں کے لئے بنائی گئی زیادہ تر لائبریریوں کو فری آر ٹی او ایس کرنل کی سہولت حاصل نہیں ہے۔ تاخیر سی پی یو کو مکمل طور پر روکنے میں ناکام بناتی ہے ، لہذا ، فری آر ٹی او ایس دانا بھی کام کرنا چھوڑ دیتا ہے اور کوڈ مزید کام نہیں کرے گا اور اس سے بدتمیزی شروع ہوتی ہے۔ لہذا ، ہمیں فری آر ٹی او ایس کے ساتھ کام کرنے کے لئے لائبریریوں کو تاخیر سے پاک بنانا ہوگا۔