اینجا صمیم؛ همراه با تیم برنامه نویسی امبدد

تیم برنامه نویسی امبدد شرکت مهندسی صمیم

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

تعریف امبدد

سیستم‌های امبدد غالبا به مجموعه‌ای از اجزاء با محوریت میکروکنترلر/پروسسور اطلاق می‌شود که این مجموعه می‌تواند به صورت یک پکیج شامل حافظه‌های EEPROM و RAM، چیپ‌های راه‌اندازی phy شبکه اترنت، wifi یا bluetooth، واسط‌های ورودی/خروجی و  peripheral ها، ارائه شود. برای کاربردهای وسیع و افزایش قدرت پردازشی در صنعت برودکست معمولا هسته‌ی اصلی، از چند پروسسور ساخته تشکیل می‌شود.

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

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

وظایف ‌گروه برنامه نوسی امبدد

به طور کلی وظایف در گروه برنامه نویسی امبدد به سه دسته‌ی کلی تقسیم‌بندی می‌شوند :

  • توسعه‌ی نرم‌افزارهای کاربردی در سطح بالا
  • توسعه‌ی درایورهای سطح کاربر و کرنل لینوکس
  • نگهداری، توسعه و مدیریت سیستم‌های بیلد و ارائه imageهایی جهت تست و sdk مناسب برای ساخت‌ خروجی‌های باینری توسط توسعه‌دهنده‌های برنامه‌های کاربردی.

توسعه‌ی نرم‌افزارهای کاربردی در سطح بالا

متخصصین این قسمت از تیم برنامه نویسی امبدد دارای تخصص های زیر می باشند:

  • تسلط به یکی از زبان‌های برنامه‌نویسی در سیستم‌های امبدد مثل ++C، پایتون و javaScript
  • آشنا به برنامه‌نویسی در محیط لینوکس
  • تسلط کافی به یکی از ابزارهای توسعه نظیر QtCreator، VSCode  و موارد مشابه
  • آشنایی با کتابخانه‌های مرسوم مثل grpc ،protobuf ،poco ،boost ،std-11/14/17، و موارد مشابه
  • آشنایی نسبی با مفاهیم برودکست و مدیا
  • توانایی حل مسائل به کمک design patternها و templateها و یا روش‌های بهینه و مشابه

توسعه‌ی درایورهای سطح کاربر و کرنل لینوکس

وظایف توسعه‌دهنده در این عنوان شامل موارد زیر می‌شود:

  • تسلط به برنامه‌نویسی درایور سطح کرنل و User Space
  • تسلط به اجزاء ورودی/خروجی سیستم نظیر پورت سریال، SPI،I2C و همچنین راه‌اندازی و پیکربندی اجزاء مورد نیاز در یک سیستم
  • توانایی اعمال تغییرات و رفع خطاهای احتمالی در درایورهای سطح کرنل
  • تهیه درایورهای سطح کاربر بمنظور برقراری ارتباط با peripheralها برای توسعه‌دهنده‌های سطح بالا
  • تهیه‌ی bootloaderهای خاص و دارای متغیرهای مورد نیاز در پروژه‌ها
  • راه‌اندازی ورودی/خروجی‌ها مثل TouchScreen ،LCD و یا موس و کیبورد و آماده‌سازی سیستم جهت ارتباط با این اجزاء

مدیریت سیستم‌های بیلد

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

برای کار با اینگونه سیستم‌ها و جهت استفاده بهینه از آنها متخصصین شرکت صمیم دارای مهارت های زیر می باشند:

  • آشنایی با معماری سیستم‌های بیلد مثل Yocto یا buildroot و ابزارهای مشابه
  • آشنایی به نحوه‌ی پیکربندی و راه‌اندازی این ابزارها
  • توانایی اعمال تغییر در یک سیستم بیلد با توجه به امکانات موجود برای این ابزار
  • توانایی تهیه و ساخت هرگونه خروجی شخصی‌سازی‌شده از امکانات موجود در این ابزارها

در برخی موارد لازم است که توسعه‌دهنده به برخی زبان‌های اسکریپت‌نویسی مثل shell و پایتون آشنایی داشته باشد تا بتواند به خوبی خواسته‌های سیستم را به شکل صحیح برطرف کند.

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

برخی از فعالیت های شاخص

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

…..  برنامه نویسی FPGA با متخصصین گروه صمیم  …..

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

به روز رسانی محصولات در شرکت صمیم به دو صورت در گروه برنامه نویسی امبدد توسعه داده شده است:

روش اول – فول آپگرید:

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

روش دوم – پارشال آپگرید:

در این روش می توان هر یک از قسمت های سیستم را به صورت جداگانه به روز رسانی کرد. اسکریپتی که این گروه برای این قسمت توسعه داده به صورت اتوماتیک تمامی برنامه ها و ورژن های نهایی را جداگانه دریافت می کند و پکیجی با حجمی بسیار پایین شامل اپدیت تغییرات ورژن جدید را شامل می شود و با استفاده از این پکیچ به راحتی محصول به روز رسانی می گردد.

از دیگر فعالیت های این تیم قدرتمند می توان به طراحی و پیاده سازی UI محصولاتی اشاره کرد که دارای رابط کاربری تحت وب نمی باشند. به عنوان مثال صفحه کنترل لمسی میز میکسر با استفاده از ابزار Qt توسط این گروه طراحی شده است.

برنامه نویسی امبدد گروه مهندسی صمیم

این تیم همچنین خودکار سازی فرآیند ها با استفاده از پروسه های CI/CD و دواپس را دنبال می کند. به نحوی که در حال حاضر به صورت خودکار کد های مختلف و مربوط به قسمت های مستقل یک محصول با توجه به ورژن محصول دریافت می شود و پس از انجام تست های بیلد و کیفیت کد، در صورت تایید، یک ورژن نهایی به صورت یک اسکریپت تهیه شده و در اختیار تیم صحه گذاری و یا تولید قرار می گیرد. این تیم ها به سادگی و فقط با اجرای این اسکریپت، سخت افزار خام محصول را به ورژن مورد نظر تبدیل می کنند.