۲۲۸
۶:۴۴
۲۲۷
۶:۴۴
۲۳۲
۸:۳۵
پاسخ ساده است: در دنیای امبدد، منابع محدودند و زمانبندی اهمیت زیادی دارد. اینجا شما فقط مصرفکنندهی امکانات آماده نیستید؛ بلکه باید رفتار حافظه، زمان اجرا و ارتباط نرمافزار با سختافزار را تا حد زیادی کنترل کنید.به همین دلیل، C هنوز یکی از زبانهای اصلی پروژههای STM32 و بسیاری از میکروکنترلرهاست.
۱. کنترل منابع و حافظهدر بسیاری از سیستمهای بلادرنگ، توقفهای غیرقابلپیشبینی قابلقبول نیستند. در C میتوان حافظه را بهصورت ایستا یا کاملاً کنترلشده مدیریت کرد و از سربار Interpreter یا Garbage Collection دوری کرد.البته این آزادی مسئولیت هم دارد: خطاهایی مثل Memory Leak، سرریز بافر و اشارهگر نامعتبر باید توسط برنامهنویس کنترل شوند.
۲. ارتباط نزدیک با سختافزارواحدهای جانبی یا Peripheralهای میکروکنترلر از طریق رجیسترهای Memory-Mapped کنترل میشوند. C با Pointerها، ساختارها و کلماتی مثل volatile امکان نوشتن کدی کمسربار برای کار با این رجیسترها را فراهم میکند.در STM32 معمولاً این کار از طریق CMSIS، HAL یا LL انجام میشود؛ بنابراین کد میتواند هم به سختافزار نزدیک باشد و هم خوانایی و قابلیت نگهداری مناسبی داشته باشد.
۳. امکان تحلیل بهتر زمان اجراC به شما اجازه میدهد کدی نزدیک به سختافزار بنویسید و هزینهی زمانی و حافظهای آن را تحلیل کنید. اما پیشبینیپذیری فقط به زبان بستگی ندارد.وقفهها، RTOS، حافظهی Flash، Cache، تنظیمات کامپایلر و معماری CPU همگی روی زمان پاسخ تأثیر میگذارند. بنابراین برای سیستمهای حساس باید زمان اجرا روی سختافزار واقعی بررسی و اندازهگیری شود.
خلاصه کلامیادگیری C در امبدد فقط یادگیری Syntax نیست؛ یادگیری Pointerها، حافظه، Stack، رجیسترها، وقفهها و نحوهی تعامل نرمافزار با سختافزار است.
پایتون برای نمونهسازی و برخی کاربردهای سطح بالاتر خوب است، اما در بسیاری از پروژههای کوچک و سختبلادرنگ، C بهدلیل سربار کم، کنترل بالا و اکوسیستم بالغ همچنان انتخاب اصلی است.
۳۰۷
۱۳:۰۷
چک لیست طلائی دیباگ.pdf
۱۲۰.۱۶ کیلوبایت
یک چک لیست عالی براتون آماده کردم، که موقع برنامه نویسی وقتی به مشکل میخورید و برنامه دیباگ لازم میشه، میتونه مفید باشه 
۳۱۱
۱۷:۰۶
Debug ITM vs UART.pdf
۱۵۵.۱۱ کیلوبایت
در این مقاله یک مقایسه بین دیباگ با روش UART و ITM داشتیم. از هر کدام در چه شرایطی باید استفاده کرد؟
۲۴۳
۱۴:۴۰
focus and start embedded.pdf
۱۶۴.۷۶ کیلوبایت
یک روال کاربردی برای حفظ تمرکز، جلوگیری از یادگیری پراکنده و شاخه به شاخه شدن و رسیدن به تسلط واقعی در دنیای امبدد سیستم براتون آماده کردم. 
۱۹۶
۸:۵۸
چرا بدون FSM برنامهنویسی امبدد تبدیل به کابوس میشه؟
تا حالا شده پروژهای رو با دو تا شرط ساده شروع کنی، ولی بعد از اضافه شدن چندتا کلید، سنسور و منو، کدت پر بشه از if-elseهای تودرتو و یه مشت فلگ مثل is_started و temp_ok؟ ته این مسیر معمولاً میرسه به «کد اسپاگتی»؛ جایی که با اصلاح یه باگ، دو جای دیگه سیستم از کار میافته و کل رفتار میکرو غیرقابلپیشبینی میشه. راهحل استاندارد برای فرار از این وضعیت، استفاده از ماشین حالت محدود یا همون FSM هست. مفهومش خیلی سرراسته: سیستم شما در هر لحظه فقط و فقط توی یک «حالت مشخص» (State) قرار داره و تا وقتی یک «اتفاق یا ورودی خاص» رخ نده، حق نداره بره توی حالت بعدی.
توی برنامهنویسی امبدد، پیادهسازی FSM معمولاً خیلی تمیز با یه enum برای تعریف حالتها (مثل STATE_IDLE، STATE_RUNNING، STATE_ERROR) و یک ساختار switch-case داخل حلقه اصلی انجام میشه. بزرگترین مزیتش اینه که منطق برنامه کاملاً تفکیک و قابل پیشبینی (Deterministic) میشه؛ چون در هر لحظه پردازنده دقیقاً میدونه کجاست و فقط کدهای مربوط به همون حالت رو اجرا میکنه. از طرف دیگه، بهت اجازه میده بدون استفاده از delayهای قفلکننده، کدت رو بهصورت Non-blocking بنویسی تا میکرو بتونه همزمان سنسورها رو بخونه، تایمرها رو چک کنه و به اینتراپتها بهموقع جواب بده.
فرقی نمیکنه داری پکتهای یه پروتکل مثل UART یا Modbus رو بایتبهبایت پردازش میکنی، یا داری کنترلر یه دستگاه صنعتی رو مینویسی؛ طراحی ماشین حالت روی کاغذ قبل از کدنویسی، تفاوت بین یک پروژه هابی و یک کار صنعتی و پایداره. با این فرمون، حتی اگر ۶ ماه بعد هم برگردی سر پروژهت یا بخوای فیچر جدیدی بهش اضافه کنی، با اضافه کردن یک حالت (Case) جدید و مشخص کردن شرطهای ورود به اون، همهچیز سر جای خودشه و ترسی از دستخوردن بقیه منطق سیستم نداری.
شما توی پروژههاتون ماشین حالت رو از همون اول روی کاغذ میکشید؟
یا تا کار به بنبست نخوره سراغش نمیرید؟
یا تازه میخواید یادش بگیرید؟ 
تا حالا شده پروژهای رو با دو تا شرط ساده شروع کنی، ولی بعد از اضافه شدن چندتا کلید، سنسور و منو، کدت پر بشه از if-elseهای تودرتو و یه مشت فلگ مثل is_started و temp_ok؟ ته این مسیر معمولاً میرسه به «کد اسپاگتی»؛ جایی که با اصلاح یه باگ، دو جای دیگه سیستم از کار میافته و کل رفتار میکرو غیرقابلپیشبینی میشه. راهحل استاندارد برای فرار از این وضعیت، استفاده از ماشین حالت محدود یا همون FSM هست. مفهومش خیلی سرراسته: سیستم شما در هر لحظه فقط و فقط توی یک «حالت مشخص» (State) قرار داره و تا وقتی یک «اتفاق یا ورودی خاص» رخ نده، حق نداره بره توی حالت بعدی.
توی برنامهنویسی امبدد، پیادهسازی FSM معمولاً خیلی تمیز با یه enum برای تعریف حالتها (مثل STATE_IDLE، STATE_RUNNING، STATE_ERROR) و یک ساختار switch-case داخل حلقه اصلی انجام میشه. بزرگترین مزیتش اینه که منطق برنامه کاملاً تفکیک و قابل پیشبینی (Deterministic) میشه؛ چون در هر لحظه پردازنده دقیقاً میدونه کجاست و فقط کدهای مربوط به همون حالت رو اجرا میکنه. از طرف دیگه، بهت اجازه میده بدون استفاده از delayهای قفلکننده، کدت رو بهصورت Non-blocking بنویسی تا میکرو بتونه همزمان سنسورها رو بخونه، تایمرها رو چک کنه و به اینتراپتها بهموقع جواب بده.
فرقی نمیکنه داری پکتهای یه پروتکل مثل UART یا Modbus رو بایتبهبایت پردازش میکنی، یا داری کنترلر یه دستگاه صنعتی رو مینویسی؛ طراحی ماشین حالت روی کاغذ قبل از کدنویسی، تفاوت بین یک پروژه هابی و یک کار صنعتی و پایداره. با این فرمون، حتی اگر ۶ ماه بعد هم برگردی سر پروژهت یا بخوای فیچر جدیدی بهش اضافه کنی، با اضافه کردن یک حالت (Case) جدید و مشخص کردن شرطهای ورود به اون، همهچیز سر جای خودشه و ترسی از دستخوردن بقیه منطق سیستم نداری.
شما توی پروژههاتون ماشین حالت رو از همون اول روی کاغذ میکشید؟
۱۱۰
۱۴:۴۶
اگر دوره «امبدد C» رو از قبل ثبتنام کردید یا قصد دارید تازه شروع کنید، خبر خوب اینکه چند روزه که فصل ۸ دوره با ۶ قسمت جدید و کاربردی (بخشهای ستارهدار) آپدیت شده. در این قسمتهای جدید کلی ترفند و تابع حیاتی برای کار با توابع استاندارد C و نکات بیشتر برای پیاده سازی ماشین حالت اضافه شده که توی پروژههای واقعیی دستتونو پُر تر میکنه.
https://easymcu.org/fa/product/course-embedded-c-1/
۱۲۹
۱۵:۴۲
بعد از بهروزرسانیهای اخیر دوره Embedded C سطح یک، حالا نوبت به ارتقای دوره STM32 سطح یک رسیده.
طی چند هفته گذشته، روی توسعه و ارتقای محتوای این دوره کار کردیم و امروز تدوین آپدیتها به پایان رسید.
انتشار آپدیت ها از امروز استارت خورد.
برنامه انتشار آپدیتها:
در فصل ۴ نیز سطح پیادهسازی پروژهها ارتقا پیدا کرده و مباحثی مثل دو رویکرد FSM، حذف Delay و Refactoring پیشرفته به دوره اضافه شده است.
نکته مهم: دانشپذیران قبلی دوره به تمام جلسات جدید از همین الان دسترسی دارند، (جلسات آپدیت با * در ابتدای آنها شروع میشوند و به این صورت راحتتر میتونید در لیست پخش پیداشون کنید).
بریم بترکونیم ...
۳۸
۱۶:۴۰