مازند آموز
جستجو برای:
سبد خرید 0
  • خانه
  • دوره های آموزشی و محصولات
  • تماس با ما
مازند آموز
ورود
[suncode_otp_login_form]
گذرواژه خود را فراموش کرده اید؟
عضویت
[suncode_otp_registration_form]

داده های شخصی شما برای پشتیبانی از تجربه شما در این وب سایت، برای مدیریت دسترسی به حساب کاربری شما و برای اهداف دیگری که در privacy policy ما شرح داده می شود مورد استفاده قرار می گیرد.

مازند آموز
  • خانه
  • دوره های آموزشی و محصولات
  • تماس با ما
شروع کنید
آخرین اطلاعیه ها
لطفا برای نمایش اطلاعیه ها وارد شوید
0

وبلاگ

مازند آموز > مقالات > برنامه نویسی > زبان های برنامه نویسی Embedded

زبان های برنامه نویسی Embedded

27 آبان 1404
ارسال شده توسط engrmh
برنامه نویسی

بِرَه، بریم سراغ «زبان‌های بَرنامه‌نویسیِ امبِدِد» — یعنی همون زبونایی که می‌ریزن توی خونِ میکروکنترلرها و بردهای کوچولو؛ جایی که رمِ شما ۲ کیلوبایتِ، جایی که اگر یه حلقه‌ی بی‌مورد انداختی، باتریِ دستگاه یه هفته‌ای تموم می‌شه نه یه سال! می‌خوام مثلِ همونی باشم که داره واسه دوستش توِ کارگاهِ الکترونیک توضیح می‌ده، نه تو کلاسِ تئوریِ دانشگاه.


۱) اصلاً Embedded یعنی چی؟

یه کامپیوترِ کوچولو که فقط یه کارِ خاص انجام می‌ده:
– ترموستاتِ خونه،
– ماشینِ لباس‌شویی،
– ساعتِ هوشمند،
– ایربگِ ماشین،
– ماژولِ Wi-Fiِ داخلِ قهوه‌ساز!
همشون یه «مغز» دارن که قرار نیست ویندوز بالا بیاره؛ قرارِ فقط همون کاری رو بکنه که مهندسِ سخت‌افزار گفته، تا آخرِ عمرش، بدونِ ایراد.


۲) زبان‌های اصلیِ این دنیا (از پرکاربرد تا تخصصی)

۱) C (پادشاهِ بی‌چون‌وچرایِ embedded)

چرا؟
– کم‌حجم‌ترینِ؛ یه int ۲ بایت، یه char ۱ بایت.
– کامپایلرش واسه هر میکرویی (AVR، ARM، PIC، RISC-V) هست.
– می‌تونی مستقیم به رجیسترهای سخت‌افزاری دست بزنی (*(uint32_t*)0x40021018 |= 0x04;).
– کتابخونه‌های HAL/LL شرکت‌ها (STM32Cube، AVR Libc) همشون C‌ان.
مثالِ راه‌اندازیِ یه LED روی STM32:

#define RCC_AHB1ENR (*(uint32_t*)0x40023830)
#define GPIOA_MODER (*(uint32_t*)0x40020000)
#define GPIOA_ODR   (*(uint32_t*)0x40020014)

int main(void){
    RCC_AHB1ENR |= (1<<0);   // کلاکِ پورت A رو فعال کن
    GPIOA_MODER |= (1<<10);  // پین 5 رو خروجی کن
    while(1){
        GPIOA_ODR ^= (1<<5); // LED رو_TOGGLE کن
        for(volatile int i=0;i<100000;i++); // تأخیرِ خام
    }
}

همینه؛ دیگه نیازی به هیچ OS ای هم نداری.

۲) C++ (با احتیاط، ولی قدرتمند)

– اگر چیپِ شما FLASHِ بالای ۱۲۸K و RAMِ ۲۰K داره، می‌تونی از کلاس، تمپلیت، inline استفاده کنی.
– STM32CubeIDE، Keil، IAR همشون C++17 رو پشتیبانی می‌کنن.
– می‌تونی هِدرِ register رو توی کلاس ببندی، بعد درایورات تمیز بشه:

class Led{
public:
    void toggle(){ GPIOA->ODR ^= PIN5; }
private:
    static constexpr uint32_t PIN5 = (1<<5);
};

فقط حواست به «حجمِ باینری» باشه؛ اگر حجم زیاد شد، -fno-exceptions و -fno-rtti رو به کامپایلر بده.

۳) Assembly (وقتی می‌خوای «ذره‌بین» بذاری روی سخت‌افزار)

– برای بوت‌لودرهای 512 بایتی، یا interrupt-handlerهایی که می‌خوای ۱۰ سیکل بیشتر نخورن.
– برای آموختنِ معماریِ ARM یا AVR عالیه؛ ولی روزمره‌ت نکن، چشمِ پیر می‌شه!

۴) Rust (نوپایِ امیدوارکننده)

– حافظه‌ایمن بدونِ garbage collector.
– می‌تونی #![no_std] بزنی و توی bare-metal کار کنی.
– HAL رسمیِ شرکت‌ها داره (nrf-hal, stm32f4xx-hal).
– یه LED toggle ساده:

#![no_std]
#![no_main]
use stm32f4xx_hal::{pac, prelude::*};
use cortex_m_rt::entry;

#[entry]
fn main() -> ! {
    let dp = pac::Peripherals::take().unwrap();
    let gpioa = dp.GPIOA.split();
    let mut led = gpioa.pa5.into_push_pull_output();
    loop {
        led.toggle();
        cortex_m::asm::delay(8_000_000);
    }
}

فقط اینو بدون: compile حجمش ممکنه ۱۵-۲۰K بشه؛ هنوز برای چیپ‌های ۸K Flash گرونه.

۵) Ada/SPARK (وقتی قراره هواپیما یا فضاپیما سقوط نکنه!)

– تایپ‌ایمنیِ قوی، قراردادهای پیش‌شرط/پس‌شرط.
– رویِ LEON (پردازندهِ فضاییِ اروپا) پرواز کرده.
– یادگیریش سخته، ولی اگر بخوای گواهیِ DO-178C بگیری، ارزش داره.

۶) MicroPython / CircuitPython (فقط واسه پروتوتایپ سریع)

– رویِ STM32F4 یا ESP32 ۲۶۰MHz و ۵۲۰KB RAM جواب میده.
– برای تستِ سنسور یا دموی یه ایده عالیه؛ ولی برای تولید انبوه، مصرفِ باتری ۱۰ برابر C می‌شه.

۷) Lua (NodeMCU) و JavaScript (Espruino)

– همون حرف بالا؛ سریع ببین چی می‌شه، بعد برو سراغ C.


۳) چه جوری انتخاب کنم؟

حجم Flash/RAMزبان پیشنهادی
< 32 KB Flash, 2 KB RAMC یا Assembly
32–256 KB Flash, 8–64 KB RAMC (و اگر HAL خوب داشت C++)
> 256 KB Flash, > 64 KB RAMC++17 یا Rust
پروتوتایپ سریعMicroPython / Lua
پروژهِ ایمنی-حر بصی (Medical, Aviation)Ada/SPARK یا MISRA-C

۴) toolchainهایی که دستت می‌گیرن

– GCC-ARM (رایگان، واسه STM32، nRF، NXP)
– AVR-GCC (Arduino هم از همین زیرِ کاپوت استفاده می‌کنه)
– Keil MDK (ARM اصلی، ولی لایسنسِ شُل)
– IAR Embedded Workbench (اگر قراره گواهیِ صنعتی بگیری)
– PlatformIO (همون VSCode، ولی پلاگینش همه‌چیو دانلود می‌کنه)
– Rust: cargo-embed + flip-link برای حجم کم


۵) یه تمرینِ عملی کوچولو

بردِ BluePill (STM32F103) داری؟ بذار LED رو با PWM کم‌نور و پرنور کنه، بدون اینکه CPU رو درگیر کنه (Timer PWM).
۱) CUBE-MX باز کن، پین A8 رو TIM1-CH1 بذار.
۲) Prescaler = 72-1، ARR = 1000-1 → فرکانس 1 kHz.
۳) Compare = 500 → duty 50%.
۴) کامپایل، دانلود، LED نفس‌نفس می‌زنه!
همین یه تمرین ساده، معلوم می‌شه چرا C هنوز سلطانِ این دنیاست.


۶) یادت باشه اصولِ embedded

– هر سیکلِ CPU پولِ باتریِ مشتریِ.
– هر بایتِ RAM گرمه.
– printf برای دیباگ خوبه، ولی تولید نهایی حذفش کن.
– ** watchdog راه بنداز تا هنگ نکنه.**
– گیتِ JTAG رو غیرفعال نکن اگر قراره بعداً دیباگ کنی!


۷) خلاصه‌ی سریع

اگر می‌خوای واردِ دنیای embedded بشی:
۱) C رو محکم بچسب (پایهِ ARM یا AVR فرقی نمی‌کنه).
۲) یه برد ارزون (STM32F4 Discovery یا Arduino Nano) بگیر.
۳) datasheet بخون، رجیسترها رو دستکاری کن.
۴) وقتی حجم پروژه بالا رفت، C++ یا Rust رو امتحان کن.
۵) اگر قراره FDA یا EASA تأییدت کنه، برو سراغ Ada/SPARK یا MISRA-C.

قبلی الگوریتم، تفکر منطقی و حل مسئله
بعدی برنامه نویسی ماژولار و غیر ماژولار

پست های مرتبط

27 آبان 1404

برنامه نویسی ماژولار و غیر ماژولار در زبان JavaScript

engrmh
ادامه مطلب

27 آبان 1404

برنامه نویسی ماژولار و غیر ماژولار

engrmh
ادامه مطلب

27 آبان 1404

الگوریتم، تفکر منطقی و حل مسئله

engrmh
ادامه مطلب

27 آبان 1404

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

engrmh
ادامه مطلب

27 آبان 1404

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

engrmh
ادامه مطلب
جستجو برای:
پشتیبانی
دسته‌ها
  • برنامه نویسی
  • فریلنسر
  • مهارت
برچسب‌ها
الگوریتم برنامه نویسی تفکر منطقی حل مسئله دسکتاپ مهارت موبایل وب کد نویسی

مازند آموز
آموزش با طعم شیرین
دسترسی سریع
  • خانه
  • دوره ها
  • مقالات
  • تماس با ما
خبرنامه

چیزی را از دست ندهید، ثبت نام کنید و در مورد شرکت ما مطلع باشید.

© 1404. تمامی حقوق برای مازندافزار پارس محفوظ است.

فرانت اند

  • 5 دوره

بک اند

  • 1 دوره

برنامه نویسی

  • 6 نوشته

فریلنسر

  • 1 نوشته

مهارت

  • 5 نوشته
برای مشاهده خریدهای خود باید وارد حساب کاربری خود شوید
Facebook Twitter Youtube Instagram Whatsapp