از دهه ۱۹۹۰سیستمهای کنترل صنعتی، با هدف کاهش هزینههای تعمیر و نگهداری، کاهش پیچیدگی معماری سیستم کنترل و در عین حال بهینهسازی سرعت و دقت پردازش، و همچنین استفاده بهینه از فضا و انرژی، به استفاده از سیستمهای Embedded روی آوردند. به طور کلی سیستمهای Embedded این قابلیت را برای سازندگان سیستمهای کنترل صنعتی به وجود آوردهاند که با برنامهریزی و شخصیسازی سختافزار این سیستمها، کیفیت و سرعت پردازش و امنیت و ایمنی را افزایش دهند. ابزارهای متن باز، امکانات فوق را به طور گستردهای در حوزه نرمافزار سیستمهای Embedded در اختیار قرار میدهد. به همین دلیل استفاده از ابزارهای متن باز برای سیستمهای Embedded به سرعت در حال گسترش است.
در این مقاله برخی از این ابزارها را که در سیستمهای کنترل صنعتی کاربرد گستردهای دارند معرفی میکنیم.
سیستم عامل
سیستم عاملهای Embedded دسته خاصی از سیستم عاملها هستند که برای کاربردی خاص و در یک سختافزار اختصاصی مورد استفاده قرار میگیرند. این سختافزارها عموماً دارای منابع محدود هستند و وظیفه انجام دادن یک کار به خصوص را به صورت بهینه بر عهده دارند.
برای یک سیستم سختافزاری Embedded سیستم عامل یک عنصر اساسی به شمار میرود. به غیر از سیستمهایی که میتوان بدون سیستم عامل راه اندازی کرد، برای باقی سیستمها که دارای ماژولهای پیشرفتهتری مانند شبکه و یا باسهای ارتباطی متنوعی هستند، ما نیازمند یک سیستم عامل برای جلوگیری از اتلاف وقت و هزینه هستیم.
انتخاب این سیستم عامل بستگی زیادی به کاربرد ما دارد. معیارهایی که برای تصمیمگیری مهم هستند عبارتند از:
- آیا سیستم ما بلادرنگ (Real Time) است؟
- آیا سیستم ما دارای رابط کاربری تصویری یا لمسی است؟
- محدودیت منابع سختافزاری ما تا چه اندازهای است؟
- پشتیبانی شرکتهای سازنده سختافزار و کتابخانههای برنامهنویسی از سیستم عاملی که قصد استفاده از آن را داریم چگونه است؟
تمامی این فاکتورها به همراه تعدادی دیگر، مشخص کننده سیستم عاملی است که قصد استفاده از آن را داریم.
در ادامه تعدادی از این سیستمهای عامل را معرفی میکنیم:
- vxWorks: (غیر متن باز) یک سیستم عامل بلادرنگ است که توسط شرکت Windriver بر اساس معماری میکرو کرنل توسعه داده شده است. امروزه در بسیاری از صنایع فضایی و صنعتی مورد استفاده قرار میگیرد.
- QNX: (غیر متن باز) این سیستم عامل نیز معماری میکرو کرنل دارد و بلادرنگ است. مانند vxWorks از استاندارد POSIX پیروی میکند. این سیستم عامل در کاربردهای نظامی و صنایع خودروسازی مورد استفاده قرار میگیرد. این سیستم عامل در سال ۲۰۱۰ توسط «بلک بری» خریداری شد.
- Windows CE: (غیر متن باز) توسط مایکروسافت توسعه داده شده است و از استاندارد POSIX پیروی نمیکند. دارای رابط گرافیکی است.
- Android: (متن باز) توسعه داده شده توسط «اندی رابین» که بعدها تحت مالکیت گوگل درآمد. زیر مجموعه لینوکل به شمار میرود و دارای رابط گرافیکی قوی است. با اجرای ماشین مجازی دالویک میتواند نرمافزارهای متنوعی را اجرا کند. امروزه در وسایل شخصی و خانگی کاربرد وسیعی دارد.
- Embedded Linux: (متن باز) سیستم عامل متن باز، که از استاندارد POSIX پیروی میکند و امروزه به عنوان پراستفادهترین سیستم عامل برای دستگاههای Embedded به شمار میرود. دارای کاربردهای متنوعی از قبیل صنایع نظامی، صنعتی، خانگی، دستگاههای پخش ویدیو، لوازم خانگی، رباتها و … میباشد. این سیستم عامل به علت رایگان بودن، پشتیبانی دسته وسیعی از سختافزارها، جامعه کاربری گسترده و بروزرسانی منظم بسیار محبوب و پرکاربرد است.
توسعه بدون سیستم عامل:
در بسیاری از کاربردهای سیستمهای Embedded نیازی به استفاده از سیستم عامل دیده نمیشود، و یا به علت خاص بودن کاربرد آن سیستم و یا بلادرنگ بودن آن، نمیتوان از سیستمهای عامل استفاده کرد. در این گونه از سیستمها تمامی وظایف سیستم عامل که مورد نیاز است، باید توسط برنامه نویس پیادهسازی شود. همچنین تمام درایورهای مورد نیاز تجهیزات (Peripherals) باید به صورت HAL (Hardware Abstraction Layer) پیادهسازی شده و مورد استفاده قرار گیرد.
با توجه به اینکه در این نوع توسعه نرمافزار برای سیستمهای Embedded، مدیریت منابع به طور کامل در اختیار برنامه نویس است، رعایت کامل استانداردهای برنامه نویسی نظیر MISRA و یا CERT در کاربردهای صنعتی بسیار اهمیت دارد.
این روزها با گسترش سختافزارهای باز و ابزارهای متن باز در برنامهنویسی سختافزار، امکانات گستردهای به صورت متن باز در اختیار توسعه دهندگان قرار دارد. همچنین بسیاری از تولیدکنندگان پردازنده و میکروکنترلرها درایورهای سختافزاری تولیدات خود را به صورت متن باز در اختیار مشتریان قرار میدهند تا زمان و هزینه توسعه را به مقدار قابل توجهی برای مشتریان کاهش دهند.
برای توسعه نرمافزارهای متن باز قابل اجرا روی سیستمهای Embedded در بسترهای بدون سیستم عامل، تنها ابزار مورد نیاز یک کامپایلر متن باز برای پردازنده مورد نظر است. سایر ابزارهایی که استفاده میشوند، به جهت ایجاد سادگی، و تست و دیباگ است و میتوانند وجود نداشته باشند. اما استفاده از یک IDE خوب و از آن مهمتر ابزارهای دیباگ یا شبیهساز، میتواند زمان توسعه را به مقدار قابل توجهی کاهش دهند.
از جمله کامپایلرهای متن باز برای بسترهای بدون سیستم عامل میتوان به موارد زیر اشاره کرد:
- Atmel GNU AVR Tool Chain
- GNU Tool Chain For ARM
- GNU Tool Chain For Microchip PIC
همچنین با ازدیاد روزافزون کاربرد میکروکنترلرهای مبتنی بر پردازندههای ARM به خصوص سری cortex بسیاری از سازندگان این پردازندهها اقدام به انتشار درایورهای استاندارد CMSIS برای پردازندهها و تجهیزات (Peripheral) کردهاند.
شرکت NXP Semiconductor پا را فراتر نهاده و با استفاده از کتابخانههای کامپایل شده emWin از شرکت Segger، یک ابزار قدرتمند طراحی رابط کاربری را برای تمام نمایشگرهای استاندارد به صورت متن باز در اختیار کاربران قرار داده است.
کامپایلر کراس Cross Compiler
اولین قدم اجرای یک برنامه روی سیستم Embedded، کامپایل آن است. استفاده از کامپایلر Native روی سیستم Embedded، به دلیل محدودیت منابع معمولاً کاری سخت و گاهی غیر ممکن است. بنابراین از زنجیر ابزارهای کراس (Cross Tool chain) استفاده میشود که شامل کامپایلر کراس و سایر ابزارهای لازم است. کامپایلرهای کراس روی یک سیستم میزبان (host) اجرا میشوند، اما میتوانند کد قابل اجرا (executable code) را برای بستر سختافزاری، سیستمعاملی و اجرایی غیر از میزبان، یعنی سیستم هدف (target) ایجاد کنند. به عنوان مثال میتوانیم با استفاده از یک کامپایلر کراس که روی یک سیستم desktop با سیستم عامل اوبونتو اجرا میشود، کدی را برای یک PowerPC کامپایل کنیم.
زنجیر ابزارهای کراس را میتوان براساس نیازمندی و بستر هدف ساخت، همچنین میتوان از ابزارهای پیشساخته استفاده کرد. عموماً تولید کننده سیستم Embedded، ابزارهای مناسب را در اختیار کاربران قرار میدهد. اما ممکن است این ابزارهای پیشساخته در برخی موارد که از کرنل متفاوتی استفاده شود، مشکلاتی ایجاد کند. در این موارد استفاده از ELDK برای ساخت لینوکس مناسب پیشنهاد میشود. کیت توسعه لینوکس Embedded، ELDK (Embedded Linux Development Kit)، ابزاری آزاد، متن باز و با مستندات بسیار خوب است که به راحتی میتوان از طریق آن root file system مورد نیاز سیستم Embedded را ایجاد کرد.
بسته پشتیبانی برد یا BSP (Board Support Package) رابط استانداردی برای ارتباط سختافزار با سیستمعامل را در بر دارد، و موجب میشود نرمافزار به خوبی بتواند از منابع سختافزار موجود در سیستم Embedded استفاده نماید. BSP تنظیمات مورد نیاز برای ELDK را شامل میشود.
انواع مختلفی از کامپایلرهای کراس برای بسترهای هدف مختلف وجود دارند. یکی از پرکاربردترین آنها مجموعه کامپایلرهای GCC میباشد که از جمله مهمترین نرمافزارهای متن باز و آزاد است. GCC بسیاری از زبانها و بسترها را پشتیبانی میکند. برای استفاده از GCC به عنوان یک کامپایلر کراس، کافی است بسته GCC را براساس تنظیمات سیستم هدف، پیکربندی کنیم. همان طور که اشاره شد، در صورت استفاده از زنجیر ابزارهای پیشساخته، کامپایلر کراس GCC نیز در دسترس خواهد بود.
محیط توسعه و برنامه نویسی مجتمع IDE
نرمافزارهای آزاد متنوعی برای برنامه نویسی، توسعه و رفع عیب برنامهها برای سیستم Embedded وجود دارند. مهمترین خصوصیت یک محیط توسعه برای برنامه نوسی سیستمهای Embedded، امکان استفاده از کامپایلر خارجی است. چرا که کاربر باید بتواند کامپایلر کراس متناسب با سیستم هدف را جایگزین کامپایلر پیشفرض IDE کند. فهرستی از نرمافزارهای معتبر و قدرتمند برای برنامه نویسی به زبان C/C++ – که همگی نرمافزارهای آزاد هستند – در اینجا آمده است
- Qt Creator
- Code::Blocks
- CodeLite
- KDevelop
- Eclipse
- NetBeans
- Ultimate++ TheIDE
یکی از پرکاربردترین IDEها که برای برنامه ریزی سیستمهای Embedded بکار برده میشود، Eclipse است. Eclipse شامل یک فضای کار اصلی است و با استفاده از افزونهها (Plug-in) میتوان محیط برنامهنویسی را به دلخواه گسترش داد. به عنوان مثال با استفاده از افزونه Eclipse CDT توسعه برنامهها با زبان C/C++ امکانپذیر میشود. همچنین کامپایلر Eclipse را میتوان به راحتی تغییر داد و کامپایلر کراس را جایگزین نمود. امکان استفاده از Remote Debugging با ابزار GDB روی بستر هدف در Eclipse وجود دارد. Eclipse روی سیستمعاملهای ویندوز، لینوکس، مک و… به عنوان سیستم میزبان اجرا میشود. بنابراین محیط Eclipse این شرایط را ایجاد میکند که برنامهنویس به راحتی برنامه خود را بنویسد، برای سیستم هدف کامپایل کند، کد اجرایی را روی سیستم هدف بارگذاری نماید، و همچنین اجرای آن را خط به خط دنبال کند و اشکال زدایی نماید.
اشکال زدایی و اجرای خط به خط (Trace And Debugging):
در توسعه نرمافزار وجود یک ابزار قدرتمند برای اشکال زدایی میتواند زمان و هزینه توسعه را به مقدار قابل توجهی کاهش دهد. خوشبختانه همان GDB که ابزار قدرتمند اشکال زدایی در PC برای Linux است در سیستمهای Embedded نیز قابل استفاده است. GDB میتواند با Eclipse شامل افزونه CDT یکپارچه شود و تمام امکانات اشکال زدایی استاندارد را در اختیار برنامه نویس قرار میدهد.
جهت استفاده از GDB نیاز به راه اندازی GDB Server در Target و نرمافزار GDB که در BSP ارائه میشود داریم. GDB امکان ارتباط با سختافزار Target را از طریق Ethernetو یا پورت سریال دارد. بنابراین در صورتی که طراحی سیستم Embedded به صورت سفارشی انجام میشود، باید پورت مناسب برای این منظور در سختافزار پیش بینی شود.