mBedLab Learning – Telegram
mBedLab Learning
774 subscribers
54 photos
5 videos
4 files
38 links
بحث و گفتگو در:
.
@mBedLab_Discussion
Download Telegram
ادامه پست قبل...

دو نمونه برچسب گذاری شده (تصویر پیوست)

ادامه در پست بعد...

#برنامه_نویسی #یادگیری_ماشین #هوش_مصنوعی

📍امبدلب به فارسی:
@mBedLabLearning

📍mBedLab in English:
@mBedLabLearningEN

📍mBedLab Türkçe'de
@mBedLabLearningTR
👌2
ادامه پست قبل...

در مقابل، نمونه‌های بدون برچسب دارای ویژگی‌هایی هستند، اما فاقد برچسب هستند. پس از ایجاد یک مدل، مدل برچسب را از روی ویژگی ها پیش بینی می کند.

دو نمونه بدون برچسب (تصویر پیوست)

#برنامه_نویسی #یادگیری_ماشین #هوش_مصنوعی

📍امبدلب به فارسی:
@mBedLabLearning

📍mBedLab in English:
@mBedLabLearningEN

📍mBedLab Türkçe'de
@mBedLabLearningTR
👌2
#قانون 2.2 MISRA C - اجتناب از کدهای مرده

○ گروه: #کدهای_استفاده_نشده
○ دسته‌بندی: #الزامی
○ اعمال برای: C90, C99, C11

قاعده 2.2 استاندارد MISRA بیان می‌کند که پروژه نباید حاوی کد مرده باشد. کد مرده به هر عملیاتی گفته می‌شود که اجرا می‌شود اما حذف آن تأثیری بر رفتار برنامه ندارد. وجود کد مرده می‌تواند نشان دهنده خطا در منطق برنامه باشد و باعث سردرگمی شود.

این قاعده در استانداردهای ایمنی مانند IEC 61508، ISO 26262 و DO-178C نیز مورد توجه قرار گرفته است.

نمونه‌های کد مرده:
○ استفاده از متغیری که مقدار آن بعداً خوانده نمی‌شود.
○ استفاده از عملگری که نتیجه آن استفاده نمی‌شود.
○ فراخوانی تابعی که هیچ تأثیری بر رفتار برنامه ندارد.

استثنائات:
○ تبدیل صریح به نوع void
این عمل نشان می‌دهد که مقدار مورد نظر عمداً استفاده نمی‌شود و خود به تنهایی کد مرده محسوب نمی‌شود.

○ عملگر تبدیل صریح (cast operator) که نتیجه آن استفاده می‌شود، کد مرده نیست.

اهمیت رعایت این قاعده
○ بهبود کیفیت کد
حذف کد مرده باعث کاهش حجم کد، بهبود خوانایی و نگهداری آن می‌شود.

○ کاهش خطاها
وجود کد مرده می‌تواند نشانه‌ای از خطاهای منطقی در برنامه باشد. حذف این کدها به بهبود پایداری و قابلیت اطمینان نرم‌افزار کمک می‌کند.

○ افزایش کارایی
حذف کد مرده می‌تواند به بهبود عملکرد برنامه کمک کند.


مثال:

extern volatile uint16_t v;
extern char *p; 

void f ( void )
{
uint16_t  x;
( void ) v;
( int32_t ) v;
v >> 3;
x = 3;
*p++;
( *p )++;
}


خطاهای موجود در مثال:
‏○ (int32_t) v: تبدیل نوع (cast) به int32_t انجام می‌شود اما نتیجه استفاده نمی‌شود.
‏○ v >> 3: عملگر شیفت راست (<<) اجرا می‌شود اما نتیجه استفاده نمی‌شود.
‏○ x = 3: مقداردهی به متغیر x انجام می‌شود اما مقدار آن در ادامه استفاده نمی‌شود.
‏○ p++*: عملگر اشاره‌گری (*) اجرا می‌شود اما نتیجه آن استفاده نمی‌شود.

نکات مهم
○ کد غیرقابل دسترس (Unreachable Code) کد مرده نیست، زیرا هرگز اجرا نمی‌شود.
○ عملیات مقداردهی اولیه (Initialization) متفاوت از عملیات انتساب (Assignment) است و کد مرده محسوب نمی‌شود.
○ برخی از عملیات‌های زبان (مانند دستورات اسمبلی) ممکن است همیشه تأثیر بر رفتار برنامه داشته باشند و کد مرده محسوب نشوند.

قوانین مرتبط:
○ قانون 17.7

#برنامه_نویسی#استاندارد_MISRA
#Embedded

📍امبدلب به فارسی:
@mBedLabLearning

📍mBedLab in English:
@mBedLabLearningEN

📍mBedLab Türkçe'de
@mBedLabLearningTR
2👍1🤩1
#هوش_مصنوعی #یادگیری_ماشین

یادگیری تحت نظارت (بخش دوم)

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

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

برای مثال، اگر مدل 1.15 اینچ باران را پیش‌بینی کرده بود، اما مقدار واقعی 0.75 اینچ بود، مدل راه‌حل خود را تغییر می‌دهد تا پیش‌بینی آن به 0.75 اینچ نزدیک‌تر شود. پس از اینکه مدل به هر نمونه در مجموعه داده نگاه کرد - در برخی موارد، چندین بار - به راه حلی می رسد که به طور متوسط ​​بهترین پیش بینی ها را برای هر یک از نمونه ها انجام می دهد.

موارد موجود در پست‌های زیر آموزش یک مدل را نشان می دهد:

ادامه در پست بعد...

#برنامه_نویسی #یادگیری_ماشین #هوش_مصنوعی

📍امبدلب به فارسی:
@mBedLabLearning

📍mBedLab in English:
@mBedLabLearningEN

📍mBedLab Türkçe'de
@mBedLabLearningTR
ادامه پست قبل...

این مدل یک مثال برچسب گذاری شده را می گیرد و یک پیش بینی ارائه می دهد.

ادامه در پست بعد...

#برنامه_نویسی #یادگیری_ماشین #هوش_مصنوعی

📍امبدلب به فارسی:
@mBedLabLearning

📍mBedLab in English:
@mBedLabLearningEN

📍mBedLab Türkçe'de
@mBedLabLearningTR
ادامه پست قبل...

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

ادامه در پست بعد...

#برنامه_نویسی #یادگیری_ماشین #هوش_مصنوعی

📍امبدلب به فارسی:
@mBedLabLearning

📍mBedLab in English:
@mBedLabLearningEN

📍mBedLab Türkçe'de
@mBedLabLearningTR
ادامه پست قبل...

مدل این فرآیند را برای هر نمونه برچسب گذاری شده در مجموعه داده تکرار می کند (تصویر پیوست).

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

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

ادامه در پست بعد...

#برنامه_نویسی #یادگیری_ماشین #هوش_مصنوعی

📍امبدلب به فارسی:
@mBedLabLearning

📍mBedLab in English:
@mBedLabLearningEN

📍mBedLab Türkçe'de
@mBedLabLearningTR
👍1
ادامه پست قبل...

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

بسته به پیش‌بینی‌های مدل، ممکن است قبل از استقرار مدل در یک برنامه واقعی، آموزش و ارزیابی بیشتری انجام دهیم.

استنتاج
هنگامی که از نتایج ارزیابی مدل راضی شدیم، می‌توانیم از مدل برای پیش‌بینی‌هایی که استنتاج نامیده می‌شود، در نمونه‌های بدون برچسب استفاده کنیم. در مثال برنامه آب و هوا، ما به مدل شرایط آب و هوای فعلی -مانند دما، فشار اتمسفر و رطوبت نسبی- را می‌دهیم و میزان بارندگی را پیش‌بینی می‌کند.

#برنامه_نویسی #یادگیری_ماشین #هوش_مصنوعی

📍امبدلب به فارسی:
@mBedLabLearning

📍mBedLab in English:
@mBedLabLearningEN

📍mBedLab Türkçe'de
@mBedLabLearningTR
دعوت ویژه به یک رویداد علمی رایگان! 🚀

آیا به دنیای سیستم‌های نهفته، هوش مصنوعی و یادگیری ماشین علاقه‌مندید؟
آیا می‌خواهید درباره‌ی فرصت‌ها و چالش‌های این حوزه در ایران و جهان بیشتر بدانید؟


✔️ در این وبینار، به بررسی موضوعات زیر خواهیم پرداخت
○ سیستم‌های نهفته و معماری آنها
○ کاربرد سیستم‌های نهفته در دنیای امروز
○ نگاهی به بازار کار جهانی و ایران
○ نقش هوش مصنوعی و یادگیری ماشین در سیستم‌های نهفته

این وبینار برای چه کسانی مناسب است؟
○ دانشجویان و فارغ‌التحصیلان رشته‌های مهندسی کامپیوتر، برق و مکانیک
○ متخصصان و علاقه‌مندان به حوزه سیستم‌های نهفته
○ افرادی که به دنبال یادگیری و ارتقاء دانش خود در زمینه فناوری‌های نوین هستند

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

🎉 تاریخ برگزاری
○ جمعه 19 بهمن | ساعت 18 الی 20

🧑🏻‍🏫 سخنران
○ مجید درهم بخش | توسعه دهنده و تحلیلگر سیستم‌های نهفته، مدرس دانشگاه

برای ثبت نام در وبینار اطلاعات زیر را به آی دی @mbedlab_admin ارسال نمایید تا اطلاعات ورود و شرکت در وبینار 24 ساعت قبل از برگزاری برای شما ارسال شود:
○ نام و نام خانوادگی
○ شماره تماس
○ آدرس ایمیل
○ زمینه فعالیت شغلی/تحصیلی

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

#برنامه_نویسی #الکترونیک #مکاترونیک #یادگیری_ماشین #هوش_مصنوعی

📍امبدلب به فارسی:
@mBedLabLearning

📍mBedLab in English:
@mBedLabLearningEN

📍mBedLab Türkçe'de
@mBedLabLearningTR
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
‏IDE اختصاصی نسخه 3.1.0 برای ESP32/ESP8266 از راه رسید! 🎉

دیگه لازم نیست فقط از آردوینو برای کدنویسی ESP32/ESP8266 استفاده کنید! یا با تنظیمات پیچیده ESP-IDF دست و پنجه نرم کنید. شرکت Espressif بالاخره IDE مخصوص خودش رو برای توسعه این میکروکنترلرها معرفی کرده: Espressif IDE!

این IDE که بر پایه Eclipse CDT ساخته شده، به طور خاص برای توسعه برنامه‌های IoT با استفاده از ESP-IDF طراحی شده. شامل پلاگین‌های ضروری Eclipse CDT و پلاگین‌های دیگه برای ساخت برنامه‌های ESP-IDF هست.

ویژگی‌های کلیدی:
○ پیکربندی خودکار متغیرهای محیط ساخت
○ پیکربندی یکپارچه toolchain
‏○ Wizard برای پروژه‌های جدید و شروع کار با نمونه‌های ESP-IDF
○ ویرایشگر LSP برای ویرایش پیشرفته، کامپایل و رنگی کردن syntax
○ پیمایش هدر و تعریف تابع از قبل ساخته شده
○ نصب و پیکربندی ESP-IDF و ابزارهای اون مستقیماً از IDE
○ ویرایشگر پیکربندی SDK برای تنظیمات خاص پروژه
○ پلاگین ویرایشگر یکپارچه CMake برای ویرایش فایل‌های CMake مانند CMakeLists.txt
○ پشتیبانی از ساخت مبتنی بر CMake
○ پشتیبانی از فلش UART و JTAG
○ عیب‌یابی سفارشی ESP-IDF OpenOCD با پیکربندی و تنظیمات از پیش ساخته شده
○ مانیتور سریال یکپارچه ESP-IDF
○ ترمینال ESP-IDF با محیط ساخت از پیش پیکربندی شده ESP-IDF
○ ویرایشگر تجزیه و تحلیل اندازه برنامه برای تجزیه و تحلیل ردپای حافظه استاتیک برنامه شما
○ پشتیبانی از پروفایلینگ heap برای تجزیه و تحلیل حافظه و یافتن نشت‌های حافظه
○ پشتیبانی از عیب‌یابی GDB stub و ردیابی سطح برنامه
○ پشتیبانی از زبان انگلیسی و چینی برای IDE

🖥 پلتفرم‌های پشتیبانی شده: macOS، Windows و Linux

⚠️ نکته مهم: نسخه 3.0 و بالاتر، از ESP-IDF نسخه 5.x و بالاتر پشتیبانی می‌کنه. برای نسخه‌های 4.x و پایین‌تر از نسخه 2.12.1 استفاده کنید.

⬇️ برای دانلود مستقیم Espressif-IDE به لینک زیر مراجعه نمایید:
https://news.1rj.ru/str/mBedLabLearning/68

#ESP32 #ESP8266 #IoT #IDE #برنامه_نویسی #میکروکنترلر #Espressif

📍امبدلب به فارسی:
@mBedLabLearning

📍mBedLab in English:
@mBedLabLearningEN

📍mBedLab Türkçe'de
@mBedLabLearningTR
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
esp-idf-tools-setup-espressif-ide-3.1.0-with-esp-idf-5.3.1.exe
1.8 GB
فایل نرم افزار Espressif-IDE نسخه 3.1.0

📍امبدلب به فارسی:
@mBedLabLearning

📍mBedLab in English:
@mBedLabLearningEN

📍mBedLab Türkçe'de
@mBedLabLearningTR
👍1
#قانون 2.3 MISRA C -اجتناب از اعلان انواع داده استفاده نشده

○ گروه: #کدهای_استفاده_نشده
○ دسته‌بندی: #توصیه_شده
○ اعمال برای: C90, C99, C11

قاعده 2.3 استاندارد MISRA بیان می‌کند که پروژه نباید شامل اعلان انواع داده ای باشد که در هیچ کجای کد استفاده نشده اند.

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

○ افزایش حجم کد
اعلان انواع داده استفاده نشده، حجم کد را افزایش می دهد و خوانایی و نگهداری کد را دشوارتر می کند.

○ خطاهای پنهان
ممکن است در مراحل بعدی توسعه، به طور اشتباهی از این نوع داده استفاده شود که می تواند منجر به بروز خطاهای غیرمنتظره و سخت یاب شود.


مثال:
int16_t unusedtype ( void )
{
typedef int16_t local_Type; /* Non-compliant */
return 67;
}


در این مثال، نوع داده local_Type اعلان شده است اما در هیچ کجای تابع استفاده نشده است. بنابراین، این کد با قانون 2.3 MISRA مطابقت ندارد.

#برنامه_نویسی#استاندارد_MISRA

📍امبدلب به فارسی:
@mBedLabLearning

📍mBedLab in English:
@mBedLabLearningEN

📍mBedLab Türkçe'de
@mBedLabLearningTR
آیا آمادگی تست دانش خود در یادگیری ماشین را دارید؟

در پست‌های قبلی، مفاهیم پایه یادگیری ماشین رو با هم بررسی کردیم. حالا وقتشه که با حل چند تا سوال، دانش خودمون رو محک بزنیم!

مدل‌های یادگیری ماشین با نظارت (Supervised Learning) با استفاده از داده‌هایی که قبلاً برچسب‌گذاری شده‌اند، آموزش می‌بینند. این مدل‌ها یاد می‌گیرند که بر اساس ویژگی‌های موجود، برچسب جدیدی را پیش‌بینی کنند. اما نکته اینجاست که همه ویژگی‌های موجود در یک دیتاست، قدرت پیش‌بینی‌کنندگی ندارند. گاهی فقط چند ویژگی خاص به عنوان پیش‌بینی‌کننده برچسب عمل می‌کنند.

در دیتاست ارسالی در تصویر، از ستون "قیمت" به عنوان برچسب استفاده می‌کنیم و ستون‌های دیگر را به عنوان ویژگی در نظر می‌گیریم.

به سوال ارسالی در پست بعد پاسخ دهید...

#برنامه_نویسی #یادگیری_ماشین #هوش_مصنوعی

📍امبدلب به فارسی:
@mBedLabLearning

📍mBedLab in English:
@mBedLabLearningEN

📍mBedLab Türkçe'de
@mBedLabLearningTR
به نظر شما کدام سه ویژگی در تصویر پست قبل احتمالاً بیشترین پیش‌بینی‌کننده برای قیمت یک خودرو هستند؟
Final Results
54%
Make_model, year, miles
35%
Miles, gearbox, make_model
12%
Color, height, make_model
0%
Tire_size, wheel_base, year
🤩4
👍2
#قانون 2.4 MISRA C - اجتناب از اعلان تگ‌های استفاده نشده

○ گروه: #کدهای_استفاده_نشده
○ دسته‌بندی: #توصیه_شده
○ اعمال برای: C90, C99, C11

این قاعده بیان می‌کند که پروژه نباید حاوی اعلان‌های تگ (tag) استفاده نشده باشد. تگ‌ها در C برای تعریف ساختارها (structs)، یونیون‌ها (unions) و شمارشگرها (enums) استفاده می‌شوند. اگر یک تگ تعریف شده باشد اما در هیچ کجای کد استفاده نشده باشد، ممکن است باعث سردرگمی شود. آیا این تگ به طور عمدی استفاده نشده است یا به اشتباه تعریف شده است؟

مثال نقض:
void unusedtag ( void )
{
enum state { S_init, S_run, S_sleep }; /* Non-compliant */
}


در این مثال، تگ state تعریف شده است اما در هیچ کجای تابع unusedtag استفاده نشده است.

مثال رعایت شده:
typedef struct record_t /* Non-compliant */
{
uint16_t key;
uint16_t val;
} record1_t;

typedef struct /* Compliant */
{
uint16_t key;
uint16_t val;
} record2_t;


در این مثال، تگ record_t تنها در تعریف typedef برای record1_t استفاده شده است. با حذف تگ record_t و استفاده مستقیم از ساختار، می‌توان این کد را مطابق با قاعده 2.4 نوشت.

#برنامه_نویسی#استاندارد_MISRA

📍امبدلب به فارسی:
@mBedLabLearning

📍mBedLab in English:
@mBedLabLearningEN

📍mBedLab Türkçe'de
@mBedLabLearningTR
👎1
#قانون 2.5 MISRA C - اجتناب از تعریف ماکروهای استفاده نشده

○ گروه: #کدهای_استفاده_نشده
○ دسته‌بندی: #توصیه_شده
○ اعمال برای: C90, C99, C11

این قاعده بیان می‌کند که یک پروژه نباید شامل تعاریف ماکروهای استفاده نشده باشد.

اگر یک ماکرو تعریف شده باشد اما در هیچ کجای کد استفاده نشود، برای بازبینی‌کننده مشخص نیست که آیا این ماکرو زائد است یا به اشتباه استفاده نشده است.

نکته: استفاده از undef# برای یک ماکرو نیز به عنوان استفاده از آن ماکرو در نظر گرفته می‌شود.

مثال:
#define SIZE 4
#define DATA 3 /* Non-compliant - DATA not used */

void use_macro ( void )
{
use_int16 ( SIZE );
}


در این مثال، ماکروی DATA تعریف شده است اما در هیچ کجای کد از آن استفاده نشده است. بنابراین، این کد با قاعده 2.5 MISRA مطابقت ندارد.

#برنامه_نویسی#استاندارد_MISRA

📍امبدلب به فارسی:
@mBedLabLearning

📍mBedLab in English:
@mBedLabLearningEN

📍mBedLab Türkçe'de
@mBedLabLearningTR
3
#قانون 2.6 MISRA C - اجتناب از اعلان برچسب‌های استفاده نشده

○ گروه: #کدهای_استفاده_نشده
○ دسته‌بندی: #توصیه_شده
○ اعمال برای: C90, C99, C11

این قاعده با عنوان "A function should not contain unused label declarations" بیان می‌کند که یک تابع نباید شامل اعلان برچسب‌های استفاده نشده باشد.

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

مثال:
void unused_label ( void )
{
int16_t x = 6;

label1: /* Non-compliant */
use_int16 ( x );
}


در این مثال، برچسب label1 اعلان شده است اما در هیچ کجای تابع مورد استفاده قرار نمی‌گیرد. این مورد نقض قاعده 2.6 MISRA C محسوب می‌شود.

#برنامه_نویسی#استاندارد_MISRA

📍امبدلب به فارسی:
@mBedLabLearning

📍mBedLab in English:
@mBedLabLearningEN

📍mBedLab Türkçe'de
@mBedLabLearningTR
👍3
#قانون 2.7 MISRA C - اجتناب از پارامترهای استفاده نشده در توابع

○ گروه: #کدهای_استفاده_نشده
○ دسته‌بندی: #توصیه_شده
○ اعمال برای: C90, C99, C11

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

مثال:
void withunusedpara ( uint16_t *para1,
int16_t unusedpara ) /* Non-compliant - unused */
{
*para1 = 42U;
}


در این مثال، تابع withunusedpara دارای دو پارامتر است، اما تنها از پارامتر para1 استفاده می‌شود. پارامتر unusedpara در هیچ کجای تابع مورد استفاده قرار نگرفته است.

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

○ بهبود خوانایی و نگهداری
وجود پارامترهای استفاده نشده باعث کاهش خوانایی کد می‌شود و نگهداری و بروزرسانی آن را دشوارتر می‌کند.


راهکارها
○ حذف پارامترهای استفاده نشده
اگر یک پارامتر واقعاً مورد استفاده قرار نمی‌گیرد، باید آن را از تعریف تابع حذف کنید.

○ استفاده از پارامترها
اگر پارامتری در حال حاضر استفاده نمی‌شود، اما ممکن است در آینده مورد نیاز باشد، باید آن را به درستی در بدنه تابع استفاده کنید.

○ استفاده از ابزارهای تحلیل استاتیک
ابزارهای تحلیل استاتیک می‌توانند به شناسایی پارامترهای استفاده نشده در کد کمک کنند.


#برنامه_نویسی#استاندارد_MISRA

📍امبدلب به فارسی:
@mBedLabLearning

📍mBedLab in English:
@mBedLabLearningEN

📍mBedLab Türkçe'de
@mBedLabLearningTR
👍3
به دلیل استقبال و پیشنهاد شما همراهان گرامی دعوتتان میکنیم به یک رویداد علمی رایگان دیگر! 🚀

آیا می خواهید با قلب تپنده دستگاه های هوشمند، یعنی پردازنده های ARM و میکروکنترلرهای STM32 آشنا شوید؟ آیا به دنبال راهی برای ورود به دنیای جذاب سیستم های نهفته هستید؟


در این وبینار رایگان، ما از صفر تا صد این دنیای شگفت انگیز را به شما نشان می دهیم. از تئوری پایه ای تا کاربردهای عملی، همه چیز را پوشش می دهیم.

✔️ در این وبینار، به بررسی موضوعات زیر خواهیم پرداخت
○ انواع پردازنده های ARM را بشناسید و تفاوت های آنها را درک کنید.
○ دلیل محبوبیت ARM را در صنعت بدانید.
○ با خانواده قدرتمند میکروکنترلرهای STM32 آشنا شوید.
○ یاد بگیرید چگونه میکروکنترلر مناسب برای پروژه خود را انتخاب کنید.

چرا در این وبینار شرکت کنیم؟
○ محتوای کاربردی و به روز
مطالب ارائه شده کاملا عملی و مطابق با آخرین تکنولوژی ها هستند.

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

○ کاملا رایگان
شرکت در این وبینار هیچ هزینه ای برای شما ندارد.


این وبینار برای چه کسانی مناسب است؟
○ دانشجویان و فارغ التحصیلان مهندسی برق، کامپیوتر و مکاترونیک
○ علاقه مندان به یادگیری سیستم های نهفته
○ کسانی که می خواهند پروژه های خود را با میکروکنترلرهای ARM و STM32 انجام دهند

🎉 کی برگزار میشود؟
○ زمان: جمعه ۱۷ اسفند، ساعت ۱۸ تا ۲۱
○ مکان: آنلاین (در هر کجا که هستید، می توانید شرکت کنید!)

🧑🏻‍🏫 سخنران
○ مجید درهم بخش | توسعه دهنده و تحلیلگر سیستم‌های نهفته، مدرس دانشگاه

برای ثبت نام در وبینار اطلاعات زیر را به آی دی @mbedlab_admin ارسال نمایید تا اطلاعات ورود و شرکت در وبینار 24 ساعت قبل از برگزاری برای شما ارسال شود:
○ نام و نام خانوادگی
○ شماره تماس
○ آدرس ایمیل
○ زمینه فعالیت شغلی/تحصیلی

منتظر دیدار شما در این وبینار هیجان انگیز هستیم!

#ARM #STM32 #میکروکنترلر #سیستم_های_نهفته #وبینار_رایگان #آموزش
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
#قانون 2.8 MISRA C - یک پروژه نباید حاوی تعریف اشیاء بلااستفاده باشد

○ گروه: #کدهای_استفاده_نشده
○ دسته‌بندی: #توصیه_شده
○ اعمال برای: C90, C99, C11

یک شیء (Object) در زبان C به هر متغیر، آرایه، struct یا union گفته می شود که در حافظه فضا اشغال می کند.

شیء بلااستفاده شیئی است که تعریف آن (و هرگونه اعلام آن) قابل حذف است و برنامه همچنان کامپایل می شود. به عبارت دیگر، اگر حذف کردن تعریف یک شیء هیچ تغییری در رفتار برنامه ایجاد نکند، آن شیء بلااستفاده محسوب می شود.

اهمیت رعایت این قاعده

○ عدم شفافیت
وجود اشیاء بلااستفاده در کد باعث سردرگمی می شود. آیا این اشیاء به طور عمدی تعریف شده اند اما در حال حاضر استفاده نمی شوند؟ یا اینکه به اشتباه تعریف شده اند و فراموش شده اند؟

○ خطاهای پنهان
اشیاء بلااستفاده ممکن است حاوی مقادیر نامعتبر باشند که در صورت استفاده ناخواسته، منجر به رفتار غیرمنتظره و حتی خطاهای جدی در سیستم شوند.

○ کاهش خوانایی کد
وجود اشیاء بلااستفاده باعث کاهش خوانایی و نگهداری کد می شود.


توصیه
○ بررسی دقیق
قبل از استفاده از یک شیء، اطمینان حاصل کنید که در جایی از برنامه مورد استفاده قرار می گیرد.

○ حذف اشیاء بلااستفاده
اگر شیئی بلااستفاده تشخیص داده شد، آن را حذف کنید تا کد تمیزتر، قابل خواناتر و عاری از خطاهای پنهان شود.


نکته: برخی از کامپایلرها به صورت پیش فرض، هشدارهایی در مورد اشیاء بلااستفاده ارائه می دهند. از این هشدارها برای شناسایی و حذف اشیاء بلااستفاده استفاده کنید.

قوانین مرتبط:
○ قانون 8.6

#برنامه_نویسی#استاندارد_MISRA

📍امبدلب به فارسی:
@mBedLabLearning

📍mBedLab in English:
@mBedLabLearningEN

📍mBedLab Türkçe'de
@mBedLabLearningTR
👍1