Embedded Academy
✅ #نکات_نهفته؛ 👈 مراحل کامپایل تا فلش یک برنامه روی میکروکنترلر 🔺 صفحهای از این کتاب #Cpp #Programming 🔸 نکات نهفته را دنبال کنید. 🔺 @embedded
فرایند build شدن کد :
این فرایند به طور کل شامل 2 بخش اصلی است
compilation stage & linking stage
✅compilation
ابتدا ماشین پیش پردازنده در کامپایلر از فایل c. ما یک فایل i. تولید می کنه تمام ماکرو ها و include هارو اضافه می کنه به کد
✅parser
در این مرحله ماشین parser در کامپایلر کد ما و دستورات مارو مطابق با استاندارد زبانی که انتخاب کردیم می سنجه و اگر مشکلی در کد باشه در این مرحله به برنامه نویس اطلاع میده
✅code generator
در این بخش کد از زبان سطح بالا به زبان سطح پایین اسمبلی تبدیل می شه و یک فایل s. تولید میشه
✅assembler
در این مرحله کد اسمبلی به کد ماشین تبدیل مشه و فایل o. تولید میشه
✅Linker stage
در این مرحله تمام فایل های C. به هم متصل میشن همه کتابخونه ها و تمام فایل های پروژه و در نهایت لینکر یک فایل elf. تولید می کنه
✅post proccessing stage
دراین مرحله توسط ابزار هایی مثل objcopy tools میان و از فایل قابل دیباگ و قابل اجرا elf. فایل های فقط قابل اجرا bin. و .. رو تولید می کنن
via Roya Ghaennezhad
Source of pic: Microcontroller Embedded C Programming udemy
@embedded
این فرایند به طور کل شامل 2 بخش اصلی است
compilation stage & linking stage
✅compilation
ابتدا ماشین پیش پردازنده در کامپایلر از فایل c. ما یک فایل i. تولید می کنه تمام ماکرو ها و include هارو اضافه می کنه به کد
✅parser
در این مرحله ماشین parser در کامپایلر کد ما و دستورات مارو مطابق با استاندارد زبانی که انتخاب کردیم می سنجه و اگر مشکلی در کد باشه در این مرحله به برنامه نویس اطلاع میده
✅code generator
در این بخش کد از زبان سطح بالا به زبان سطح پایین اسمبلی تبدیل می شه و یک فایل s. تولید میشه
✅assembler
در این مرحله کد اسمبلی به کد ماشین تبدیل مشه و فایل o. تولید میشه
✅Linker stage
در این مرحله تمام فایل های C. به هم متصل میشن همه کتابخونه ها و تمام فایل های پروژه و در نهایت لینکر یک فایل elf. تولید می کنه
✅post proccessing stage
دراین مرحله توسط ابزار هایی مثل objcopy tools میان و از فایل قابل دیباگ و قابل اجرا elf. فایل های فقط قابل اجرا bin. و .. رو تولید می کنن
via Roya Ghaennezhad
Source of pic: Microcontroller Embedded C Programming udemy
@embedded
📰 #آگهی_استخدام
📍 #تهران
🔺 #تمام_وقت
👈 یک شرکت دانش بنیان مستقر در دانشگاه صنعتی شریف جهت تکمیل کادر فنی خود نیازمند یک کارشناس لینوکس جهت نصب و پشتیبانی در حوزه سیستم نهفته با ویژگی های فنی زیر است:
شرایط لازم:
اشتیاق به یادگیری و کسب تجربه
آشنایی با شبکه های کامپیوتری
آشنایی با سیستم عامل ویندوز و لینوکس (بویژه مباحث شبکه در آن)
آشنایی با پایگاه داده
توانایی انجام ماموریت برای نصب (حق ماموریت پرداخت خواهد شد.)
ویژگی های امتیازی:
تسلط به سیستم عامل های بر مبنای Debian
تسلط به Bash-Scripting و MySQL
تسلط به محیط های مجازی سازی مثل ESXi
دارابودن مدرک LPIC1 وبالاتر
فرد متقاضی بایستی آمادگی ماموریت های خارج استانی را در طول ماه داشته باشد. همچنین به ازای ماموریت های خارج استان حق ماموریت به فرد پرداخت می شود.
👈 علاقمندان رزومه خود را به آدرس:
[email protected]
ارسال بفرمایند یا از طریق جابینجا اقدام به ارسال رزومه فرمایند.
لینک آگهی در جابینجا
📌 فرصتهای شغلی مرتبط با مهندسی نهفته 👇
@embedded
📍 #تهران
🔺 #تمام_وقت
👈 یک شرکت دانش بنیان مستقر در دانشگاه صنعتی شریف جهت تکمیل کادر فنی خود نیازمند یک کارشناس لینوکس جهت نصب و پشتیبانی در حوزه سیستم نهفته با ویژگی های فنی زیر است:
شرایط لازم:
اشتیاق به یادگیری و کسب تجربه
آشنایی با شبکه های کامپیوتری
آشنایی با سیستم عامل ویندوز و لینوکس (بویژه مباحث شبکه در آن)
آشنایی با پایگاه داده
توانایی انجام ماموریت برای نصب (حق ماموریت پرداخت خواهد شد.)
ویژگی های امتیازی:
تسلط به سیستم عامل های بر مبنای Debian
تسلط به Bash-Scripting و MySQL
تسلط به محیط های مجازی سازی مثل ESXi
دارابودن مدرک LPIC1 وبالاتر
فرد متقاضی بایستی آمادگی ماموریت های خارج استانی را در طول ماه داشته باشد. همچنین به ازای ماموریت های خارج استان حق ماموریت به فرد پرداخت می شود.
👈 علاقمندان رزومه خود را به آدرس:
[email protected]
ارسال بفرمایند یا از طریق جابینجا اقدام به ارسال رزومه فرمایند.
لینک آگهی در جابینجا
📌 فرصتهای شغلی مرتبط با مهندسی نهفته 👇
@embedded
Forwarded from Embedded Academy
🎈 #انگیزشی؛
🔹 #موفقیت چیزی جز فروختن منافع کوتاه مدت به منافع بلندمدت نیست!
🌹 برای شما همراهان پرتلاش #شنبه_پرانرژی و سرآغاز هفته ای خوب و پر از تلاش بر آینده آرزومندیم.
👈 #شنبه_پرانرژی را دنبال کنید.
🔺 @embedded
🔹 #موفقیت چیزی جز فروختن منافع کوتاه مدت به منافع بلندمدت نیست!
🌹 برای شما همراهان پرتلاش #شنبه_پرانرژی و سرآغاز هفته ای خوب و پر از تلاش بر آینده آرزومندیم.
👈 #شنبه_پرانرژی را دنبال کنید.
🔺 @embedded
📰 #آگهی_استخدام
📍 #تهران
🔺 #تمام_وقت
یک مجموعه دانش بنیان مستقر در دانشگاه صنعتی شریف جهت تکمیل کادر فنی خود نیاز به افراد متخصص و علاقهمند در موقعیتهای شغلی زیر را دارد. خواهشمند است علاقه مندان روزمه خود را در این زمینه ارسال نمایند.
🔸 برنامه نویس ++C (تمام وقت)
👈تسلط به توابع و کتابخانه هایC++ Standard Library
👈تسلط به نوشتن کدهای Multi-Thread
👈آشنایی با سیستم عامل لینوکس
👈 آشنایی با کتابخانه های پردازش تصویر مزیت محسوب میشود.
🔹 کارشناس پردازش تصویر (تمام وقت)
👈 مسلط بر مفاهیم پردازش تصویر
👈 مسلط به کتابخانه OpenCv
👈 آشنایی Cpp و Qt
👈 آشنا به لینوکس
👈 آشنایی با فریمورک های یادگیری عمیق مزیت محسوب میشود.
🔸 متخصص هوش مصنوعی (تمام وقت)
👈 مسلط به مفاهیم یادگیری عمیق
👈 مسلط به فریمورک pytorch یا tensorflow
👈 آشنا با مفاهیم #هوش_نهفته و علاقه مند جهت توسعه شبکههای لایت ویت
👈 آشنایی با سخت افزارهای نهفته و پردازش لبه مزیت محسوب میشود.
🔹 کارشناس لینوکس (تمام وقت)
👈 مسلط بر لینوکس
👈 آشنا با bash scripting
👈 آشنا با مفاهیم لینوکس نهفته
👈 آشنایی با مباحث امن سازی سیستم عامل مزیت محسوب میشود.
🔸 طراح سخت افزار/نرم افزار نهفته (تمام وقت)
👈 مسلط بر ++C
👈 آشنا با پردازندههای ARM
👈 آشنا با بردهای esp
👈 آشنایی با نرم افزار آلتیوم دیزاینر مزیت محسوب میشود.
جذب کارآموز (دانشجوی کارشناسی و ارشد به صورت پاره وقت و پروژهای) در موقعیتهای شغلی بالا نیز به شرط اثبات توانمندی یادگیری و علاقهمندی در محیطی پویا، دوستانه و رشد محور ممکن است و علاقهمندان میتوانند با درج موضوع کارآموزی نسبت به ارسال رزومه اقدام نمایند. بدیهی است پس از دوره کارآموزی درصورت تمایل کارآموز امکان جذب فراهم است.
ایمیل جهت ارسال رزومه:
[email protected]
📌 فرصتهای شغلی مرتبط با مهندسی نهفته 👇
@embedded
📍 #تهران
🔺 #تمام_وقت
یک مجموعه دانش بنیان مستقر در دانشگاه صنعتی شریف جهت تکمیل کادر فنی خود نیاز به افراد متخصص و علاقهمند در موقعیتهای شغلی زیر را دارد. خواهشمند است علاقه مندان روزمه خود را در این زمینه ارسال نمایند.
🔸 برنامه نویس ++C (تمام وقت)
👈تسلط به توابع و کتابخانه هایC++ Standard Library
👈تسلط به نوشتن کدهای Multi-Thread
👈آشنایی با سیستم عامل لینوکس
👈 آشنایی با کتابخانه های پردازش تصویر مزیت محسوب میشود.
🔹 کارشناس پردازش تصویر (تمام وقت)
👈 مسلط بر مفاهیم پردازش تصویر
👈 مسلط به کتابخانه OpenCv
👈 آشنایی Cpp و Qt
👈 آشنا به لینوکس
👈 آشنایی با فریمورک های یادگیری عمیق مزیت محسوب میشود.
🔸 متخصص هوش مصنوعی (تمام وقت)
👈 مسلط به مفاهیم یادگیری عمیق
👈 مسلط به فریمورک pytorch یا tensorflow
👈 آشنا با مفاهیم #هوش_نهفته و علاقه مند جهت توسعه شبکههای لایت ویت
👈 آشنایی با سخت افزارهای نهفته و پردازش لبه مزیت محسوب میشود.
🔹 کارشناس لینوکس (تمام وقت)
👈 مسلط بر لینوکس
👈 آشنا با bash scripting
👈 آشنا با مفاهیم لینوکس نهفته
👈 آشنایی با مباحث امن سازی سیستم عامل مزیت محسوب میشود.
🔸 طراح سخت افزار/نرم افزار نهفته (تمام وقت)
👈 مسلط بر ++C
👈 آشنا با پردازندههای ARM
👈 آشنا با بردهای esp
👈 آشنایی با نرم افزار آلتیوم دیزاینر مزیت محسوب میشود.
جذب کارآموز (دانشجوی کارشناسی و ارشد به صورت پاره وقت و پروژهای) در موقعیتهای شغلی بالا نیز به شرط اثبات توانمندی یادگیری و علاقهمندی در محیطی پویا، دوستانه و رشد محور ممکن است و علاقهمندان میتوانند با درج موضوع کارآموزی نسبت به ارسال رزومه اقدام نمایند. بدیهی است پس از دوره کارآموزی درصورت تمایل کارآموز امکان جذب فراهم است.
ایمیل جهت ارسال رزومه:
[email protected]
📌 فرصتهای شغلی مرتبط با مهندسی نهفته 👇
@embedded
Forwarded from Embedded Academy
📌پنجم اسفند «روز مهندس» بر همه مهندسان، به ویژه «مهندسان نهفته» مبارکباد.
👈 پنجم اسفند زادروز دانشمند بزرگ ایرانی خواجه نصیر الدین خوارزمی، همه چیز دان، ریاضیدان، فیلسوف، منجم و معمار ایرانی به نام رو مهندس نام گرفته است.
🔹 کانال #مهندسی_نهفته
@embedded
👈 پنجم اسفند زادروز دانشمند بزرگ ایرانی خواجه نصیر الدین خوارزمی، همه چیز دان، ریاضیدان، فیلسوف، منجم و معمار ایرانی به نام رو مهندس نام گرفته است.
🔹 کانال #مهندسی_نهفته
@embedded
Forwarded from Avicenna Neuroscience Association
انجمن علمی نوروساینس دانشگاه علوم پزشکی همدان
با همکاری ستاد توسعه ی علوم شناختی
و کمیته تحقیقات دانشگاه علوم پزشکی همدان
به مناسب هفته ی #آگاهی_از_مغز
برگزار می کند :
🧠سلسله وبینار های #دوپامین
(گفتمانی از علوم اعصاب)
9 کارگاه و سخنرانی علمی
💻علوم اعصاب محاسباتی
📚علوم اعصاب بالینی
🐇مطالعات حیوانی
این کارگاه ها به جهت علاقه مندان و با حمایت ستاد توسعه شناختی #رایگان برگزار می شود
جهت شرکت و دریافت لینک وبینار ها به گروه زیر بپیوندید.
https://www.tg-me.com/+hsfNndDYJFw2MTJk
@NS_src
با همکاری ستاد توسعه ی علوم شناختی
و کمیته تحقیقات دانشگاه علوم پزشکی همدان
به مناسب هفته ی #آگاهی_از_مغز
برگزار می کند :
🧠سلسله وبینار های #دوپامین
(گفتمانی از علوم اعصاب)
9 کارگاه و سخنرانی علمی
💻علوم اعصاب محاسباتی
📚علوم اعصاب بالینی
🐇مطالعات حیوانی
این کارگاه ها به جهت علاقه مندان و با حمایت ستاد توسعه شناختی #رایگان برگزار می شود
جهت شرکت و دریافت لینک وبینار ها به گروه زیر بپیوندید.
https://www.tg-me.com/+hsfNndDYJFw2MTJk
@NS_src
Forwarded from Taksuntech.ir (Sina Asadiyan)
ثبت نام رایگان ورکشاپ آدام تیلور با موضوع VITIS HLS :
In this workshop, attendees will learn:
Create sources and test benches
Debug applications when it does not go as expected
How to control the interfaces presented to the Vivado design on the final IP block
Understand the default optimisations made by synthesis
How to identify bottlenecks in the design and select constraints to optimize the design and achieve the desired performance
How to leverage the arbitrary precision capabilities of Vitis to implement mathematical algorithms
How to leverage the wider world of Vitis HLS libraries so users no longer have create commonly used functions from scratch
This will be a hands-on workshop with step-by-step instructions to help attendees grow in confidence and capability when using HLS in their designs.
https://app.livestorm.co/adiuvo-engineering/vitis-hls-hero
@Taksuntec
In this workshop, attendees will learn:
Create sources and test benches
Debug applications when it does not go as expected
How to control the interfaces presented to the Vivado design on the final IP block
Understand the default optimisations made by synthesis
How to identify bottlenecks in the design and select constraints to optimize the design and achieve the desired performance
How to leverage the arbitrary precision capabilities of Vitis to implement mathematical algorithms
How to leverage the wider world of Vitis HLS libraries so users no longer have create commonly used functions from scratch
This will be a hands-on workshop with step-by-step instructions to help attendees grow in confidence and capability when using HLS in their designs.
https://app.livestorm.co/adiuvo-engineering/vitis-hls-hero
@Taksuntec
Adiuvo Engineering and Training, Ltd.
Vitis HLS Hero | Adiuvo Engineering and Training, Ltd.
High-Level Synthesis allows us to take our C++ / C models and high-level Vitis libraries to accelerate the development our programmable logic solution. In this workshop, we will walk through severa...
Embedded Academy
📖 #دانلود_کتاب 🔸 معماری سامانه های نهفته برای #توسعه_چالاک 🔹 آشنایی با مدل توسعه نرم افزاری مبتنی برلایه های (MBD) مختلف و مستقل برای پذیرش تغییرات 🔸 کتابی مناسب برای استفاده از رویکرد توسعه #Agile در سیستم های نهفته 👈 مناسب برای علاقه مندان به حوزه…
How to Write and Use a Sprint Goal (With 5 Templates)
پنج قالب برای هدف گذاری اسپرینت در مدیریت محصول به شیوه اسکرام
https://www.parabol.co/blog/sprint-goals/
#ProductManagement
@embedded
پنج قالب برای هدف گذاری اسپرینت در مدیریت محصول به شیوه اسکرام
https://www.parabol.co/blog/sprint-goals/
#ProductManagement
@embedded
Forwarded from Embedded Academy
📰 #آگهی_استخدام
📍 #تهران
🔺 #تمام_وقت
✅ استخدام/امریه
یک مجموعه دانش بنیان مستقر در دانشگاه صنعتی شریف جهت تکمیل کادر فنی خود نیاز به افراد متخصص و علاقهمند در موقعیتهای شغلی زیر را دارد. خواهشمند است علاقه مندان روزمه خود را در این زمینه ارسال نمایند.
امکان جذب به صورت امریه شرکتهای دانشبنیان برای افراد واجد شرایط نیز وجود دارد.
🔸 برنامه نویس ++C (تمام وقت)
👈تسلط به توابع و کتابخانه هایC++ Standard Library
👈تسلط به نوشتن کدهای Multi-Thread
👈آشنایی با سیستم عامل لینوکس
👈 آشنایی با کتابخانه های پردازش تصویر مزیت محسوب میشود.
🔹 کارشناس پردازش تصویر (تمام وقت)
👈 مسلط بر مفاهیم پردازش تصویر
👈 مسلط به کتابخانه OpenCv
👈 آشنایی Cpp و Qt
👈 آشنا به لینوکس
👈 آشنایی با فریمورک های یادگیری عمیق مزیت محسوب میشود.
🔸 متخصص هوش مصنوعی (تمام وقت)
👈 مسلط به مفاهیم یادگیری عمیق
👈 مسلط به فریمورک pytorch یا tensorflow
👈 آشنا با مفاهیم #هوش_نهفته و علاقه مند جهت توسعه شبکههای لایت ویت
👈 آشنایی با سخت افزارهای نهفته و پردازش لبه مزیت محسوب میشود.
🔹 کارشناس لینوکس (تمام وقت)
👈 مسلط بر لینوکس
👈 آشنا با bash scripting
👈 آشنا با مفاهیم لینوکس نهفته
👈 آشنایی با مباحث امن سازی سیستم عامل مزیت محسوب میشود.
🔸 طراح سخت افزار/نرم افزار نهفته (تمام وقت)
👈 مسلط بر ++C
👈 آشنا با پردازندههای ARM
👈 آشنا با بردهای esp
👈 آشنایی با نرم افزار آلتیوم دیزاینر مزیت محسوب میشود.
جذب کارآموز (دانشجوی کارشناسی و ارشد به صورت پاره وقت و پروژهای) در موقعیتهای شغلی بالا نیز به شرط اثبات توانمندی یادگیری و علاقهمندی در محیطی پویا، دوستانه و رشد محور ممکن است و علاقهمندان میتوانند با درج موضوع کارآموزی نسبت به ارسال رزومه اقدام نمایند. بدیهی است پس از دوره کارآموزی درصورت تمایل کارآموز امکان جذب فراهم است.
ایمیل جهت ارسال رزومه:
[email protected]
📌 فرصتهای شغلی مرتبط با مهندسی نهفته 👇
@embedded
📍 #تهران
🔺 #تمام_وقت
✅ استخدام/امریه
یک مجموعه دانش بنیان مستقر در دانشگاه صنعتی شریف جهت تکمیل کادر فنی خود نیاز به افراد متخصص و علاقهمند در موقعیتهای شغلی زیر را دارد. خواهشمند است علاقه مندان روزمه خود را در این زمینه ارسال نمایند.
امکان جذب به صورت امریه شرکتهای دانشبنیان برای افراد واجد شرایط نیز وجود دارد.
🔸 برنامه نویس ++C (تمام وقت)
👈تسلط به توابع و کتابخانه هایC++ Standard Library
👈تسلط به نوشتن کدهای Multi-Thread
👈آشنایی با سیستم عامل لینوکس
👈 آشنایی با کتابخانه های پردازش تصویر مزیت محسوب میشود.
🔹 کارشناس پردازش تصویر (تمام وقت)
👈 مسلط بر مفاهیم پردازش تصویر
👈 مسلط به کتابخانه OpenCv
👈 آشنایی Cpp و Qt
👈 آشنا به لینوکس
👈 آشنایی با فریمورک های یادگیری عمیق مزیت محسوب میشود.
🔸 متخصص هوش مصنوعی (تمام وقت)
👈 مسلط به مفاهیم یادگیری عمیق
👈 مسلط به فریمورک pytorch یا tensorflow
👈 آشنا با مفاهیم #هوش_نهفته و علاقه مند جهت توسعه شبکههای لایت ویت
👈 آشنایی با سخت افزارهای نهفته و پردازش لبه مزیت محسوب میشود.
🔹 کارشناس لینوکس (تمام وقت)
👈 مسلط بر لینوکس
👈 آشنا با bash scripting
👈 آشنا با مفاهیم لینوکس نهفته
👈 آشنایی با مباحث امن سازی سیستم عامل مزیت محسوب میشود.
🔸 طراح سخت افزار/نرم افزار نهفته (تمام وقت)
👈 مسلط بر ++C
👈 آشنا با پردازندههای ARM
👈 آشنا با بردهای esp
👈 آشنایی با نرم افزار آلتیوم دیزاینر مزیت محسوب میشود.
جذب کارآموز (دانشجوی کارشناسی و ارشد به صورت پاره وقت و پروژهای) در موقعیتهای شغلی بالا نیز به شرط اثبات توانمندی یادگیری و علاقهمندی در محیطی پویا، دوستانه و رشد محور ممکن است و علاقهمندان میتوانند با درج موضوع کارآموزی نسبت به ارسال رزومه اقدام نمایند. بدیهی است پس از دوره کارآموزی درصورت تمایل کارآموز امکان جذب فراهم است.
ایمیل جهت ارسال رزومه:
[email protected]
📌 فرصتهای شغلی مرتبط با مهندسی نهفته 👇
@embedded
✅ مقایسه عمر خازنهای جامد و الکترولیت
🔸 خازن از جمله قطعات پرکاربرد در مدارهای الکترونیکی است که به نسبت بسیاری از قطعات عمر مفید کمتر و نقش پررنگ تری در خرابی وسایل الکترونیکی دارد. با این حال انواع خازن عمرهای مفید متفاوتی دارند. امروزه با جایگزینی خازنهای جامد (solid) به جای خازن های الکترولیتی، عمر وسایل الکترونیکی بواسطه افزایش تا 6 برابری عمر مفید خارن های solid در مقایسه با الکترولیتی قابل افزایش است.
اطلاعات بیشتر را از گیگابایت بخوانید.
#Eletronic
#Capacitor
@embedded
🔸 خازن از جمله قطعات پرکاربرد در مدارهای الکترونیکی است که به نسبت بسیاری از قطعات عمر مفید کمتر و نقش پررنگ تری در خرابی وسایل الکترونیکی دارد. با این حال انواع خازن عمرهای مفید متفاوتی دارند. امروزه با جایگزینی خازنهای جامد (solid) به جای خازن های الکترولیتی، عمر وسایل الکترونیکی بواسطه افزایش تا 6 برابری عمر مفید خارن های solid در مقایسه با الکترولیتی قابل افزایش است.
اطلاعات بیشتر را از گیگابایت بخوانید.
#Eletronic
#Capacitor
@embedded
Embedded Academy
✅ Embedded Development Changes over two decades Embedded development one decade or two ago: 👉 Microcontrollers 👉 C or Assembly language 👉 OS: Either bare metal or simple scheduler 👉 UI: LEDs, Switches, 16x2 text LCD 👉 Standalone devices 👉 Homegrown software…
✅ Where Complexity Fails Us
✍ Jack Ganssle
Engineering is about numbers. Do you specify a ±5% resistor or ±1%? Do the math! Will all of the signals arrive at the latch at the proper time? A proper analysis will reveal the truth. How hot will that part get? Crunch the numbers and pick the proper heat sink.
Alas, software engineering has been somewhat resistant to such analysis. Software development fads seem more prominent than any sort of careful analysis. Certainly, in the popular press "coding"1 is depicted as an arcane art practiced by gurus using ideas unfathomable to "normal" people. Measure stuff? Do engineering analysis? No, that will crowd our style, eliminate creativity, and demystify our work.
I do think, though, that in too many cases we've abdicated our responsibility as engineers to use numbers where we can. There are things we can and must measure.
One example is complexity, most commonly expressed via the McCabe Cyclomatic Complexity metric. A fancy term, it merely means the number of paths through a function. One that consists of nothing more than 20 assignment statements can be traversed exactly one way, so has a complexity of one. Add a simple if and there are now two directions the code can flow, so the complexity is two.
There are many reasons to measure complexity, not the least is to get a numerical view of the function's risk (spoiler: under 10 is considered low risk. Over 50: untestable.)
To me, a more important fallout is that complexity tells us, in a provably-correct manner, the minimum number of tests we must perform on a function to guarantee that it works. Run five tests against a function with a complexity of ten, and, for sure, the code is not completely tested. You haven't done your job.
What a stunning result! Instead of testing to exhaustion or boredom we can quantify our tests.
Alas, though, it only gives us the minimum number of required tests. The max could be a much bigger number.
Consider:
if ((a && b) (c && d) (e && f))...
Given that there's only two paths (the if is taken or not taken) this statement has a complexity of 2. But it is composed of a lot of elements, each of which will affect the outcome. A proper test suite needs a lot more than two tests. Here, complexity has let us down; the metric tells us nothing about how many tests to run.
Thus, we need additional strategies. One of the most effective is modified condition/decision coverage (MC/DC). Another fancy term, it means making sure every possible element in a statement is tested to ensure it has an affect on the outcome.
Today some tools offer code coverage: they monitor the execution of your program and tag every statement that has been executed, so you can evaluate your testing. The best offer MC/DC coverage testing. It's required by the most stringent of the avionics standards (DO-178C Level A), which is partly why airplanes, which are basically flying computers, aren't raining out of the sky.
Use complexity metrics to quantify your code's quality and testing, but recognize its limitations. Augment it with coverage tools.
Footnotes:
1 I despise the word "coding." Historically coding was the most dreary of all activities: the replacement of plain text by encrypted cipher. Low-level functionaries, or even machines, did the work. Maybe "coding" is an appropriate term for script kiddies or HTML taggers. If we are coders you can be certain that in very short order some AI will replace us. No, we in the firmware world practice2 software engineering: implementing complex ideas in software using the precepts of careful engineering. These include analysis, design, negotiating with customers, implementation and measurements of our implementations.
2 Bob Dylan got it right: "he not busy being born is busy dying". We should be forever practicing software engineering. Practice: "perform (an activity) or exercise (a skill) repeatedly or regularly in order to improve or maintain one's proficiency." Unless we're constantly striving to improve we'll be dinosaurs awaiting the comet of our destruction.
@embedded
✍ Jack Ganssle
Engineering is about numbers. Do you specify a ±5% resistor or ±1%? Do the math! Will all of the signals arrive at the latch at the proper time? A proper analysis will reveal the truth. How hot will that part get? Crunch the numbers and pick the proper heat sink.
Alas, software engineering has been somewhat resistant to such analysis. Software development fads seem more prominent than any sort of careful analysis. Certainly, in the popular press "coding"1 is depicted as an arcane art practiced by gurus using ideas unfathomable to "normal" people. Measure stuff? Do engineering analysis? No, that will crowd our style, eliminate creativity, and demystify our work.
I do think, though, that in too many cases we've abdicated our responsibility as engineers to use numbers where we can. There are things we can and must measure.
One example is complexity, most commonly expressed via the McCabe Cyclomatic Complexity metric. A fancy term, it merely means the number of paths through a function. One that consists of nothing more than 20 assignment statements can be traversed exactly one way, so has a complexity of one. Add a simple if and there are now two directions the code can flow, so the complexity is two.
There are many reasons to measure complexity, not the least is to get a numerical view of the function's risk (spoiler: under 10 is considered low risk. Over 50: untestable.)
To me, a more important fallout is that complexity tells us, in a provably-correct manner, the minimum number of tests we must perform on a function to guarantee that it works. Run five tests against a function with a complexity of ten, and, for sure, the code is not completely tested. You haven't done your job.
What a stunning result! Instead of testing to exhaustion or boredom we can quantify our tests.
Alas, though, it only gives us the minimum number of required tests. The max could be a much bigger number.
Consider:
if ((a && b)
Given that there's only two paths (the if is taken or not taken) this statement has a complexity of 2. But it is composed of a lot of elements, each of which will affect the outcome. A proper test suite needs a lot more than two tests. Here, complexity has let us down; the metric tells us nothing about how many tests to run.
Thus, we need additional strategies. One of the most effective is modified condition/decision coverage (MC/DC). Another fancy term, it means making sure every possible element in a statement is tested to ensure it has an affect on the outcome.
Today some tools offer code coverage: they monitor the execution of your program and tag every statement that has been executed, so you can evaluate your testing. The best offer MC/DC coverage testing. It's required by the most stringent of the avionics standards (DO-178C Level A), which is partly why airplanes, which are basically flying computers, aren't raining out of the sky.
Use complexity metrics to quantify your code's quality and testing, but recognize its limitations. Augment it with coverage tools.
Footnotes:
1 I despise the word "coding." Historically coding was the most dreary of all activities: the replacement of plain text by encrypted cipher. Low-level functionaries, or even machines, did the work. Maybe "coding" is an appropriate term for script kiddies or HTML taggers. If we are coders you can be certain that in very short order some AI will replace us. No, we in the firmware world practice2 software engineering: implementing complex ideas in software using the precepts of careful engineering. These include analysis, design, negotiating with customers, implementation and measurements of our implementations.
2 Bob Dylan got it right: "he not busy being born is busy dying". We should be forever practicing software engineering. Practice: "perform (an activity) or exercise (a skill) repeatedly or regularly in order to improve or maintain one's proficiency." Unless we're constantly striving to improve we'll be dinosaurs awaiting the comet of our destruction.
@embedded
Embedded Academy
📰 #آگهی_استخدام 📍 #تهران 📌 فرصتهای شغلی مرتبط با مهندسی نهفته 👇 @embedded
📰 #آگهی_استخدام
📍 #تهران
شرکت فناوری خاص فعال در طراحی Embedded System در حوزه های زیر دعوت به همکاری مینماید📣
آدرس: تهران، منطقه ۲۲ ، شمال وردآورد
1️⃣ طراح سختافزار
طراحی شماتیک و PCB با همکاری مدیر فنی با رعایت استاندارهای لازم
حداقل یک سال سابقه کار با نرمافزار Altium یا مشابه
طراحی Symbol و Footprint و استفاده از Datasheet
آشنایی با مقدمات طراحی بردهای چند لایه
2️⃣ توسعهدهنده نرمافزاری سیستمی
برنامه نویسی ++C/C
آشنایی با اجزای سیستمعامل گنولینوکس
آشنایی با برنامهنویسی میکروکنترلرها
3️⃣ هوش مصنوعی در سیستمهای محدود
برنامه نویسی ++C/C یا Python
علاقمند در حوزه کاری شبکه عصبی / یادگیری عمیق
کارآموزی با برد Jetson Nano
4️⃣ مدیر داخلی شرکت دانش بنیان
امور مربوط به منابع انسانی / مالی و بازرگانی
ترجیحاً ساکن غرب تهران ،اندیشه،شهریار، شهر قدس، استان کرج
لطفاً رزومه خود را به آدرس های زیر ارسال نمایید
@EmbeddedS
[email protected]
@ofteax
📌 فرصتهای شغلی مرتبط با مهندسی نهفته 👇
@embedded
📍 #تهران
شرکت فناوری خاص فعال در طراحی Embedded System در حوزه های زیر دعوت به همکاری مینماید📣
آدرس: تهران، منطقه ۲۲ ، شمال وردآورد
1️⃣ طراح سختافزار
طراحی شماتیک و PCB با همکاری مدیر فنی با رعایت استاندارهای لازم
حداقل یک سال سابقه کار با نرمافزار Altium یا مشابه
طراحی Symbol و Footprint و استفاده از Datasheet
آشنایی با مقدمات طراحی بردهای چند لایه
2️⃣ توسعهدهنده نرمافزاری سیستمی
برنامه نویسی ++C/C
آشنایی با اجزای سیستمعامل گنولینوکس
آشنایی با برنامهنویسی میکروکنترلرها
3️⃣ هوش مصنوعی در سیستمهای محدود
برنامه نویسی ++C/C یا Python
علاقمند در حوزه کاری شبکه عصبی / یادگیری عمیق
کارآموزی با برد Jetson Nano
4️⃣ مدیر داخلی شرکت دانش بنیان
امور مربوط به منابع انسانی / مالی و بازرگانی
ترجیحاً ساکن غرب تهران ،اندیشه،شهریار، شهر قدس، استان کرج
لطفاً رزومه خود را به آدرس های زیر ارسال نمایید
@EmbeddedS
[email protected]
@ofteax
📌 فرصتهای شغلی مرتبط با مهندسی نهفته 👇
@embedded
Embedded Academy
🔸#تازه_ها استفاده از هوش مصنوعی و یادگیری ماشین در فضاپیماها بهدلیل قابلیت بالای deep learning در ارائه هوش محاسباتی پیچیده ، هوش مصنوعی به گزینه جذابی جهت بهبود اجرای عملیات ها و کاهش هزینه های عملیاتی علیالخصوص…
This media is not supported in your browser
VIEW IN TELEGRAM
🔺 استفاده از فناوری بینایی ماشین و هوش مصنوعی در تشخیص آنی آتش🔥 و خاموش کردن آن
📌 ترکیب دوربین نظارتی و سیستم اطفا حریق ایده اصلی این سیستم است که با جایگزینی پردازش و تحلیل تصویر بجای سنسورهای معمول دود و آتش میتواند به کاهش هزینه (پوشش بیشتر دوربین نسبت به سنسورهای معمول) و همچنین افزایش سرعت پاسخ (سرعت بالاتر تشخیص آتش با استفاده از پردازش تصویر نسبت به سنسور) منجر شود. همچنین تشخیص زاویه مناسب جهت پاشش به ارتقا و بهرهوری سیستم اطفا حریق، در مقایسه با پاشش کور در سیستمهای معمول اطفا حریق کمک میکند.
#AI #MachineVision
@embedded
📌 ترکیب دوربین نظارتی و سیستم اطفا حریق ایده اصلی این سیستم است که با جایگزینی پردازش و تحلیل تصویر بجای سنسورهای معمول دود و آتش میتواند به کاهش هزینه (پوشش بیشتر دوربین نسبت به سنسورهای معمول) و همچنین افزایش سرعت پاسخ (سرعت بالاتر تشخیص آتش با استفاده از پردازش تصویر نسبت به سنسور) منجر شود. همچنین تشخیص زاویه مناسب جهت پاشش به ارتقا و بهرهوری سیستم اطفا حریق، در مقایسه با پاشش کور در سیستمهای معمول اطفا حریق کمک میکند.
#AI #MachineVision
@embedded
Embedded Academy
✅ Where Complexity Fails Us ✍ Jack Ganssle Engineering is about numbers. Do you specify a ±5% resistor or ±1%? Do the math! Will all of the signals arrive at the latch at the proper time? A proper analysis will reveal the truth. How hot will that part get?…
🔺 One-third of all software faults take more than 5000 execution-years to fail. Thus, testing is an inadequate way to insure correctness.
👉 Adams, N.E "Optimizing preventive service of software products", IBM Journal of Research and Development, 28(1), p. 2-14
#EmbeddedQuotes
@embedded
👉 Adams, N.E "Optimizing preventive service of software products", IBM Journal of Research and Development, 28(1), p. 2-14
#EmbeddedQuotes
@embedded
Embedded Academy
🎞 #فیلم؛ 💎 ویدئوی تبلیغاتی خودروی Lexus ES 👈 اگر از دیدن این فیلم هیجان زده شدید و لذت بردید تعجب نکنید! 😳 این فیلم تبلیغاتی توسط #هوش_مصنوعی ساخته شده است تا بیشترین تاثیر را داشته باشد! 🔍 تحلیل سکانس های مختلف این فیلم از لحاظ روانشناسی تبلیغات را از…
This media is not supported in your browser
VIEW IN TELEGRAM
Embedded Academy
🖼 #تصویر؛ 🔸 خلاصه تفاوت مفهوم رایانش ابری ، رایانش مه و رایانش لبه #Cloud_Computing #Fog_Computing #Edge_Computing 👈 در ابتدا #رایانش_مه و #رایانش_لبه به یک معنا تعبیر می شدند. 👈 تئوری پایه این رایانش ، نزدیک نگه داشتن دیتا به زمین یا همان دستگاه های…
What is Edge Computing?
Edge computing is a distributed computing paradigm that brings computation and data storage closer to the sources of data.
This is expected to improve response times and save bandwidth.
It is an architecture rather than a specific technology.
It is a topology- and location-sensitive form of distributed computing.
This video focuses on edge computing and some cloud computing:
https://youtu.be/0idvaOCnF9E
via Rei Notes
#EdgeComputing
@embedded
Edge computing is a distributed computing paradigm that brings computation and data storage closer to the sources of data.
This is expected to improve response times and save bandwidth.
It is an architecture rather than a specific technology.
It is a topology- and location-sensitive form of distributed computing.
This video focuses on edge computing and some cloud computing:
https://youtu.be/0idvaOCnF9E
via Rei Notes
#EdgeComputing
@embedded
YouTube
Explaining Edge Computing
Edge computing definitions and concepts. This non-technical video focuses on edge computing and cloud computing, as well as edge computing and the deployment of vision recognition and other AI applications. Also introduced are mesh networks, SBC (single board…