تحلیل کتابخانه

تحلیل و بررسی کتابخانه noDelay.h

nodelay-h-arduino-library-digispark
نوشته شده توسط معین صابری

اهمیت زمانبندی در اجرای برنامه ها امری حائز اهمیت و غیر قابل چشم پوشی برای هر برنامه نویس به شمار می رود. به کمک زمانبندی TASK ها، می توان یک برنامه پیچیده را به بهینه ترین شکل ممکن و به دور از پیچیدگی های سیستم عامل، اجرا نمود. به عنوان مثال، در برنامه هایی نظیر کنترل وضعیت چندین سرور موتور و در عین حال فرمان به استپر موتورها، زمانبندی بسیار موردی کلیدی خواهد بود. پیش از این در آموزش هایی به تحلیل و بررسی کتابخانه های مختص به زمانبندی پرداخته ایم. به عنوان مثال در تحلیل کتابخانه CountDown.h، این کتابخانه کلیدی  جهت زمانبندی را مورد بررسی قرار دادیم. در ادامه نیز به کمک کتابخانه everytime.h زمانبندی را به شکلی دیگر اجرا نمودیم. در این آموزش اما به تحلیل و بررسی کتابخانه noDelay.h می پردازیم. این کتابخانه زمانبندی جهت اجرای برنامه ها را به شکلی ساده مدیریت می کند. در این آموزش همانند سایر آموزش های تحلیل و بررسی کتابخانه ها، این کتابخانه را تحلیل خواهیم نمود.  در ادامه، با مرجع تخصصی رزبری پای و آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 


نصب کتابخانه noDelay.h


به منظور استفاده از کتابخانه، ابتدا می بایست آن را نصب کنیم. در این قسمت به نصب کتابخانه با جستجو در مخازن آردوینو می پردازیم. به همین منظور، ابتدا در نرم افزار آردوینو بر روی گزینه Tools و سپس Manage Libraries را کلیک کنید. پس از کلیک بر روی این گزینه، با تصویر زیر رو به می شوید. این منو کتابخانه های در دسترس را به شما نشان می دهد. شما نیز می توانید با جستجوی نام کتابخانه مورد نظر خود، آن را در مخازن آردوینو یافته و سپس نصب کنید.

روش نصب کتابخانه PCF8574.h - دیجی اسپارک

 

مطابق فلش مشخص شده در تصویر فوق، در کادر جستجو عبارت noDelay را تایپ کنید. پس از چند لحظه با تصویر زیر رو به رو می شوید. در این مرحله، کتابخانه را با کلیک بر روی گزینه install، نصب کنید.

کتابخانه noDelay.h در آردوینو - دیجی اسپارک

 


الزامات و نکات فنی کتابخانه noDelay.h


کتابخانه noDelay جهت زمانبندی و اجرا، از تابع millis استفاده می کند. به کمک این تابع زمان را دریافت کرده و بسته به نیاز به کاربر، خروجی مد نظر وی را ایجاد کند. این کتابخانه در حقیقت با دریافت زمان مورد نظر از کاربر، هرگاه زمان تعیین شده به سر رسید خود برسد، خروجی مناسب را در تابع مخصوص به این کار ایجاد خواهد کرد. در حیقت این کتابخانه با روالی که بدون blocking است، تاخیر مورد نظر کاربر را ایجاد خواهد نمود.

نکات فنی کتابخانه noDelay.h در آردوینو - دیجی اسپارک

 

کتابخانه noDelay، آنچنان که پیشتر هم گفته شد، جهت زمانبندی از تابع millis بهره می برد. بنابراین این کتابخانه بدون وابستگی به معماری، بر روی پردازنده های مبتنی بر AVR و ESP قابل اجرا خواهد بود. به عبارت دیگر این کتابخانه بر روی بردهای آردوینو UNO، MEGA و سری ESP نظیر ESP8266 و ESP32 قادر به اجرا خواهد بود. جهت راه اندازی و کار با این کتابخانه توابعی توسعه یافته که در قسمت بعد به تحلیل این توابع کلیدی می پردازیم.

 


تحلیل و بررسی توابع کلیدی و کاربرد


پس از بررسی الزامات فنی، نوبت به تحلیل و بررسی توابع کلیدی کتابخانه می رسد. این توابع در جدول زیر قرار می گیرند.

شرح ورودی ها تابع
این تابع در حقیقت تابع سازنده از کلاس کتابخانه است. ورودی dtime مدت زمان شمارش و ورودی دوم تابعی که پس از اتمام شمارش باید اجرا شود را تعیین می کند. ورودی تابع اختیاری و ورودی زمان بر حسب میلی ثانیه است. dtime: تعیین مدت زمان تاخیر

funcall: تابع جهت اجرا زمانیکه زمان سر به رسد.

noDelay(unsigned long dtime, funTocall funcall);
به کمک این تابع بین دو سر رسید زمان می توان تاخیر ایجاد نمود. به عبارت دیگر هرگاه زمان شمارش تمام شود، تا اجرای مجدد شمارش می توان تاخیری ایجاد نمود. این تاخیر در ورودی این تابع قرار می گیرد. ورودی جهت تعیین زمان void setdelay(unsigned long dtime)
به کمک این تابع شمارش از ابتدا آغاز می گردد. به عبارت دیگر تا پیش از سر رسید شمارش، چنانچه این تابع فراخوانی گردد شمارش از ابتدا آغاز می گردد. بدون ورودی void start()
این تابع شمارش را متوقف می کند. همچنین اجرای توابع در زمان سر رسید تایمر نیز به کمک این تابع متوقف خواهد شد. بدون ورودی void stop()
این تابع بررسی می کند که آیا زمان سپری شده یا خیر، در صورتیکه زمان مد نظر کاربر طی شده باشد، خروجی تابع true خواهد شد. همچنین با فراخوانی این تابع، در صورت رسیدن زمان مد نظر کاربر، تابع تعریف شده اجرا خواهد شد. بدون ورودی bool update()

 

پس از بررسی توابع کلیدی و کاربردی، نوبت به اجرای نمونه برنامه می رسد. در قسمت بعدی به این موضوع می پردازیم.

 


اجرای یک نمونه برنامه


پس از بررسی توابع کلیدی، نوبت به اجرای یک برنامه می رسد. در این برنامه وضعیت یک LED هر یک ثانیه یکبار به حال خاموش/ روشن تغییر می کند.

#include<NoDelay.h>   //اضافه کردن کتابخانه

void ledBlink();//این تابع در زمان سر رسید تاخیر، اجرا می شود. به عنوان مثال با تنظیم زمان برای یک ثانیه و رسیدن یک ثانیه، این تابع اجرا خواهد شد. 

noDelay LEDtime(1000, ledBlink);//این تابع تابع سازنده بوده که باید از کلاس آن یک شی تعریف گردد. ورودی اول تاخیر و ورودی دوم تابع جهت اجرا را نمایش می دهد. توجه کنید که تاخیر به صورت بلاک شدن برنامه نیست.
int LEDpin = 13;   //تعیین پایهشماره ۱۳ جهت تغییر وضعیت LED روی آردوینو
int ledState = LOW;  //تعیین وضعیت پیش فرض LED

void setup() {
  pinMode(LEDpin, OUTPUT);    //تعیین پایه LED به عنوان خروجی
}

void loop() {
    LEDtime.update();//این تابع به طور مدامو فراخوانی شده و هرکاه که زمان یک ثانیه فرا برسد، تابع ledBlink را اجرا می کند.
}

void ledBlink()   //تابع تغییر وضعیت LED
{
	// در صورتیکه LED هر حالت ینسبت به قبل داشته باشدف آن حالت تغییر می کند. بنابراین LED خاموش و روشن خواهد شد.
    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;
    digitalWrite(LEDpin, ledState);
}

 


 لوازم مورد نیاز


انواع برد آردوینو

انواع برد ESP

 


جمع بندی


در مجموعه آموزش های تحلیل و بررسی کتابخانه ها، این آموزش را به بررسی کتابخانه noDelay اختصاص دادیم. کتابخانه noDelay یک کتابخانه کلیدی و کاربردی جهت زمانبندی اجرای توابع و دستورات است. این کتابخانه بدون ایجاد توقف در برنامه، تاخیر مد نظر کاربر را برای اجرا، ایجاد می کند. در این آموزش، ابتدا به نحوه نصب کتابخانه noDelay پرداختیم. سپس در ادامه الزامات فنی و نحوه کار راین کتابخانه را از نظر گذراندیم. پس از این قسمت، توابع کلیدی و کاربردی کتابخانه را تحلیل و بررسی نمودیم. در نهایت با ارایه یک مثال، نحوه استفاده از توابع در مثال های عملی بررسی گردید.

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 

درباره نویسنده

معین صابری

کارشناسی ارشد رشته معماری سیستم های کامپیوتری

مالي که ز تو کس نستاند، علم است
حرزي که تو را به حق رساند، علم است
جز علم طلب مکن تو اندر عالم
چيزي که تو را ز غم رهاند، علم است
(شیخ بهایی)

تبادل نظر و رفع عیب با ثبت دیدگاه