**برنامه‌سازی سامانه‌های توکار** (یا *برنامه‌سازی سامانه‌های نهفته*)، عبارت است از تمام فرایند برپاسازی ابزارها، تنظیم زنجیره ابزار، پرت کردن، برنامه‌نویسی، لینک و دیباگ برای ایجاد کد قابل اجرا بر روی سامانه‌های توکار. همچنین پس از آن با استفاده از ابزارهای جانبی آزمایش و دیباگ برنامه در حال اجرا بر روی سامانه هدف.

سامانهٔ توکار: سخت‌افزار و نرم‌افزار
------------------------------------

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

### پاسخ بی‌درنگ

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

### قابل اعتماد بودن

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

### محدودیت‌های سامانه‌های توکار

معمولا با توجه به اینکه سامانه‌های توکار در چه حوضه‌ای مورد استفاده قرار می‌گیرند، دارای یک سری محدودیت‌ها می‌باشند. این محدودیت‌ها می‌تواند مربوط به حجم، وزن، قیمت، توان مصرفی و چیزهای دیگر باشد؛ مثلاً در مورد سامانه‌های مبتنی بر باتری (Battery-based)، توان مصرفی یکی از عامل‌های مهم است که در حین طراحی و ساخت سامانه باید مدنظر قرار داده شود.

### مقاوم در برابر خطای نرم‌افزاری و سخت‌افزاری

بسیاری از سامانه‌های توکار معمولاً در جایی دور از دسترس انسان، یا توسعه‌دهنده کار می‌کنند؛ مثلاً سامانهٔ Access بی‌سیم که برای دادن اتصال تلفن و موبایل به جاهایی که کابل‌کشی برای آن‌ها مقرون به صرفه نیست، باید بتواند بدون نیاز به حضور تکنیسین در نزدیکی آن کارش را انجام دهد یا خطاهای جزئی را رفع کند. مبحث محافظت در دستگاه‌های مخابراتی سرفصلی برای این قبیل موارد دارد؛ بنابراین این قبیل سامانه‌ها حتی در صورتی که خرابی عمده‌ای هم رخ دهد، باید بتوانند تا جای ممکن به کار خود، یا حداقل قسمت بحرانی و مهم آن ادامه دهند.

توسعه نرم‌افزار
---------------

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

### سیستم‌عامل

اولین مورد بررسی سطح پیچیدگی عملکرد سامانه برای سنجش نیازمندی ساختار به سیستم‌عامل است. سیستم‌عامل غالباً در مواردی استفاده می‌شود که پیچیدگی عملکرد سامانه، یا نیاز آن به پروتکلهای ارتباطی وجود آن را اجباری کند، وگرنه در سامانه‌های صنعتی تأکید بر سادگی، ارزان تمام شدن و سریع بودن است؛ مثلاً یک سامانهٔ کنترل ماشین لباسشویی یا تلفن عمومی نیازی به سیستم‌عامل ندارد، اما یک خودپرداز (اگر چه بدون سیستم‌عامل هم قابل پیاده‌سازی است) به خاطر نیاز به ارتباط مجموعه پروتکل اینترنت ارزش استفاده از سیستم‌عامل را دارد.
در پیاده‌سازی سامانه‌های توکار، در صورتی که نیاز باشد، می‌توان از سیستم‌عامل‌های مختلفی استفاده کرد؛ مثلاً در بسیاری سامانه‌ها که در ساختار ساده هستند، اما نیاز به پروتکل‌های شبکه دارد، می‌توان از سیستم‌عامل ویندوز به صورت ساده شده‌استفاده کرد. در این مورد انتخابهای مختلفی وجود دارد، برای مثال برخی خودپردازها از ویندوز ۹۸ خلاصه شده‌استفاده می‌کنند. سامانه‌های جهت‌یاب رادیویی ساخت صنایع داخلی در نسخه‌های مختلف از داس ۵، ویندوز ۹۸، ویندوز سی‌ایی (Windows CE)، ویندوز اکس‌پی نهفته (Window XP Embedded) استفاده می‌کنند. برخی سامانه‌های مخابراتی ساخت ایران از سیستم‌عامل‌های نهفته VxWorks یا eCos استفاده می‌کنند که دومی سیستم‌عامل متن‌باز شرکت سیگنوس است و در حاضر توسط شرکت eCos Centric پشتیبانی می‌شود.
لینوکس نهفته هم انتخاب دیگری است که می‌توان از آن برای این قبیل توسعه استفاده کرد.

### زنجیره ابزار

همانند هر نرم‌افزار دیگری، برای توسعه نرم‌افزارهای توکار به زنجیره ابزارهای خاصی نیاز هست. این زنجیره ابزار، اما تفاوت خاصی با سایر زنجیره ابزارها دارد، با توجه به *خاص‌کاربرد* بودن سامانه‌های توکار، معمولاً امکان اجرای برنامه کامپایلر، لینکر و دیگر ابزارهای توسعه و بخش‌های مختلف زنجیره ابزار بر روی این سکوها وجود ندارد. در اینجا بحث کراس-کامپایل مطرح می‌شود، یعنی برنامه بر روی یک سامانه برای سامانه دیگر کامپایل می‌شود. این کار نیازمند تهیه مقدمات خاصی و تنظیماتی بر روی ابزارها است.
به علاوه پس از توسعه، کدنویسی، کامپایل، لینک و بار کردن کد نهایی بر روی سامانه هدف، مشکل دیباگ آن در حال اجرا پیش می‌آید. برای دیباگ این قبیل برنامه‌ها نیاز به ابزارهای اشکال‌زدایی درون مداری (In Circuit Debugger/Emulator) یا آی‌سی‌ایی وجود دارد. آی‌سی‌ایی عبارت است مجموعه‌ای شامل مبدل سخت‌افزاری که بین رایانهٔ توسعه‌دهنده و سخت‌افزار نهفته قرار می‌گیرد و رابط نرم‌افزاری که روی رایانهٔ میزبان اجرا می‌شود. با آی‌سی‌ای می‌توان برنامه را بر روی سامانه بار کرد، گام به گام اجرا کرد، مقادیر متغیرها را در زمان اجرا دید و …

### پرت کردن

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

جستارهای وابسته
---------------

* سامانه توکار (سامانه نهفته)
* eCos
* زنجیره ابزار
* آی‌سی‌ایی
* برنامه‌نویسی
* ویژوال سی نهفته