آماده سازی
نصب و پیکره بندی ابزار لازم - آماده سازی سخت افزار - آماده سازی محیط تست و امولاتور

معرفی ابزارهای مورد نیاز
نصب ابزارهای مورد نیاز
نصب ابزارهای مورد نیاز برای لینوکس Linux
نصب ابزارهای مورد نیاز برای ویندوز Windows
صحت سنجی ابزار نصب شده

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

پریفرال ها و ادوات جانبی
در این بخش به مفهوم و چیستی پریفرال ها و همچنین دسترسی به رجیستر ها و مقایسه با زبان Cو نجوه استفاده از کدهای C رابطه با barrow checker می پردازیم .

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

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

الگوهای طراحی – استفاده از بهترین روش های توسعه کد
احتمالا واژه Design Pattern براتون آشناست در این بخش یکی از موارد پر کاربرد در زبان Rust برای سیستم های نهفته رو بررسی میکنیم .

نکاتی برای برنامه نویسان زبان C
توضحیات و نکات مهمی برای برنامه نویسان زبان C

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

بهینه کردن کد
یکی دیگه از دغدغه های برنامه نویسان در زبان های مختلف نوشتن کدهای بهینه و پرهیز از ایجاد دستورات اضافه هست که در این بخش این موارد پوشش داده خواهد شد .

کار با پریفرال GPIO
آموزش کار با GPIO در راست بر روی STM32 آموزش کار با GPIO در راست بر روی ESP32 آموزش کار با GPIO در راست بر روی NRF آموزش کار با GPIO در راست بر روی Raspberry RP2040

ارتباط سریال کار با UART در Rust
آموزش کار با UART در راست بر روی STM32 آموزش کار با UART در راست بر روی ESP32 آموزش کار با UART در راست بر روی NRF آموزش کار با UART در راست بر روی Raspberry RP2040

آموزش ADC واحد آنالوگ به دیجیتال در Rust
آموزش ADC واحد آنالوگ به دیجیتال در Rust بر روی STM32 آموزش ADC واحد آنالوگ به دیجیتال در Rust بر روی NRF آموزش ADC واحد آنالوگ به دیجیتال در Rust بر روی ESP32 آموزش ADC واحد آنالوگ به دیجیتال در Rust بر روی Raspberry RP2040

کار با سنسور اثر هال در Rust
آموزش کار با سنسور اثر هال در Rust بر روی STM32 آموزش کار با سنسور اثر هال در Rust بر روی NRF آموزش کار با سنسور اثر هال در Rust بر روی ESP32 آموزش کار با سنسور اثر هال در Rust بر روی Raspberry pi RP2040

ارتباط سریال کار با I2C در Rust
آموزش کار با I2C در راست بر روی STM32 آموزش کار با I2C در راست بر روی ESP32 آموزش کار با I2C در راست بر روی NRF آموزش کار با I2C در راست بر روی Raspberry RP2040 آموزش کار با I2C در راست بر روی LPC

کار با نمایشگر OLED در Rust
آموزش راه اندازی و استفاده نمایشگر OLED در Rust بر روی STM32 آموزش راه اندازی و استفاده نمایشگر OLED در Rust بر روی NRF آموزش راه اندازی و استفاده نمایشگر OLED در Rust بر روی ESP32 آموزش راه اندازی و استفاده نمایشگر OLED در Rust بر روی Raspberry RP2040

آموزش راه اندازی و استفاده از − در راست بر روی STM32 آموزش راه اندازی و استفاده از − در راست بر روی ESP32 آموزش راه اندازی و استفاده از − در راست بر روی NRF آموزش راه اندازی و استفاده از − در راست بر روی Raspberry RP2040 آموزش راه اندازی و استفاده از − در راست بر روی LPC

واژه برنامه نویسی embedded برای طیف وسیعی از کلاس ها و دسته بندی مختلف برنامه نویسی بکار برده می شود . 

رنج وسیعی از میکروکنترلرهای 8 بیتی مانند AVR های قدیمی که منابع بسیار کم در حد چند کیلوبایت RAM و ROM در اختیار قرار میدادند تا سیستم هایی مانند Raspberry Pi هایی مانند B 3+ که 4 هسته 64 بیتی Cortex-A53 با فرکانس کاری 1.4 گیگاهرتز با یک گیگابایت RAM در اختیار ما قرار میدهد .

براساس هدفی که انتخاب می کنیم منابع و محدودیت های مختفی پیش روی ما قرار میگیرد .

دوسطح عمومی برنامه نویسی امبدد وجود دارد :

Bare Metal , Hosted

توسعه برنامه برای Hosted Environments بسیار شبیه به برنامه نویسی برای یک کامپیوتر می باشد .به این معنی که شما با یک رابط سیستمی روبرو هستید که ارتباط با لایه های زیری مانند network , file systems , thread , memory management , Standard libraries و موارد دیگه را به عهده دارد و شما با این رابط ها ارتباط برقرار میکنید هنگام برنامه نویسی .همچنین ممکن است یک سری محدودیت ها هنگام دسترسی به شاخه های اصلی سیستم یا بخش هایی از حافظه ها داشته باشید .که بصورت کلی می توان گفت مانند این هست که شما برای یک کامپیوتر در حال برنامه نویسی و توسعه برنامه هستید . 

اما در حالت Bare Metal قبل از اینکه برنامه شما اجرا شود هیچ کدی دیگری اجرا نخواهد شد .بدون اینکه نرم افزاری توسط سیستم عامل فراهم شود ما نمی توانیم از standard library ها استفاده کنیم .در عوض برنامه بهمراه crate هایی که استفاده میکنه مستقیم از سخت افزار برای کارایی استفاده خواهند کرد . 

برای اینکه از بارگذاری standard library در Rust جلوگیری کنیم از no_std استفاده خواهیم کرد .بخشی از کتابخانه های استاندارد مستقل از پلتفرم هستند و همینطور خالی از بخش هایی هستند که عموما برای امبدد ها خیلی کاربردی نیستند که این بخش با اسم libcore شناخته می شود .

یکی از چیز هایی که در این تعبیه نشده است memory allocator برای dynamic memory allocation  هست .که در صورتی که این مورد یا موارد مشابه در حالت استاندارد لازم دارید می تونید با استفاده از crate هایی به برنامه اضافه کنید و این قابلیت هارو داشته باشید . 

libstd Runtime 

همینطور که قبلا اشاره شد استفاده کردن از libstd نیازمند یک یکپارچه سازی با سیستم عامل هست اما فراهم کردن مسیرهایی برای ارتباط گرفتن با رابط های سیستم عامل تنها کاری نیست که این بخش انجام می دهد . این بخش همینطور runtime برای ما فراهم می کند که این بخش کارهایی مانند مواظبت از stack overflow – پردازش command line argument ها – ایجاد و استفاده از main thread قبل از اینکه فانکشنالیتی برنامه شروع به کار کند .که این runtime ها در حالت no_std وجود ندارد. 

جمع بندی :

#![no_std]

 یک ویژگی در سطح crate هست که مشخص میکنه این crate از core بجای std استفاده خواهد کرد . که libcore یک مجموعه ای crate های std هست که وابسته به سکو نیست .به طور مثال یک سری APIها برای کار با داده های اولیه مانند float , string , slice و همینطور یک سری APIبرای کار با atomic operation ها و SIMD instruction ها میده . البته که هر چیزی که وابسته به پلتفرم باشه را دیگه در این بخش نداریم بهمین دلیل گزینه بسیار مناسبی برای توسعه در بخش هایی مانند bootstrapping (stage 0)  مانند  bootloaderها و firmware , kernel هاست . 

جمع بندی ویژگی های در دسترس :

feature no_std std
heap (dynamic memory) *
collections (Vec, BTreeMap, etc) **
stack overflow protection
runs init code before main
libstd available
libcore available
writing firmware, kernel, or bootloader code

*یک ستاره به معنی موقعی امکان استفاده وجود داره که crate به برنامه اضافه شود مانند alloc-cortex-m 

**دو ستاره به معنی امکان استفاده موقعی وجود دارد که collections crate ها رو اضافه کرده باشیم و global default allocator  هم پیکره بندی کرده باشیم . 

HashMap , HashSet بخاطر نبود RNG در دسترس نخواهند بود در این حالت . 

هیچ پیوستی یافت نشد
هیچ پیوستی یافت نشد
YOUR CART
  • هیچ محصولی در سبدخرید نیست.
زمینه‌های نمایش داده شده را انتخاب نمایید. بقیه مخفی خواهند شد. برای تنظیم مجدد ترتیب، بکشید و رها کنید.
  • تصویر
  • شناسۀ محصول
  • امتیاز
  • قيمت
  • موجودی
  • دسترسی
  • افزودن به سبد خرید
  • توضیح
  • محتوا
  • وزن
  • اندازه
  • اطلاعات اضافی
برای مخفی‌کردن نوار مقایسه، بیرون را کلیک نمایید
مقایسه
0