آموزش تبدیل سریع کتابخانه های آردوینو به زبان C در کامپایلر CodeVision

بازگشت به آموزشگاه

به علت استفاده فراوان از پلتفورم آردوینو و گسترش آن در سال های اخیر، کتابخانه های جامع و کاملی برای آردوینو در سطح اینترنت و به صورت رایگان وجود دارد که به همین خاطر استفاده از پلتفورم آردوینو را در بسیاری از پروژه های الکترونیکی به گزینه اول مبدل کرده است. اما ما در این مقاله روش خاصی برای تبدیل کلیه کتابخانه های آردوینو ارائه می کنیم که با استفاده از آن میتوان کلیه کتابخانه های آردوینو را در مدت زمان کوتاهی به زبان C قابل استفاده در کامپایلر Codevision AVR تبدیل کرد. این روش برای اولین بار توسط الکترو ولت معرفی و تست شده است و با استفاده از آن میتوان با سرعت بالا و اتلاف وقت کم کتابخانه های آردوینو را به زبان C تبدیل نمود.

توجه : پیش نیاز فهم دقیق این مقاله تسلط بر برنامه نویسی به زبان C می باشد. لذا توصیه می شود جزوه میکروکنترلرهای AVR را مطالعه فرمایید.


تفاوت های ساختاری زبان C با ++C

در آردوینو کدنویسی به زبان ++C می باشد اما در CodeVision AVR زبان برنامه نویسی C است. بنابراین نیاز است تا با تفاوت های ساختاری زبان C و ++C آشنا شویم تا بتوانیم تغییرات لازم را انجام دهیم. در زبان ++C مفهوم جدیدی به نام شیء یا آبجکت مطرح می شود که در زبان C نیست. در واقع زبان C دارای 32 کلمه کلیدی است در حالی که زبان ++C دارای 63 کلمه کلیدی ( 31 کلمه کلیدی اضافه تر از زبان C ) می باشد. در شکل زیر این موضوع نشان داده شده است که در آن کلمات کلیدی زبان C به رنگ آبی و کلمات کلیدی زبان ++C به رنگ های آبی و قرمز می باشد.

از مهمترین تفاوت های این دو زبان برنامه نویسی میتوان به موارد زیر اشاره کرد :

  • پسوند فایل ها در برنامه C به صورت c. است در حالی که پسوند فایل در برنامه ++C به صورت cpp. است.
  • در زبان برنامه نویسی C، یک برنامه بزرگ به بخش های کوچکتری تقسیم شده که تابع ( Function ) نام دارند اما در زبان برنامه نویسی ++C، یک برنامه بزرگ به بخش های کوچکتری تقسیم شده که کلاس ( Class ) و شیء ( Object ) نامیده می شوند که توابع را در بر می گیرند و توابع در درون کلاس وجود دارند. همچنین در زبان ++C زمانی که یک شیء بوجود می آید تابعی به نام Constructor در صورت وجود اجرا می شود.
  • ساختار ها ( Structure ) در زبان C ویژگی اعلان تابع را فراهم نمی کند اما در ساختار های زبان ++C ویژگی اعلان تابع وجود دارد و میتوان در درون ساختار تابعی را به عنوان عضوی از ساختار نوشت.
  • در زبان C نام تمامی توابع و بایستی منحصر به فرد باشد اما در زبان ++C نام توابع در صورت متفاوت بودن ورودی یا خروجی آن توابع میتواند یکسان باشد.
  • در زبان C نوع داده boolean و string وجود ندارد اما در زبان ++C نوع داده boolean و string وجود دارد.
  • در زبان C در هنگام تعریف بدنه توابع در صورتی که آرگومان تابع خالی باشد استفاده از کلمه void اجباری است در حالی که در زبان ++C گذاشتن این کلمه اجباری نیست.
  • در زبان C اعلان توابع درون هدر فایل با پسوند h. قرار می گیرد و تعریف توابع در فایل c. اما در ++C تعریف توابع میتواند درون کلاس موجود در هدرفایل نیز صورت بگیرد و در صورت تعریف توابع یک کلاس درون فایل c. بایستی از دو تا کاراکتر دو نقطه پشت هم ( :: ) استفاده نمود.
  • زبان C مخفی سازی اطلاعات را پشتیبانی نمی کند و داده ها را میتوان از هر جایی تغییر داد اما در زبان ++C داده ها با استفاده از کلمات کلیدی public و private محصورسازی می شود و داده های private در کلاس تعریف شده مخفی می شوند.

قواعد تبدیل زبان ++C در آردوینو به زبان C در کدویژن

برای تبدیل کدهای آردوینو از ++C به کد C در کامپایلر CodeVision قواعد زیر در نظر گرفته و گام به گام اجرا می شود :

  • چون در زبان C کلاس وجود ندارد، بایستی با حذف کلاس ها آن ها را به یک سری توابع و متغیر های عمومی تبدیل کرد. بنابراین هر کجا کلمات کلیدی class و public و private و protected مشاهده شوند کامنت می شوند.
  • برای عدم تداخل نام توابع و منحصر به فرد شدن آن ها در زبان C، نام کلاس موجود در ++C به همراه کاراکتر آندرلاین به ابتدای نام کلیه توابع درون کلاس اضافه می شود.
  • هنوز هم ممکن است توابعی با اسم یکسان ولی با آرگومان های متفاوت وجود داشته باشد به انتهای نام این توابع اعداد 1و2و3و… اضافه می شود.
  • ممکن است در اعلان برخی از توابع مقادیر پیش فرضی برای برخی از آرگومان های توابع وجود داشته باشد که در صورت عدم فراخوانی آن آرگومان به عنوان مقدار پیش فرض وارد می شود که این ویژگی در زبان C وجود ندارد و بایستی ضمن حذف مقادیر پیش فرض از اعلان آن توابع، مقادیر پیش فرض را درون آرگومان توابع هنگام فراخوانی قرار داد.
  • بررسی شود که توابعی که آرگومان ورودی ندارند بایستی دارای کلمه کلیدی void در آرگومان ورودی تابع باشد.
  • تعریف توابع درون هدر فایل با پسوند h. غیر مجاز است بنابراین در صورت وجود تعریف بدنه تابعی در هدر فایل بایستی به فایل c. منتقل شود.
  • تعریف متغیرها درون هدر فایل با پسوند h. ممکن است تداخل ایجاد کند بنابراین بعد از حذف کلاس و تغییر نام بایستی آن ها را به فایل c. منتقل نمود.
  • استفاده از اشاره گر به کلاس ( یعنی <-this ) در زبان C غیر مجاز است و بایستی با نام کلاس موجود در ++C به همراه کاراکتر آندرلاین جایگزین شود.
  • در صورت استفاده از هدرفایل آردوینو به صورت <arduino.h> بایستی به شکل “arduino.h” تغییر یابد.
  • اشیای کلاس که با نام کلاس ساخته می شوند کامنت شده و در صورتی که کلاس دارای Constructor باشد بایستی در انتهای نام آن عبارت Init_ را اضافه نمود و در نظر داشت که قبل از استفاده از هر تابعی از آن کلاس بایستی آن را فراخوانی کرد.
  • در آخر هم فایل های arduino.h و arduino.c که توسط الکترو ولت مخصوص کامپایلر Codevision AVR نوشته شده است به پروژه اضافه می گردد.
  • کلیه خطاهای احتمالی کامپایلر بعد از افزودن فایل های c. به پروژه رفع می شود.

تبدیل یک کتابخانه نمونه آردوینو به زبان C

برای روشن شدن موضوع کتابخانه ریموت کنترل به نام RCSwitch را انتخاب کردیم سورس اصلی این کتابخانه برای آردوینو و به زبان ++C از طریق >>این لینک قابل دریافت می باشد. برای ملموس شدن موضوع و نحوه دقیق تبدیل از ++C به C ویدئوی زیر را مشاهده نمایید.


دانلود هدر فایل Arduino.h و Arduino.c برای CodeVision AVR

همانطور که در ویدئوی فوق مشاهده کردید، توابع و ثوابت آردوینو که شامل کلیه توابع و ثوابتی است که در سایت رسمی آردوینو یعنی https://www.arduino.cc/reference/en وجود دارد به زبان C برگردان شده و درون این فایل ها قرار گرفته است. لذا با دانلود این هدر فایل ها و استفاده از روش گفته شده در ویدئو که بسیاری از آن هم با ابزار replace امکان پذیر است، به سرعت تبدیل بالا دست پیدا خواهید کرد. از طریق لینک زیر میتوانید به کلیه هدر فایل های برگردان و تست شده از آردوینو به زبان C که قابل استفاده در نرم افزار CodeVision AVR است دسترسی یابید.

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

دیدگاه (2)

  • Hamed پاسخ

    سلام،خسته نباشید.هدر فایل Arduino.c و Arduino.h را از کجا میتوان دانلود کرد.داخل این سایتی که گفتید من پیدا نکردم

    1400-05-19 در 11:29
    • ادمین الکترو ولت پاسخ

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

      1400-05-19 در 14:24

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

بازگشت به آموزشگاه