Projeto de Sistemas Embarcados Microcontrolados
          Departamento de Engenharia Elétrica
                 Universidad...
Firmwares de sistemas embarcados
 O firmware é responsável por:
   Fazer inicialização básica do hardware (e.g., BIOS):
  ...
Modalidades de desenvolvimento
 TARGET: para sistemas capazes de armazenar e
 executar as ferramentas de desenvolvimento

...
Modalidades de desenvolvimento
 HOST e TARGET: ferramentas de desenvolvimento
 cruzado em um microcomputador hospedeiro


...
Modalidades de desenvolvimento
 HOST, TARGET e unidade de armazenamento
 removível: indicado para estágios iniciais de
 co...
Ciclo de desenvolvimento
 Requisitos: coleta de informações com o cliente.
    Funcionalidades, interface com usuário, des...
Ciclo de desenvolvimento
 Definição da arquitetura de hardware/software:
 esboço na forma de diagrama de blocos dos
 compo...
Ciclo de desenvolvimento
 Implementação: uso de ferramentas de auxílio ao
 projeto
    Formalismos: Unified Modeling Langu...
Tópicos desenvolvidos para a disciplina
 Introdução à linguagem C
    Consultar documento linguagemC.pdf


 Desenvolviment...
Firmware estruturado
 Organização genérica
               RESET


     Inicialização de registros


       Inicialização p...
Firmware estruturado
 Operações atômicas em regiões críticas
   Região crítica: segmento de código que não pode ser
   int...
Firmware estruturado
 Operações atômicas em regiões críticas
     Exemplo: interrupções iniciando com bit I desabilitado
 ...
Firmware estruturado
 Operações atômicas em regiões críticas
      Exemplo: interrupções iniciando com bit I desabilitado
...
Firmware estruturado
 Operações atômicas em regiões críticas
   Exemplo: soluções para as macros de acesso
      Solução 1...
Firmware estruturado
      Quantização e overflow em operações
              Considera-se o problema da obtenção da grande...
Firmware estruturado
 Quantização e overflow em operações
   Considera-se o problema da obtenção da grandeza medida pela
 ...
Firmware estruturado
 Quantização e overflow em operações
   Considera-se o problema da obtenção da grandeza medida pela
 ...
Firmware estruturado
 Quantização e overflow em operações
   Considera-se o problema da obtenção da grandeza medida pela
 ...
Firmware estruturado
 Quantização e overflow em operações
   Considera-se o problema da obtenção da grandeza medida pela
 ...
Firmware estruturado
 Look-up tables (LUTs)
   Em algumas situações, em vez lugar de avaliar uma
   função em tempo de exe...
Firmware estruturado
 Look-up tables (LUTs)
   Situações para as quais usa-se LUTs:
      Cálculo trigonométrico com intei...
Firmware estruturado
 Tópicos não abordados, mas importantes:
   Manutenção do tempo
   Medição de período/freqüência
   L...
Firmware baseado em Kernel
 O que vem a ser um kernel ?
 Funcionalidades mínimas providas por um kernel:
   Gerenciamento ...
Firmware baseado em Kernel
 Classificação de kernels: (wikipedia)
   Kernel monolítico:
      Todos os serviços estão no k...
Firmware baseado em Kernel
 Classificação de kernels: (wikipedia)
   Microkernel:
      Serviços básicos:
          gerenc...
Firmware baseado em Kernel
 Classificação de kernels: (wikipedia)
   Nanokernels:
      Controlam o fluxo de interrupções ...
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)




                                              27
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
   Escalonador
      Associado a uma interrupção de...
Firmware baseado em Kernel
    Sistemas operacionais de tempo real (RTOS)
          Tarefas: modelo e estruturas associada...
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
   Tarefas: estados




     [Li & Yao, 2003]      ...
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
   Tarefas: exemplo

       void tarefa1(void)     ...
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
     Políticas de escalonamento: round-robin
      ...
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
     Políticas de escalonamento: round-robin com pr...
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
     Políticas de escalonamento: preemptivo
       ...
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
     Políticas de escalonamento: round-robin e pree...
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
   Políticas de escalonamento: exemplo (revisitado)...
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
   Semáforos
      Objetos que permitem lidar com o...
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
   Semáforos
      Semáforo binário:




          ...
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
   Semáforos
      Semáforo com contador:




     ...
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
   Semáforos
      Mutex:




                     ...
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
   Semáforos
      Semáforos: implementações com bl...
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
   Semáforos
      Semáforos: implementações sem bl...
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
   Semáforos
      Emprego de semáforos
         Si...
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
   Semáforos
      Emprego de semáforos
         Si...
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
   Semáforos
      Emprego de semáforos
         Mú...
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
    Semáforos
        Exemplo: recurso stdout compa...
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
   Message queues
      Permite a transferência de ...
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
   Message queues
      Estados:




              ...
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
   Message queues
      Procedimento de uso:




  ...
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
   Message queues
      Emprego de message queues:
...
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
   Message queues
      Emprego de message queues:
...
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
   Rate-monotonic schedulers: a prioridade de uma t...
Referências

[Li & Yao, 2003] LI, Q.; YAO, C. Real-Time Concepts for Embedded
    Systems. CMPBooks, 2003.
[Laplante, 1993...
Próximos SlideShares
Carregando em…5
×

Introdução ao desenvolvimento de firmwares

4.276 visualizações

Publicada em

Publicada em: Tecnologia
0 comentários
4 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
4.276
No SlideShare
0
A partir de incorporações
0
Número de incorporações
12
Ações
Compartilhamentos
0
Downloads
184
Comentários
0
Gostaram
4
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Introdução ao desenvolvimento de firmwares

  1. 1. Projeto de Sistemas Embarcados Microcontrolados Departamento de Engenharia Elétrica Universidade de Brasília Introdução ao desenvolvimento de firmwares Prof. Geovany A. Borges gaborges@ene.unb.br
  2. 2. Firmwares de sistemas embarcados O firmware é responsável por: Fazer inicialização básica do hardware (e.g., BIOS): Exemplo: Verificação da memória disponível; Exemplo: Configuração padrão E/S; Repassar o controle para um sistema operacional (bootloader ) Implementar as funcionalidades do sistema embarcado: Firmware estruturado: um único thread e interrupções por hardware. Firmware baseado em kernel: várias tarefas e serviços em execução. 2
  3. 3. Modalidades de desenvolvimento TARGET: para sistemas capazes de armazenar e executar as ferramentas de desenvolvimento 3
  4. 4. Modalidades de desenvolvimento HOST e TARGET: ferramentas de desenvolvimento cruzado em um microcomputador hospedeiro 4
  5. 5. Modalidades de desenvolvimento HOST, TARGET e unidade de armazenamento removível: indicado para estágios iniciais de configuração/otimização do kernel 5
  6. 6. Ciclo de desenvolvimento Requisitos: coleta de informações com o cliente. Funcionalidades, interface com usuário, desempenho, custo, tamanho/peso, consumo... Especificação: requisitos colocados na linguagem do projetista. Interfaces E/S, tempos de resposta, comunicação, periféricos, interdependência entre as partes... 6
  7. 7. Ciclo de desenvolvimento Definição da arquitetura de hardware/software: esboço na forma de diagrama de blocos dos componentes de hardware e de software do sistema. Hardware: Processador e interconexão com periféricos Software: Componentes de software, módulos, bibliotecas. Escolha das ferramentas de desenvolvimento Hardware: kit de desenvolvimento, emuladores Software: sistema operacional, linguagem de programação, bootloaders, IDE Ferramentas de projeto de esquemáticos/PCB Ferramentas de documentação 7
  8. 8. Ciclo de desenvolvimento Implementação: uso de ferramentas de auxílio ao projeto Formalismos: Unified Modeling Language (UML), FSM Implementação de Hardware/Software Testes: verificação de adequação do sistema conforme as especificações Integração de sistemas: implantação do sistema e avaliação acerca da satisfação dos requisitos 8
  9. 9. Tópicos desenvolvidos para a disciplina Introdução à linguagem C Consultar documento linguagemC.pdf Desenvolvimento com o µC ATMega8 Consultar documento desenvolvimentoATmega8.pdf Arquiteturas de firmwares Firmware estruturado Firmware baseado em Kernel 9
  10. 10. Firmware estruturado Organização genérica RESET Inicialização de registros Inicialização primária do hardware S Bootloader? Bootloader N Inicialização de variáveis Inicialização secundária Laço principal ISR 1 ... ISR N do hardware 10
  11. 11. Firmware estruturado Operações atômicas em regiões críticas Região crítica: segmento de código que não pode ser interrompido. Exemplos: Variáveis globais compartilhadas entre diferentes níveis de interrupção Funções não reentrantes Registros de E/S que possuem validade temporal (e.g, contadores de temporizadores) Gerenciamento por softawre de handshake Acesso a uma seqüência de registros de um dispositivo de hardware Conversão A/D “simultânea” de dois ou mais canais sem S- H externo Solução para firmwares estruturados: desabilitar globalmente a ocorrência de interrupções. 11
  12. 12. Firmware estruturado Operações atômicas em regiões críticas Exemplo: interrupções iniciando com bit I desabilitado volatile unsigned int Counter1msTicks = 0; volatile unsigned char DAOutput; SIGNAL (SIG_OUTPUT_COMPARE1A) Vetor 7: maior prioridade { // Decrementa Counter1msTicks a cada interrupção se diferente de 0. if(Counter1msTicks!=0){ --Counter1msTicks; } } SIGNAL (SIG_2WIRE_SERIAL) Vetor 18: menor prioridade { do{ send_twi_digital_to_analogic(DAOutput); delay(5); } while(!receive_twi_analogic_to_digital_device()); } 12
  13. 13. Firmware estruturado Operações atômicas em regiões críticas Exemplo: interrupções iniciando com bit I desabilitado void delay(unsigned int time_ms) // limitado em até 65535 ms. { unsigned int counter = 1; ENTER_CRITICAL(); Counter1msTicks = time_ms; LEAVE_CRITICAL(); while(counter>0){ sleep_mode(); ENTER_CRITICAL(); counter = Counter1msTicks; LEAVE_CRITICAL(); } } 13
  14. 14. Firmware estruturado Operações atômicas em regiões críticas Exemplo: soluções para as macros de acesso Solução 1 #define ENTER_CRITICAL() cli() #define LEAVE_CRITICAL() sei() Solução 2 #define LOCAL_CRITICAL_CONTROL() volatile char cSREG #define ENTER_CRITICAL() cSREG = SREG; cli() #define LEAVE_CRITICAL() SREG = cSREG void delay(unsigned int time_ms) { unsigned int counter = 1; LOCAL_CRITICAL_CONTROL(); ENTER_CRITICAL(); . . . 14
  15. 15. Firmware estruturado Quantização e overflow em operações Considera-se o problema da obtenção da grandeza medida pela leitura de um conversor A/D Sistema T Sensor 10 mV/oC Amplificador 50 mV/oC Conversor A/D X LM35CZ Térmico G=5 10 bits, Vref=5V T Tmax T = K·X + a (Tmax -Tmin) K= (Xmax -Xmin) a = Tmax- K·Xmax = Tmin- K·Xmin Tmin T = K·(X-Xmin) + Tmin Xmin Xmax X 15
  16. 16. Firmware estruturado Quantização e overflow em operações Considera-se o problema da obtenção da grandeza medida pela leitura de um conversor A/D (ponto flutuante) Solução 1 : T = K·(X-Xmin) + Tmin #define Xmax 1023 #define Xmin 0 #define Tmax 99.90234375 /* Temperatura para Xmax */ #define Tmin 0.0 /* Temperatura para Xmin */ float convert_temperature(unsigned int X) { return (Tmax - Tmin)*(X - Xmin)/(Xmax - Xmin) + Tmin; } Problema de quantização 16
  17. 17. Firmware estruturado Quantização e overflow em operações Considera-se o problema da obtenção da grandeza medida pela leitura de um conversor A/D (ponto flutuante) Solução 2 : T = K·(X-Xmin) + Tmin #define Xmax 1023 #define Xmin 0 #define Tmax 99.90234375 /* Temperatura para Xmax */ #define Tmin 0.0 /* Temperatura para Xmin */ float convert_temperature(unsigned int X) { return ((Tmax - Tmin)*(X - Xmin))/(Xmax - Xmin) + Tmin; } 17
  18. 18. Firmware estruturado Quantização e overflow em operações Considera-se o problema da obtenção da grandeza medida pela leitura de um conversor A/D (ponto fixo) Solução 1 : T = K·(X-Xmin) + Tmin #define Xmax 1023 #define Xmin 0 #define Tmax 100 /* Temperatura aproximada para Xmax */ #define Tmin 0 /* Temperatura aproximada para Xmin */ unsigned int convert_temperature(unsigned int X) { return ((Tmax - Tmin)*(X - Xmin))/(Xmax - Xmin) + Tmin; } Possível problema de overflow 18
  19. 19. Firmware estruturado Quantização e overflow em operações Considera-se o problema da obtenção da grandeza medida pela leitura de um conversor A/D (ponto fixo) Solução 2 : T = K·(X-Xmin) + Tmin #define Xmax 1023 #define Xmin 0 #define Tmax 100 /* Temperatura aproximada para Xmax */ #define Tmin 0 /* Temperatura aproximada para Xmin */ unsigned int convert_temperature(unsigned int X) { unsigned long int aux; aux = (X - Xmin); aux = ((Tmax - Tmin)*aux); aux /=(Xmax - Xmin); return ((unsigned int)(aux)) + Tmin; } 19
  20. 20. Firmware estruturado Look-up tables (LUTs) Em algumas situações, em vez lugar de avaliar uma função em tempo de execução, é preferível armazenar resultados indexados em uma tabela e acessá-los quando necessário. Função: Look-up table: x y = f(x) quantização i yi interpolação y tabela 20
  21. 21. Firmware estruturado Look-up tables (LUTs) Situações para as quais usa-se LUTs: Cálculo trigonométrico com inteiros (e.g., geração de uma onda senoidal através de conversor D/A); Leitura A/D de variáveis de característica não-linear (e.g., leitura de termopares, RDTs); Máquina de inferência Fuzzy (e.g, controle Fuzzy); Conversão de código Gray para decimal (e.g., leitura de codificadores ópticos absolutos); Leitura de interfaces de entrada (e.g., conversão de scancodes de teclados em ASCII ou UNICODE). Exercício: geração de sinal PWM para acionamento de motores monofásicos 21
  22. 22. Firmware estruturado Tópicos não abordados, mas importantes: Manutenção do tempo Medição de período/freqüência Leitura de dados por conversão A/D Máquinas de estado FIFOs Listas encadeadas 22
  23. 23. Firmware baseado em Kernel O que vem a ser um kernel ? Funcionalidades mínimas providas por um kernel: Gerenciamento de memória Gerenciamento de processos e comunicação entre processos (IPC) Recursos de E/S Níveis de abstração (processadores avançados): Espaço usuário e espaço kernel Abstração dos dispositivos de E/S (UNIX e Linux) Abstração da camada de hardware: reduz dependência do hardware, tais como unidade de gerenciamento de memória, controladores de interrupção, temporizador, DMA, controlador de tarefas, ... 23
  24. 24. Firmware baseado em Kernel Classificação de kernels: (wikipedia) Kernel monolítico: Todos os serviços estão no kernel Aspectos: (-) menor estabilidade: a falha de um serviço derruba o sistema; (+) se bem feito, alcança elevado nível de desempenho; Exemplos: Linux, Windows 95-98-Me 24
  25. 25. Firmware baseado em Kernel Classificação de kernels: (wikipedia) Microkernel: Serviços básicos: gerenciamento de memória processos e IPC Extensão por meio de servidores Aspectos: (+) maior estabilidade: a falha de um serviço não derruba o sistema; (+) menor footprint e fácil de manter; (-) em geral, se sobrecarregam com mais facilidade; Exemplos: QNX, Minix, AmigaOS 25
  26. 26. Firmware baseado em Kernel Classificação de kernels: (wikipedia) Nanokernels: Controlam o fluxo de interrupções de hardware, redirecionando-as para outros sofwares. Usados como forma de virtualização do hardware, permitindo que vários sistemas operacionais co-existam ao mesmo tempo Limitações de uso de kernels clássicos para sistemas embarcados: Tamanho de memória Não-determinismo de algumas funções Alto jitter para comutação de tarefas Escalonadores buscam maximizar o número de tarefas por período de execução 26
  27. 27. Firmware baseado em Kernel Sistemas operacionais de tempo real (RTOS) 27
  28. 28. Firmware baseado em Kernel Sistemas operacionais de tempo real (RTOS) Escalonador Associado a uma interrupção de temporizador de alta prioridade e periodicidade constante. Responsável por: Atualização dos estados das tarefas Aplicação da política de escalonamento Execução das tarefas Chaveamento de contexto 28
  29. 29. Firmware baseado em Kernel Sistemas operacionais de tempo real (RTOS) Tarefas: modelo e estruturas associadas Estado, prioridade, SP, ponteiros para próximo TCBs vizinhos na lista,... Modelo POSIX Em outros sistemas, a tarefa se encerra (return) 29
  30. 30. Firmware baseado em Kernel Sistemas operacionais de tempo real (RTOS) Tarefas: estados [Li & Yao, 2003] [Laplante, 1993] Pode ser diferente conforme o sistema e o número de processadores 30
  31. 31. Firmware baseado em Kernel Sistemas operacionais de tempo real (RTOS) Tarefas: exemplo void tarefa1(void) void tarefa2(void) { { for(;;){ for(;;){ printf(“Tarefa 1”); printf(“Tarefa 2”); } } } } 31
  32. 32. Firmware baseado em Kernel Sistemas operacionais de tempo real (RTOS) Políticas de escalonamento: round-robin Prioridade Alta Média Baixa T1 T2 T3 T1 T2 T3 T1 T2 ... t Escalonador: t 32
  33. 33. Firmware baseado em Kernel Sistemas operacionais de tempo real (RTOS) Políticas de escalonamento: round-robin com prioridade Prioridade Alta Média T5 T5 Baixa T1 T2 T3 T1 T2 T3 ... t Escalonador: t 33
  34. 34. Firmware baseado em Kernel Sistemas operacionais de tempo real (RTOS) Políticas de escalonamento: preemptivo Prioridade Alta T3 Encerramento Média T2 T2 (cont.) Preempção ... Baixa T1 T1 (cont.) t Escalonador: t 34
  35. 35. Firmware baseado em Kernel Sistemas operacionais de tempo real (RTOS) Políticas de escalonamento: round-robin e preemptivo Prioridade Alta T6 Preempção Conclusão de T6 Continuação de T3 Média Baixa T1 T2 T3 T3 T1 T2 ... t Escalonador: t 35
  36. 36. Firmware baseado em Kernel Sistemas operacionais de tempo real (RTOS) Políticas de escalonamento: exemplo (revisitado) void tarefa1(void) void tarefa2(void) { { for(;;){ for(;;){ printf(“Tarefa 1”); printf(“Tarefa 2”); } } } } Que padrões de saída espera-se ter quando... (a) escalonamento round-robin (b) escalonamento round-robin com prioridade (P2 > P1) 36
  37. 37. Firmware baseado em Kernel Sistemas operacionais de tempo real (RTOS) Semáforos Objetos que permitem lidar com o acesso a recursos compartilhados Estrutura de um semáforo: 37
  38. 38. Firmware baseado em Kernel Sistemas operacionais de tempo real (RTOS) Semáforos Semáforo binário: 38
  39. 39. Firmware baseado em Kernel Sistemas operacionais de tempo real (RTOS) Semáforos Semáforo com contador: 39
  40. 40. Firmware baseado em Kernel Sistemas operacionais de tempo real (RTOS) Semáforos Mutex: 40
  41. 41. Firmware baseado em Kernel Sistemas operacionais de tempo real (RTOS) Semáforos Semáforos: implementações com bloqueio [Laplante, 1993] _inline void Wait(unsigned char Status) { while(Status==TRUE); Status = TRUE; } _inline void Signal(unsigned char Status) { Status = FALSE; } 41
  42. 42. Firmware baseado em Kernel Sistemas operacionais de tempo real (RTOS) Semáforos Semáforos: implementações sem bloqueio [Stallings, 2001] 42
  43. 43. Firmware baseado em Kernel Sistemas operacionais de tempo real (RTOS) Semáforos Emprego de semáforos Sincronismo espera e sinaliza: Sincronismo espera e sinaliza de múltiplas tarefas: 43
  44. 44. Firmware baseado em Kernel Sistemas operacionais de tempo real (RTOS) Semáforos Emprego de semáforos Sincronismo com contagem de sinalização: Acesso a recurso compartilhado: 44
  45. 45. Firmware baseado em Kernel Sistemas operacionais de tempo real (RTOS) Semáforos Emprego de semáforos Múltiplo acesso a recurso compartilhado: 45
  46. 46. Firmware baseado em Kernel Sistemas operacionais de tempo real (RTOS) Semáforos Exemplo: recurso stdout compartilhado void tarefa1(void) void tarefa2(void) { { for(;;){ for(;;){ Sem semáforo printf(“Tarefa 1”); printf(“Tarefa 2”); binário } } } } void tarefa1(void) void tarefa2(void) { { for(;;){ for(;;){ wait(S); wait(S); Com semáforo printf(“Tarefa 1”); printf(“Tarefa 2”); binário signal(S); signal(S); } } } } 46
  47. 47. Firmware baseado em Kernel Sistemas operacionais de tempo real (RTOS) Message queues Permite a transferência de dados entre tarefas/processos Estrutura: 47
  48. 48. Firmware baseado em Kernel Sistemas operacionais de tempo real (RTOS) Message queues Estados: 48
  49. 49. Firmware baseado em Kernel Sistemas operacionais de tempo real (RTOS) Message queues Procedimento de uso: 49
  50. 50. Firmware baseado em Kernel Sistemas operacionais de tempo real (RTOS) Message queues Emprego de message queues: Comunicação em sentido único sem inter-travamento: Comunicação em sentido único com inter-travamento: Mailbox: message queue com comprimento 1 wait signal Inicialmente 0 50
  51. 51. Firmware baseado em Kernel Sistemas operacionais de tempo real (RTOS) Message queues Emprego de message queues: Comunicação em sentido duplo com inter-travamento: 51
  52. 52. Firmware baseado em Kernel Sistemas operacionais de tempo real (RTOS) Rate-monotonic schedulers: a prioridade de uma tarefa é determinada em função de sua freqüência Outros tópicos: Processos Objetos de sincronismo: eventos RTOS para microcontroladores AVR: FreeRTOS: http://www.freertos.org/ AvrX: http://www.barello.net/avrx/ 52
  53. 53. Referências [Li & Yao, 2003] LI, Q.; YAO, C. Real-Time Concepts for Embedded Systems. CMPBooks, 2003. [Laplante, 1993] Laplante, P.A. Real-Time Systems Design and Analysis – an engineer’s handbook, IEEE Computer Society Press, 1993; [Stallings, 2001] William Stalling, Operating Systems: Internals and Design Principles, Prentice Hall, 2001. 53

×