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

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

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

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

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

 


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


 اولین قدم جهت استفاده از کتابخانه، نصب آن است. جهت نصب کتابخانه، باید به صفحه گیت هاب آن رفته و مطابق تصویر زیر گزینه code و سپس download zip را انتخاب کنید. برای ورود به صفحه کتابخانه، روی این لینک کلیک کنید.

 

پس از دانلود، در نرم افزار آردوینو گزینه sketch، سپس include library و پس از آن گزینه add zip library را انتخاب کنید. سپس در منوی باز شده، کتابخانه را که به صورت زیپ دانلود کرده اید انتخاب کنید تا توسط نرم افزار نصب شود.

 


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


پس از نصب کتابخانه، نوبت به بررسی الزامات و نکات فنی کتابخانه می رسد. همانطور که اطلاع دارید،  کتابخانه کورنومتر اقدام به زمانبندی می نماید. این کتابخانه جهت زمانبندی، از تابع millis استفاده می کند. البته این استفاده سبب ایجاد تداخل و یا از کار افتادن تابع نخواهد شد. با مطالعه سورس کدهای کتابخانه، در می یابیم که این کتابخانه تنها از خروجی تابع millis استفاده می کند. از طرف دیگر  این کتابخانه مستقل از معماری است. به عبارت دیگر، این کتابخانه بر روی کلیه بردهای مورد پشتیبانی پلتفرم آردوینو قابل اجراست. با توجه به آشنایی با این کتابخانه، قسمت بعد را به توابع کلیدی و کاربردی اختصاص می دهیم.

 


توابع کلیدی و کاربردی کتابخانه


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

شرح ورودی ها تابع
تابع سازنده کتابخانه

تعیین واحد شمارش در ورودی نخست، مقادیر معتبر:

MILLIS,MICROS,SECONDS

در صورتیکه ورودی دوم true شود، شمارش از لحظه ایجاد شی شروع می شود. این مقدار پیشفرض true دارد و با false کردن آن، شمارش با تعیین کاربر شروع خواهد شد.

ورودی نخست واحد زمانی

ورودی دوم: شروع شمارش

Chrono(Resolution resolution = MILLIS, bool startNow=true)
شکل دیگری از تابع سازنده

در این حالت واحد شمارش به صورت پیشفرض انتخاب شده که مقدار پیشفرض میلی ثانیه است. در صورتیکه ورودی را true قرار دهید، شمارش از لحظه ایجاد شی شروع می شود. در غیر اینصورت شمارش با تایید کاربر شروع خواهد شد.

ورودی از نوع بولین برای تایید شروع شمارش   Chrono(bool startNow)
شروع به شمارش با مقدار آفست(تاخیر) قرار گرفته در ورودی

مقدار پیشفرض: ۰

ورودی از نوع کلاس کتابخانه

توجه: در صورتیکه معماری برد ۳۲ بیت این ورودی ۶۴ بیتی بوده و در غیر اینصورت مقدار ۳۲ بیتی خواهد بود.

  void start(chrono_t offset = 0);
ری استارت کردن تایمر و شروع مجدد شمارش با آفست قرار گرفته در ورودی

مقدار پیشفرض: صفر

ورودی از نوع کلاس کتابخانه

توجه: در صورتیکه معماری برد ۳۲ بیت این ورودی ۶۴ بیتی بوده و در غیر اینصورت مقدار ۳۲ بیتی خواهد بود.

void restart(chrono_t offset = 0)
توقف شمارش بدون ورودی void stop()
بازگردانی شمارش تایمر بدون ورودی   void resume()
اضافه کردن زمان به کورنومتر جهت شمارش ورودی از نوع کلاس کتابخانه

توجه: در صورتیکه معماری برد ۳۲ بیت این ورودی ۶۴ بیتی بوده و در غیر اینصورت مقدار ۳۲ بیتی خواهد بود.

void add(chrono_t t)
با فراخوانی این تابع، مدت زمانی گذشته از شروع شمارش در خروجی قرار می گیرد. بدون ورودی chrono_t elapsed()
با فراخوانی این تابع، در صورتیکه مدت زمان سپری شده از فعال سازی تایمر از مقدار ورودی بیشتر باشد، خروجی true خواهد شد. ورودی از نوع کلاس کتابخانه

توجه: در صورتیکه معماری برد ۳۲ بیت این ورودی ۶۴ بیتی بوده و در غیر اینصورت مقدار ۳۲ بیتی خواهد بود.

bool hasPassed(chrono_t timeout)
این تابع همانند تابع فوق است، اما در صورتیکه ورودی دوم true شود و هرگاه زمان سپری شده از ورودی نخست بیشتر باشد، تایمر اوتوماتیک ریست خواهد شد. ورودی نخست از نوع کلاس کتابخانه

توجه: در صورتیکه معماری برد ۳۲ بیت این ورودی ۶۴ بیتی بوده و در غیر اینصورت مقدار ۳۲ بیتی خواهد بود.

ورودی دوم از نوع بولین جهت کنترل ریست تایمر

bool hasPassed(chrono_t timeout, bool restartIfPassed)
خروجی این تابع در صورتیکه کورنومتر در حال شمارش باشد، true خواهد شد. بدون ورودی bool isRunning()

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

 


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


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

 //اضافه کردن کتابخانه Chrono myChrono; //ایجاد شی از کلاس کتابخانه، در این حالت از مقادیر پیشفرض استفاده می شود. void setup() { }  void loop() {  // کنترل اینکه آیا زمان از ۱۰۰۰ میلی ثانیه یا یک ثانیه گذشته   if (myChrono.hasPassed(1000) ) { //      myChrono.restart();  // ری استارت تایمر    } }" >#include <Chrono.h> //اضافه کردن کتابخانه
Chrono myChrono; //ایجاد شی از کلاس کتابخانه، در این حالت از مقادیر پیشفرض استفاده می شود.
void setup() {
}

void loop() {
 // کنترل اینکه آیا زمان از ۱۰۰۰ میلی ثانیه یا یک ثانیه گذشته
  if (myChrono.hasPassed(1000) ) { // 
    myChrono.restart();  // ری استارت تایمر 
  }
}

 


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


لینک خرید انواع برد ESP، کلیک کنید

لینک خرید انواع برد آردوینو، کلیک کنید.

 


جمع بندی


در مجموعه آموزش های تحلیل و بررسی کتابخانه ها، در این قسمت به یکی از مهم ترین و کلیدی ترین کتابخانه ها پرداختیم. کتابخانه Chrono یک کتابخانه جهت طراحی و پیاده سازی یک کورنومتر است. به کمک این کتابخانه می توان بدون متوقف شدن برنامه و به صورت  non blocking، به اجرای برنامه بپردازیم. در این آموزش ابتدا به نحوه نصب کتابخانه و بلافاصله الزامات فنی آن پرداختیم. سپس در ادامه توابع کلیدی و کاربردی مورد تحلیل و بررسی قرار گرفت. در نهایت با ارائه مثالی، نحوه استفاده از توابع را در مثال های عملی مشاهده نمودیم.

 

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

 

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

معین صابری

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

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

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