Алексей Сигаев
Операционные системы для встраиваемых применений
В настоящее время такая область электроники, как встраиваемые системы, развивается стремительными темпами. Связано это в первую очередь со значительным прогрессом в области технологий и быстрым удешевлением элементной базы. Еще не так давно выражение «встраиваемая система» (embedded system) ассоциировалось у многих только с системами, построенными на базе 8-разрядных микроконтроллеров. Однако сейчас уже никого не удивит управляющая система, построенная на базе 32-разрядного RISC-процессора
и имеющая 64 Mбайт памяти. Такой быстрый прогресс позволяет значительно расширить круг применения встраиваемых систем.
Действительно, если раньше в какой-либо из областей применение встраиваемых систем было экономически неоправданным (или даже просто невозможным в силу их небольшой вычислительной мощности), то в настоящее время встраиваемые решения приобретают все большую привлекательность. Сегодня практически любое сколько-нибудь сложное электронное устройство не обходится без применения микроконтроллерных систем, управляющих его функционированием.
Быстрое развитие встраиваемых систем естественным образом повлекло за собой изменения в идеологии разработки программного обеспечения для них. Так, если лет десять назад практически все ПО для встраиваемых применений писалось на ассемблере, то сегодня сложно найти серьезный проект, в котором код на ассемблере занимает хотя бы 20 % от общего объема. Все чаще при разработке используются языки высокого уровня (в первую очередь C). Соответственно, значительно усложняются как сами программы, так и процесс их отладки. Языки высокого уровня обладают, помимо удобства использования, еще одним огромным преимуществом перед ассемблером: программы, написанные на них, гораздо легче переносятся между платформами. И если ассемблерную программу при переносе на другое семейство микроконтроллеров приходилось полностью переписывать, то в программе на языке высокого уровня достаточно просто изменить те участки, которые непосредственно отвечают за взаимодействие с аппаратным обеспечением.
Однако необходимость даже таких, казалось бы, незначительных, изменений может в больших проектах представлять собой определенную сложность. Логичным выходом в такой ситуации может служить применение какого-либо рода операционной системы, которая будет предоставлять прикладной программе стандартный интерфейс, независимый от платформы. Идея применения операционных систем не нова, они с успехом используются практически с момента создания первых компьютеров, однако встраиваемые операционные системы должны обладать некоторыми специфическими особенностями, главной из которых является относительно малый объем кода. Действительно, если для операционных систем персональных компьютеров компактность является приятным и полезным, но отнюдь не необходимым качеством, то с операционными системами для встраиваемых применений дело обстоит иначе. Объем доступной памяти, как правило, достаточно невелик, а его расширение (если оно вообще возможно) требует дополнительных материальных затрат, что далеко не лучшим образом сказывается на стоимости продукта в целом. Чаще всего ядро встраиваемой операционной системы занимает порядка нескольких килобайт, и еще несколько килобайт требуется для различных драйверов. В свете вышесказанного несколько странно звучит название «Embedded Windows NT» (а такая операционная система существует).
В целом встраиваемая операционная система по возлагаемым на нее функциям практически не отличается от операционных систем персональных компьютеров и должна предоставлять следующие возможности:
- управление памятью (memory management);
- управление процессами (tasks management);
- интерфейс с периферийными устройствами (ввод/вывод, устройства хранения данных и т. п.);
- поддержка различных коммуникационных протоколов.
При этом если первые две функции выполняются ядром операционной системы, то интерфейс с устройствами и поддержку различных протоколов часто выносят в отдельные модули (своего рода аналоги драйверов), что повышает гибкость использования операционной системы.
К настоящему времени спектр имеющихся операционных систем чрезвычайно широк. Условно все операционные системы можно разделить на три категории по заложенным в них возможностям:
- системы, обеспечивающие только управление памятью и задачами; подобные операционные системы присутствуют в том или ином виде практически в каждом устройстве и имеют очень малый объем (порядка двух-трех сотен строк кода); часто такая операционная система пишется индивидуально для каждого проекта (при этом она может и не выделяться из программного обеспечения в операционную систему как таковую); как правило, подобные операционные системы используются при создании относительно простых устройств;
- системы, имеющие жестко заложенные в них средства взаимодействия с внешним миром; подобные системы, как и предыдущие, разрабатываются для обеспечения надобностей конкретного проекта; такой подход позволяет минимизировать объем кода и добиться максимальной производительности в ущерб универсальности использования;
- системы, имеющие четко выраженную модульность; подобные операционные системы чаще всего имеют ядро, которое обеспечивает управление памятью и процессами, а также взаимодействие процессов между собой; кроме того, имеется набор драйверов для поддержки различных периферийных устройств, коммуникационных протоколов и т. п.; этот тип операционных систем является наиболее универсальным, причем, как правило, имеется несколько реализаций для различных аппаратных платформ.
Представленная на следующей странице таблица является результатом продолжительных поисков в сети Интернет информации о различных операционных системах. В ней приведена сводная информация о более чем 45 операционных системах различного уровня сложности. Вся приведенная информация была взята с Web-сайтов фирм-разработчиков. Пробелы в таблице означают отсутствие или неясность информации по данному пункту.
Продукт |
Разработчик |
Поддерживаемые процессоры |
Требования к памяти |
Поддерживаемые компиляторы и отладчики |
ROM, килобайт |
RAM, килобайт |
Мин. |
Макс. |
Мин. |
Макс. |
Nucleus PLUS |
Accelerated Technology Inc. |
6800, 68HC11, 68HC16, 68K, ARM, C16x, ColdFire, H8, MIPS, MPC8xx, PowerPC, SH, SPARC, TI DSPs, V800, x86, M-Core, C16A/B, CR32,... |
3 |
45 |
2 |
4 |
GNU, ARM, Metaware, Microsoft, Borland, Watcom, IAR, Hitachi, Tasking, TI,... |
Windows CE |
Anasoft |
ARM, MIPS, PowerPC, SH, x86, StrongARM |
|
|
|
|
|
AppForge |
AppForge Software Inc. |
68K, ARM, SH, Motorola, M-Core |
256 |
|
128 |
|
|
AvSYS RTOS |
Avocet Systems Inc. |
All processors for which an ANSI C compiler is available |
0.8 |
640 |
0.8 |
640 |
|
e/BSD |
Berkley Software Design |
SPARC, Intel 386, 486, Pentium |
2048 |
2048000 |
2048 |
2048 |
|
TargetOS |
Blunk Microsystems |
68K, MPC8xx, PowerPC |
40 |
|
12 |
|
CodeWarrior |
CMX-RTX |
CMX Co. |
68HC0/08/11/12/16, 68K, 78K, 80196, x51, ARM, C16x, ColdFire, H8, MELPS 7700, MPC8xx, PIC, PowerPC, SH, TI DSPs, x86, AVR, ST,... |
1 |
5 |
0.2 |
|
CMX CMXBug, CMXTracker |
DR-DOS |
Caldera Thin Clients Inc. |
x86 Protected Mode, x86 Real Mode |
32 |
|
128 |
|
Any DOS-compatible compilers and debuggers |
Smart Firmware |
CodeGen Inc. |
Alpha, ARM, i960, MPC8xx, 175 PowerPC0A, SH, SPARC, x86 |
256 |
512 |
256 |
1024 |
|
DACS |
DDC-I |
MIPS, SPARC, x86, Protected Mode, x86 Real Mode, x86 Flat Mode |
4 |
25 |
|
270 |
|
TADS |
DDC-I |
1750A, 68K, i960 |
16 |
16 |
0.116 |
6 |
|
ROM-DOS |
Datalight |
x86 Real Mode |
48 |
70 |
54 |
80 |
Any DOS-compatible compilers and debuggers |
WinLight |
Datalight |
x86 Protected Mode |
470 |
1024 |
512 |
1024 |
|
RTPX |
EBS Inc. |
68K, PowerPC, x86 Protected Mode, x86 Real Mode |
10 |
10 |
10 |
10 |
|
EMAC RTOS |
EMAC Inc. |
x86 |
4 |
22 |
8 |
32 |
GDB |
Echelon RTOS |
Echelon Corp. |
MC3150/3120 Neuron Chip |
10 |
64 |
1 |
64 |
Neuron C, Neuron C Debugger |
RTXC |
Embedded System Products |
68HC11/12/16, 68K, 80196, x51, ARM, C16x, ColdFire, H8, MPC8xx, PowerPc, TI DSPs, x86, DSP56K, StartCore, M-Core, M16C |
4 |
12 |
4 |
|
MetaWorks, Microsoft, Microtec, Borland, MetaWare, TASKING, IAR, Cosmic, ARM,... |
Enea RTOS |
Enea OSE Systems |
68K, ARM, MPC8xx, PowerPC |
2 |
15 |
1 |
1 |
SingleStep Debugging Solutions |
ThreadX |
Express Logic Inc. |
68HC11, 68HC12, 68HC16, 68K, ARM, ColdFare, H8, i960, MIPS, MPC8xx, PowerPC, SH, SPARC, TI DSPs, V800, x86, ARC |
|
|
|
|
Green Hills, Software, MetaWare, Diab Data, Metrowerks, GNU, APEX, XRAY,... |
Eyrx |
Eyring Logic Inc. |
x86 Protected Mode |
32 |
128 |
64 |
2048 |
Microsoft Visual C |
G-OS |
GAIO Technology Inc. |
68K, ARM, H8, H, V800 |
12 |
15 |
|
|
GAIO Open Plus |
Integrity |
Green Hills Software |
PowerPC |
|
|
4 |
|
Green Hills Optimizing Compilers |
ThreadX |
Green Hills Software |
68K, ARM, ColdFire, i960, MIPS, MPC8xx, PowerPC, SH, V800 |
|
|
1 |
2 |
Green Hills Optimizing Compilers |
SOOM |
Hiware |
68HC11/16, 68K, H8 |
1 |
12 |
0.6 |
5 |
|
PXROS |
HightTec EDV Systeme |
68K, C16xx, PowerPC, x86 Protecter Mode |
6 |
|
0.05 |
|
TGDB, Fastview |
Inferno |
Inferno Network Software |
ARM, PowerPC, x86 Protected Mode, x85 Real Mode, StrongARM, 110, 1100 |
512 |
1024 |
512 |
1024 |
|
POSEK |
Integrated Systems Inc. |
C16xx, PowerPC, N-Coer, M32/R |
1 |
1 |
1 |
5 |
SDS, SearchLight, Tasking, Diab Data |
PRISM+ |
Integrated Systems Inc. |
68K, ARM, MIPS, MPC8xx, PowerPC, x86, Mitsubishi M32/R |
|
|
|
|
Diab Data, CAD-UL, ARM Consortium, XDUS |
PSOSystem |
Integrated Systems Inc. |
ARM, i960, PowerPC, Mitsubishi M3R/R, M-Core, V850E, V830 |
|
|
|
|
Diab Data, CAD-UL, ARM Consortium, XDUS |
C Executive |
JMI Software Systems Inc. |
29K, 68K, ARM, ColdFire, i860, i960, MIPS, MPC8xx, PowerPC, SH, SPARC, TI DSPs, V800, x86, PA-RISC, Transputer |
5 |
22 |
1 |
2 |
Cygnus, Matcom, Green Hills, Borland, SDS, Diab Data, Intel |
PCX |
JMI Software Systems Inc. |
68K, ARM, ColdFier, i960, MIPS, PowerPC, V800, x86 Protected Mode |
25 |
45 |
2 |
4 |
Diab Data, Cygnus, Green Hills, Matcom, Intel, SDS |
AMX |
KADAK Products Ltd. |
29K, 68K, ARM, ColFire, i960, MIPS, MPC8xx, PowerPC, x86, Z80/Z180 |
|
|
|
|
Microsoft, Borland, MetaWare, sds, arm,/// |
RTX |
Keil Software |
80251, 8051, and derivatives, C166 |
8 |
16 |
11 |
16 |
dScope |
LynxOS |
Lynx Real-Time Systems |
MIPS, MPC8xx, PowerPC, SH, x86 Protected Mode, uSPARC, MPC8260 |
37 |
263 |
11 |
32 |
TotalViev, TimeScan, Insure++, Total/db, gdb |
VRTX |
Mentor Graphics |
68K, ARM, MPC8xx, PowerPC, x86 Protected Mode, x86 Real Mode, M-Core |
|
|
|
|
XRAY Debugger |
SMX++ |
Micro Digital Inc. |
ColdFire, PowerPC, x86 Protected Mode, x86 Real Mode |
8.7 |
30.5 |
12 |
|
Borland, Diab, High, Visual, Watcom |
OS-9 |
Microware Systems Corp. |
68K, StrongARM, PowerPC, SH, x86 Protected Mode |
128 |
16000 |
128 |
16000 |
UCC+GCC |
JSCP |
NSI Com. |
68K, ARM, i960, MIPS, PowerPC, SH, SPARC, x86, Philips, TriMedia |
|
|
|
|
|
OnTime RTOS |
On Time Software |
x86 Protected Mode |
8 |
128 |
8 |
128 |
Microsoft, Watcom, Borland |
RTKernel |
On Time Software |
x86 Real Mode |
10 |
16 |
4 |
6 |
Microsoft, Watcom, Borland |
TNT Toolsuite |
Phar Lap Software Inc. |
x86 Protected Mode |
48 |
600 |
17 |
540 |
Microsoft Visual C/C++ Compiler |
Precise/MQX |
Precise Software Technologies Inc. |
68K, ARM, ColFire, MIPS, MPC8xx, PowerPC, TI DSPs, x86, 683xx, ADSP2106x, CPU-32, DSP56xxx, M-Core |
3 |
40 |
1.5 |
|
Algorithmics, Visual DSP, ARM, Borland, Diab Data, Green Hills, Mentor Graphics,... |
QNX |
QNX Software Systems |
MIPS, PowerPC, x86 Protected Mode, x86 Real Mode |
32 |
64 |
8 |
32 |
GNU GCC C/C++, Watcom C/C++ |
ChorusOS |
Sun Microsystems Inc. |
ARM, MPC8xx, PowerPC, SPARC, x86 Real Mode |
|
|
|
|
|
Precise |
Tasking Inc. |
68K, MIPS, MPC8xx, PowerPC |
4 |
40 |
5 |
|
Tasking |
SuperTask! |
US Software |
68HC11/16, 68K, 80196, x51, ARM, C16x, ColFire, i960, MIPS, MPC8xx, PowerPC, SH, SPARC, x86, Z80/Z180, CR16, M-Core |
7 |
25 |
6 |
30 |
Microsoft, Watcom. MetaWare, Borland, Diab Data, Cross Code, Green Hills, MRI, GNU |
TronTask! |
US Software |
ARM, ColdFire, MPC8xx, SH, x86, CR16, M-Core |
8 |
20 |
6 |
30 |
Diab Data, Green Hills, Borland, Microsoft |
Tornado |
Wind River Systems |
68K, ARM, i960, MIPS, PowerPC, SH, SPARC, ColdFire, x86 Protected Mode, C16xx, M-Core, CPU32, RAD6K |
15 |
|
5 |
|
|
phantom@tversu.ru
|