مقایسه Rust و C برای فریمور امبدد: نتایج پژوهش صنعتی روی STM32

31 بازدید
۱۴۰۵-۰۲-۲۱
5 دقیقه
  • نویسنده: Shadow
  • درباره نویسنده: سئوکار ساده! 🔗 مهندس الکترونیک⚡

به گفته CNX Software – Embedded Systems News

یک پژوهش صنعتی توسط STMicroelectronics نشان می‌دهد که زبان Rust از نظر مصرف حافظه و سرعت اجرا، به بلوغ کافی برای رقابت با C در توسعه فریمور میکروکنترلرها رسیده است.

تحقیق جدید: آیا Rust برای توسعه فریمور امبدد واقعاً با C رقابت می‌کند؟

هیاهوی زیادی پیرامون زبان برنامه‌نویسی Rust وجود دارد و من شاهد پذیرش آن در پروژه‌های مختلفی هستم که مهم‌ترین آن‌ها کرنل لینوکس است. با این حال، تا به حال برای من روشن نبود که آیا این زبان برای توسعه فریمور امبدد مناسب است یا خیر، چرا که منابع سخت‌افزاری در یک میکروکنترلر محدود هستند. اشغال فضای کم در حافظه (RAM) و ذخیره‌سازی (Flash) الزامی است و عملکرد بهینه نیز می‌تواند حیاتی باشد؛ برای مثال جهت کاهش مصرف توان در دستگاه‌هایی که با باتری کار می‌کنند.

یک مقاله تحقیقاتی توسط شرکت STMicroelectronics، موسسه Inria و دانشگاه Freie Universität Berlin تحت عنوان «درس‌هایی از یک مورد صنعتی استفاده از میکروکنترلر با سیستم‌عامل Ariel OS» که در ArXiv (میزبانی شده توسط دانشگاه کرنل) منتشر شده است، تلاش می‌کند با استفاده از C امبدد و Rust به این سوال پاسخ دهد. نتیجه‌گیری این است که Rust گزینه‌ای مناسب و قابل اتکا است:

«همزمان با افزایش محبوبیت Rust برای توسعه نرم‌افزارهای ایمن‌تر سیستمی، بررسی واقع‌بینانه آن در بخش سخت‌افزارهای میکروکنترلر ضروری است. اکوسیستم Rust تا چه حد برای این بخش آماده است؟ آیا Rust در عمل می‌تواند با C رقابت کند؟»

این مقاله گزارشی از یک مورد پژوهشی صنعتی در حوزه IoT ارائه می‌دهد که به پاسخگویی به این سوالات کمک می‌کند. دو تیم که به طور همزمان یک عملکرد مشابه را (یکی با C و دیگری با Rust) توسعه می‌دادند، در یک دوره چند ماهه مورد تحلیل قرار گرفتند. تحلیلی مقایسه‌ای از رویکردها، نتایج و تلاش‌های تکرارشونده آن‌ها ارائه شده است. تجزیه و تحلیل‌ها و اندازه‌گیری‌ها روی سخت‌افزار نشان می‌دهد که دلیل محکمی برای ترجیح دادن C به Rust در توسعه فریمور میکروکنترلر، بر اساس میزان اشغال حافظه یا سرعت اجرا وجود ندارد.

علاوه بر این، نشان داده شده است که سیستم‌عامل Ariel OS یک محیط اجرایی (Runtime) کارآمد و قابل حمل در Rust فراهم می‌کند که میزان اشغال فضای آن کمتر از پشته (Stack) رایج C به صورت Bare-metal (بدون سیستم‌عامل) است که به طور سنتی در این زمینه استفاده می‌شود. نتیجه گرفته شده است که Rust امروزه انتخابی منطقی برای توسعه فریمور در این حوزه محسوب می‌شود.

اما بیایید این نتیجه‌گیری را بدیهی تلقی نکنیم و برای درک بهتر روش تحقیق و نتایج، نگاهی به پژوهش (فایل PDF) بیندازیم.

سخت‌افزار مورد استفاده، برد توسعه SensorTile.box Pro مجهز به میکروکنترلر STMicro STM32U585AI با هسته ARM Cortex-M33 بود. این برد دارای قابلیت‌های ارتباطی بلوتوث و NFC (که در اینجا استفاده نشد) و یک سنسور شتاب‌سنج و ژیروسکوپ ۶ محوره IMU (مدل LSM6DSV16X) است. همچنین مجموعه هوش مصنوعی لبه شرکت ST با نام AIoT Craft، پردازش هوش مصنوعی روی داده‌های دریافتی از سنسور را امکان‌پذیر کرده بود.

این برد توسعه، پروتکل ثبت داده‌های Vanilla (VDL) را که به زبان C یا Rust نوشته شده اجرا می‌کند و از طریق پروتکل (VDP) و رابط UART، با یک کامپیوتر که دارای رابط کاربری گرافیکی (GUI) است ارتباط برقرار می‌کند.

VDL firmware ST AIoT Craft PC communication

هر تیم در فاز اولِ پیاده‌سازی فریمور VDL به زبان‌های C و Rust، به مدت شش هفته به صورت مستقل کار کردند و سپس چهار هفته دیگر برای بهینه‌سازی کارهای یکدیگر با هم همکاری کردند. پیاده‌سازی C به نرم‌افزار STM32CubeMX، یک ماشین وضعیت محدود (FSM) نوشته شده به زبان C در حالت Bare-metal و کتابخانه متن‌باز Parson برای تبدیل JSON متکی است (توجه: این کتابخانه از تخصیص حافظه داینامیک استفاده می‌کند).

پیاده‌سازی C

پیاده‌سازی C

فریمور نوشته شده با Rust به RTOS مخصوص میکروکنترلر یعنی Ariel OS متکی است و سریال‌سازی و دی‌سریال‌سازی JSON را با استفاده از پکیج‌های (Crates) کتابخانه Serde (یک فریمورک سریال‌سازی) و Heapless (برای تخصیص حافظه استاتیک) پیاده‌سازی می‌کند.

پیاده‌سازی Rust

پیاده‌سازی Rust

از آنجایی که معماری‌ها کاملاً متفاوت هستند، این یک مقایسه مستقیم C در مقابل Rust نخواهد بود، اما در اینجا نتایج نهایی مربوط به میزان اشغال حافظه و فضای ذخیره‌سازی آورده شده است.

Metric (bytes) VDL-C VDL-Rust Δ (Rust − C)
.text 66,240 69,764 3,524
Total ROM 76,744 84,100 7,356
Stack RAM 2,048 10,240 8,192
Static RAM 14,960 14,400 -560
Heap RAM 25,600 0 -25,600
Total RAM 44,656 24,640 -20,016

هر دو فایل باینری فریمور VDL نسبتاً کوچک هستند، اما نسخه C همچنان از نسخه Rust کم‌حجم‌تر است. در اینجا این موضوع چندان اهمیت ندارد، زیرا میکروکنترلر STM32U585AI دارای ۲ مگابایت حافظه فلش است؛ اما اگر روی میکروکنترلرهایی با منابع محدودتر به سقف ظرفیت ذخیره‌سازی نزدیک شویم، ممکن است این اختلاف اهمیت پیدا کند و در آن صورت یا به بهینه‌سازی بیشتر و یا تعویض قطعه نیاز خواهد بود. مقایسه RAM به دلیل تخصیص حافظه داینامیک پیچیده‌تر است، زیرا پیاده‌سازی C به حافظه Heap نیاز دارد. عدد نشان داده شده، حداکثر مقدار پیک اندازه‌گیری شده برای Heap است. پژوهشگران همچنین اشاره کردند که در مقایسه با کتابخانه Parson، «گزینه‌های کم‌مصرف‌تری از نظر حافظه وجود دارند که اصلاً به Heap نیاز ندارند»، زیرا بهینه‌سازی حافظه هدف اصلی این تحقیق نبوده است.

تجزیه و تحلیل مقایسه‌ای فریمور در C و Rust

تجزیه و تحلیل مقایسه‌ای فریمور در C و Rust

 

در نهایت، هر دو فریمور در Rust و C با سطح عملکرد یکسانی از نظر نرخ خروجی داده (ODR) کار کردند: ۷۴۶۸ هرتز. نمودار زیر نشان می‌دهد که چه C و چه Rust را برای پروژه امبدد بعدی خود انتخاب کنید، فریمور بدون کار جدی به طور خودکار از نظر اندازه و عملکرد بهینه نخواهد شد.

عملکرد C در مقابل Rust

عملکرد C در مقابل Rust

 

پیاده‌سازی Rust در اولین آزمایش دو برابر سریع‌تر از پیاده‌سازی C بود، اما پس از اعمال بهینه‌سازی‌ها (که شامل تغییرات ساده‌ای مانند غیرفعال کردن لاگ‌های دیباگ، فعال کردن I-Cache و پیش‌خوانی فلش برای کاهش تأخیر در پروتکل I2C بود)، جایگاه اول بین C و Rust جابجا می‌شد. جزئیات بیشتر در مورد نکات فنی و چالش‌ها را می‌توانید در فایل PDF کامل مقاله مطالعه کنید.

آنچه در این تحقیق جالب بود، این است که در فاز دوم، هر تیم با مقایسه کدهای C و Rust به تیم دیگر کمک کرد تا فریمور بهتری بسازد. در تئوری، بهترین راهکار استفاده همزمان از C و Rust در تیم توسعه برای محصول بعدی شماست، اما در عمل به دلیل محدودیت‌های بودجه، بعید است این کار امکان‌پذیر باشد. کد منبع این پروژه در نهایت در پلتفرم STM32 Hotspot منتشر خواهد شد.

اطلاعات
31
0
0
اشتراک و حمایت
profile نویسنده: Shadow متخصص الکترونیک

سئوکار ساده! 🔗 مهندس الکترونیک⚡


مقالات بیشتر

slide

پالت | بازار خرید و فروش قطعات الکترونیک

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

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. جستجو در آیسی
family

سیسوگ‌شاپ | فروشگاه محصولات Quectel

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند. برو به فروشگاه سیسوگ
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

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

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

بررسی و ارائه اطلاعات مربوط به ECU (واحد کنترل الکترونیکی) و نرم‌افزارهای متن باز مرتبط با آن برو به سیکار
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله

خانواده سیسوگ

سیسوگ‌شاپ

فروشگاه محصولات Quectel

پالت
سیسوگ فروم

محلی برای پاسخ پرسش‌های شما

سیسوگ جابز
سیسوگ
سیسوگ فروم
سی‌کار

اولین مرجع متن باز ECU در ایران

سیسوگ مگ
آی‌سی

موتور جستجوی قطعات الکترونیکی

سیسوگ آکادمی
پالت

بازار خرید و فروش قطعات الکترونیک

دیدگاه ها

become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله