Кіріспе

Компьютерлерді басқаруға арналған компьютерлік бағдарламалық қамтамасыз ету, әдетте компьютерлер деп есептелмейтін машиналар мен құрылғыларды басқаруға арналған компьютерлік бағдарламалық қамтамасыз ету, көбінесе кіріктірілген жүйелер деп аталады. Ол әдетте жұмыс істейтін нақты аппараттық құралға арналған және уақыт және жад шектеулеріне ие. Бұл термин кейде микрокодпен (firmware) алмастырылып қолданылады. Нақты және тұрақты ерекшелігі – кіріктірілген бағдарламалық қамтамасыз етудің функциялары адам интерфейсі арқылы емес, машина интерфейсі арқылы басталады/басқарылады. Өндірушілер кіріктірілген бағдарламалық қамтамасыз етуді автокөліктердің, телефондардың, модемдердің, роботтардың, тұрмыстық техниканың, ойыншықтардың, қауіпсіздік жүйелерінің, кардиостимуляторлардың, теледидарлардың, приставкалардың және цифрлық сағаттардың электроникасына енгізеді. Бұл бағдарламалық қамтамасыз ету өте қарапайым болуы мүмкін, мысалы, 8 биттік микроконтроллерде бірнеше килобайт жадымен жұмыс істейтін шамдарды басқару, өңдеу күрделілігінің тиісті деңгейі ықтималдықпен шамамен дұрыс есептеу (randomized алгоритмдерге негізделген әдістеме) арқылы анықталады. Дегенмен, кіріктірілген бағдарламалық қамтамасыз ету маршрутизаторлар, оптикалық желі элементтері, ұшақтар, зымырандар және процестерді басқару жүйелері сияқты қолдануларда өте күрделі болуы мүмкін.

Операциялық жүйелер

Стандартты компьютерлер macOS, Windows немесе Linux сияқты операциялық жүйелерді пайдаланса, кіріктірілген бағдарламалық жасақтама операциялық жүйесіз жұмыс істеуі мүмкін. Егер қолданылса, нақты уақыт операциялық жүйесі сияқты әртүрлі операциялық жүйелерді таңдауға болады. Кіріктірілген бағдарламалық жасақтаманың коды әдетте C немесе C++ тілдерінде жазылады, бірақ Java, Python және JavaScript сияқты жоғары деңгейлі бағдарламалау тілдері де микроконтроллерлер мен кіріктірілген жүйелерді бағдарлау үшін жиі қолданылады. Ассемблер тілдері де, әсіресе жүктеу кезінде және үзілістерді басқаруда кеңінен қолданылады. Кейбір әскери және авиациялық жобаларда Ada қолданылады.

Қолданбалық бағдарламалық жасақтамадан айырмашылықтары

Тұтынушылардың көпшілігі компьютерде функционалдық қамтамасыз ететін қолданбалы бағдарламалық қамтамасыз етумен таныс. Дегенмен, кіріктірілген бағдарламалық қамтамасыз ету көбінесе көзге көрінбейді, бірақ одан кем күрделі емес. Қолданбалы бағдарламалық жасақтамадан өзгеше, кіріктірілген бағдарламалық жасақтаманың аппараттық талаптары мен мүмкіндіктері белгілі, ал үшінші тараптың аппараттық немесе бағдарламалық жасақтамаларын қосу қатаң түрде бақыланады. Кіріктірілген бағдарламалық жасақтама өндіріс кезінде қажетті барлық құрылғы драйверлерін қамтуы тиіс, ал құрылғы драйверлері әртүрлі аппараттық құрылғылар үшін жазылады. Бұл құрылғы драйверлері, BSP (Board support package) деп аталады, ол белгілі бір операциялық жүйенің (әдетте, нақты уақыт операциялық жүйесі немесе RTOS) белгілі бір аппараттық ортада (компьютер немесе процессорлық карта) жұмыс істеуіне мүмкіндік беретін аппараттық ерекше драйверлер мен басқа да процедураларды қамтитын бағдарламалық жасақтаманың қабатын құрайды. Бағдарламалық қамтамасыз ету таңдалған процессор мен нақты чиптерге жоғары дәрежеде тәуелді. Көптеген кіріктірілген бағдарламалық жасақтама инженерлерінің схемаларды оқу және компоненттердің деректер кестелерін оқу арқылы тіркелімдер мен байланыс жүйесін пайдалануды анықтау туралы білімі болады. Ондық, он алтылық және екілік сандарды түрлендіру, сондай-ақ биттерді манипуляциялау пайдалы. Аппаратты басқару үшін веб-қосымшалар жиі қолданылады, бірақ XML файлдары мен басқа да деректер компьютерде көрсету үшін берілуі мүмкін. Әдетте, қалталармен файлдық жүйелер қолданылады, бірақ SQL деректер базалары көбінесе жоқ. Бағдарламалық жасақтаманы әзірлеу үшін кросс-компиляторды пайдалану қажет, ол компьютерде жұмыс істейді, бірақ мақсатты құрылғы үшін орындалатын кодты шығарады. Қателерді жою үшін схема эмуляторы және JTAG немесе SWD дебьюгерлері сияқты аппараттық құралдар қолданылады. Бағдарламалық жасақтаманы жасаушылар көбінесе толық ядролық (OS) бастапқы кодына қол жеткізе алады. Жад пен жедел жадтың көлемі айтарлықтай өзгеруі мүмкін. Кейбір жүйелер 16 КБ Flash және 4 КБ RAM-те 8 МГц жиілікте жұмыс істейтін процессормен жұмыс істейді, ал басқа жүйелер қазіргі заманғы компьютерлермен бәсекелесе алады. Бұл кеңістік талаптары C++ орнына C немесе кіріктірілген C++ тілінде көбірек жұмыс істеуге алып келеді. BASIC (мысалы, Parallax Propeller құрастырылған BASIC-ті қолдана алады) және Java (Java ME Embedded 8.3 ARM Cortex M4, Cortex M7 микробақылаушылары және Raspberry Pi және Intel Galileo Gen. 2-де қолданылатын ескі ARM11 үшін қол жетімді) сияқты интерпретацияланған тілдер жиі қолданылмайды; алайда, Python 3 интерпретацияланған MicroPython тілінің нұсқасы микробақылаушыларды пайдалану үшін арнайы қол жетімді, мысалы, 32 биттік ARM негізді (мысалы, BBC micro:bit) және 16 биттік PIC микробақылаушылары.

Байланыс протоколдары

Процессорлар арасындағы және бір процессор мен басқа компоненттер арасындағы байланыс маңызды. Тікелей жад адрестеуден басқа, аппараттық деңгейдегі жалпы протоколдарға I²C, SPI, тізбекті порттар, 1-Wire, Ethernet және USB жатады. Кіріктірілген жүйелерде пайдалануға арналған байланыс протоколдары InterNiche Technologies және CMX Systems сияқты компаниялардан жабық код түрінде қолжетімді. Ашық кодты протоколдар uIP, lwIP және басқаларынан шығады.