در این نوشته آنچه توسعه دهندگان نرم افزارهای Embedded از یک برنامه نویس نرم افزارهای عمومی بیشتر می دانند بررسی می گردد. البته این به معنای آن نیست که هر آنچه یک توسعه دهنده برنامه های کامپیوتری می داند را یک توسعه دهنده نرم افزارهای Embedded نیز می داند. بلکه به این معناست که یک برنامه نویس برای آن که بتواند برای Embedded Systemها نرم افزار تولید کند با این موارد درگیر خواهد شد.
1- دانش سخت افزار
توسعه دهنده نرم افزارهای Embedded باید به طور کامل سخت افزاری که برای آن برنامه می نویسند را بشناسند. در سیستم های Embedded سخت افزار برای کاربردهای مختلف سفارشی شده و از امکانات معمول در سیستم های کامپیوتری خانگی خبری نیست. محدودیت های سرعت پردازش، میزان حافظه و غیره اهمیت بیشتری دارند و برنامه نویس باید از امکانات سخت افزاری به بهترین روش ممکن استفاده کند. برنامه نویس نرم افزارهای عمومی به طور کاملا مستقل از سخت افزار می توانند نرم افزار مورد نظر را توسعه دهند و قریبا لازم نیست که اطلاعات خاصی از سخت افزار داشته باشد.
2- توانایی راه اندازی تجهیزات جانبی
در توسعه نرم افزارهای Embedded پیچیدگی کار لزوما به تعداد خطوط برنامه ارتباط ندارد. ممکن است که یک برنامه 50 خطی زمان زیادی از برنامه نویس بگیرد تا بتواند سخت افزار را به نحو مناسبی با تجهیزات جانبی مثل سنسورها و غیره هماهنگ و مرتبط کند. تنظیم تاخیر ها، تنظیم اولویت های پاسخ دهی به وقفه های و مسائلی از این دست پیچیدگی نرم افزارهای Embedded را تعیین می کنند و لزوما تعداد خطوط برنامه با پیچیدگی برنامه مرتبط نیست. یک مثال دیگر پیاده سازی پروتکل های ارتباطی است. ممکن است لازم باشد ساعت ها وقت لازم باشد تا مستندات پروتکل ارتباطی بررسی شود تا توسعه دهنده نرم افزارهای Embedded یک برنامه جمع و جور برای پیاده سازی این پروتکل ارتباطی بنویسد.
در توسعه نرم افزارهای عمومی کامپیوتری، اصولا تعداد خطوط بیشتر به معنای برنامه پیچیده تر با کارکردهای بیشتر است.
3-کنترل سیستم علاوه بر الگوریتم و پردازش داده
توسعه دهنده نرم افزار Embedded در درجه اول باید با برنامه خود سیستم را کنترل و سخت افزار را مدیریت کند. علاوه براین باید بتواند در قالب مدیریت سیستم، اطلاعات را از دنیای خارج دریافت و پردازش کند و احتمالا خروجی هایی تولید کند و یا بر اساس داده های ورودی سخت افزار را مدیریت کند. این در حالی است که نرم افزارهای عمومی اصولا حول الگوریتم و داده هستند و اصولا یا محاسباتی را انجام می دهند و یا داده ها را ذخیره سازی، پردازش و یا نمایش می دهند.
4- برنامه نویسی برای پردازنده های روی PCB
روند توسعه نرم افزار برای Embedde Systemها به این صورت است که از یک سیستم کامپیوتری برای توسعه نرم افزار و انتقال آن به Embedded Sytem و دیباگ کردن استفاده می شود. این در حالی است که توسعه دهندگان نرم افزارهای عمومی نرم افزار را در محیطی ایجاد می کنند که در همان محیط نیز اجرا خواهد شد. آشنایی با روش های انتقال نرم افزار به Embedded System، دیباگ کردن و غیره آن مواردی هستند که یک توسعه دهنده نرم افزارهای کامپیوتری به آن ها برخورد نخواهد کرد.
5- عیب یابی با اسیلوسکوپ و لاجیک آنالایزر به جای BreakPointها
عمدتا عیب یابی نرم افزارهای Embeddeed با بررسی سیگنال های الکترونیکی که توسط سخت افزار و تحت هدایت نرم افزار ایجاد می گردند، انجام می شود. این بررسی ها با اسیلوسکوپ، لاجیک آنالایزرها و مالتی متر و غیره انجام می شود. در واقع این بررسی ها مشخص می کنند که آیا ارتباط سخت افزار با تجهیزات جانبی و دنیای خارج به طور موثر برقرار شده یا خیر. این در حالی است که دیباگ کردن نرم افزارهای کامپیوتری از طریق Break Point ها و بررسی مقادیر متغیرها در IDE انجام می شود.