SlideShare uma empresa Scribd logo
1 de 32
Baixar para ler offline
ELT048 - SOE
Requisitos temporais
Rodrigo Almeida
Universidade Federal de Itajubá
Revisão
● Kernel cooperativo
● Troca de processos
● Métodos de escalonamento
Exemplo
● Exemplo de kernel cooperativo
● O código apresentado pode ser compilado em
qualquer compilador C
● O kernel é composto por três funções:
● KernelInit(): Inicializa as variáveis internas
● KernelAddProc(): Adiciona processos no pool
● KernelLoop(): Inicializa o gerenciador de
processos
– Esta função possui um loop infinito pois ela só
precisa terminar quando o equipamento/placa for
desligado.
//return code
#define SUCESSO 0
#define FALHA 1
#define REPETIR 2
#define POOLSIZE 10
//function pointer declaration
typedef char(*ptrFunc)(void);
//process struct
typedef struct {
ptrFunc function;
} process;
process* pool[POOLSIZE];
Exemplo
char kernelInit(void){
ini = 0;
fim = 0;
return SUCESSO;
}
char kernelAddProc(process* newProc){
//checking for free space
if ( ((fim+1)%POOLSIZE) != ini){
pool[fim] = newProc;
fim = (fim+1)%POOLSIZE;
return SUCESSO;
}
return FALHA;
}
Exemplo
void kernelLoop(void){
for(;;){
//Do we have any process to execute?
if (ini != fim){
//check if there is need to reschedule
if (pool[start]->Func() == REPETIR){
kernelAddProc(pool[ini]);
}
//prepare to get the next process;
ini = (ini+1)%POOLSIZE;
}
}
}
Exemplo
void tst1(void){
printf("Process 1n");
return REPETIR;
}
void tst2(void){
printf("Process 2n");
return SUCESSO;
}
void tst3(void){
printf("Process 3n");
return REPETIR;
}
● Os processos
Exemplo
void main(void){
//declaring the processes
process p1 = {tst1};
process p2 = {tst2};
process p3 = {tst3};
kernelInit();
//Test if the process was added successfully
if (kernelAddProc(p1) == SUCESSO){
printf("1st process addedn");}
if (kernelAddProc(p2) == SUCESSO){
printf("2nd process addedn");}
if (kernelAddProc(p3) == SUCESSO){
printf("3rd process addedn");}
kernelLoop();
}
Exemplo
Console Output:
---------------------------
1st process added
2nd process added
3rd process added
Ite. 0, Slot. 0: Process 1
Ite. 1, Slot. 1: Process 2
Ite. 2, Slot. 2: Process 3
Ite. 3, Slot. 3: Process 1
Ite. 4, Slot. 0: Process 3
Ite. 5, Slot. 1: Process 1
Ite. 6, Slot. 2: Process 3
Ite. 7, Slot. 3: Process 1
Ite. 8, Slot. 0: Process 3
...
---------------------------
Exemplo
Requisitos temporais
Na maioria dos sistemas embarcados é
necessário garantir que algumas funções
sejam executadas com uma certa frequência.
Alguns sistema podem até mesmo falhar caso
estes requisitos não sejam atingidos.
Requisitos temporais
● Tempo real
● Velocidade
● Instantâneadade
Real time
● Capacidade de um
sistema em garantir
a peridiocidade de
uma tarefa
● O importante é o
determinismo na
execução, não a
velocidade
business2community.com
Real time
● Capacidade de um
sistema em garantir
a peridiocidade de
uma tarefa
● Determinismo
Real time
● Hard real time ● Soft real time
Requisitos temporais
● Para implementar um sistema que trabalhe
com requisitos temporais:
1)Deve existir um relógio que trabalhe com uma
frequência precisa.
2)O kernel deve ser informado da frequência, ou
período, de execução de cada processo.
3)A soma dos tempos de cada processo deve
“caber” no tempo disponível do processador.
●
1a
condição:
● É necessário um timer que possa gerar uma
interrupção.
●
2a
condição:
● Adicionar as informações na estrutura do
processo
●
3a
condição:
● Testar, testar e testar.
● Em caso de falha:
– Chip mais rápido
– Otimização
Requisitos temporais
● Agendamento dos processos:
● A utilização de um timer finito para medição de
tempo pode causar overflow
● Exemplo: agendamento de 2 processos para
10 e 50 segundos (1 bit = 1ms)
Agendamento
● E se os dois processos forem agendados
para o mesmo tempo?
Agendamento
● Suponha que o primeiro processo fosse
executado:
● Do diagrama de tempo abaixo o processo P2
está atrasado 10(s) ou foi agendado para
acontecer daqui 55(s)?
Agendamento
● Solução:
● Utilizar um contador temporizado decrescente
para cada processo ao invés de um valor de
agendamento.
● Problema:
● Cada um dos contadores devem ser
decrementados na rotina de interrupção.
● Isso é um problema pra sua aplicação?
Agendamento
Kernel com requisitos temporais
● A primeira modificação é adicionar
● Um contador para cada processo
● Uma variável para armazenar o período de
execução
//process struct
typedef struct {
ptrFunc function;
int period;
int start;
} process;
Kernel com requisitos temporais
● Deve ser criada uma função de interrupção
para decrementar cada um dos contadores
dos processos
● Os detalhes intrínsecos do processo de
criação e manipulação de interrupções está
fora do escopo desta aula.
● Por facilidade será utilizado o Device
initialization
Kernel com requisitos temporais
Device initialization
Device initialization
Rotina de Interrupção
Rotina de Interrupção
//colocar no MCUinit.c na função isrVrti()
#include “kernel.h”
__interrupt void isrVrti(void){
KernelClock();
//limpar a flag de interrupção
CRGFLG = 0x80;
}
Rotina de Interrupção
//colocar no kernel.c
#define MIN_INT -30000
void KernelClock(void){
unsigned char i;
i = ini;
while(i!=fim){
if((pool[i].start)>(MIN_INT)){
pool[i].start--;
}
i = (i+1)%SLOT_SIZE;
}
}
//colocar no kernel.h
void KernelClock(void);
● A função de adição de processos deve
inicializar corretamente as variáveis
char AddProc(process* newProc){
//checking for free space
if ( ((fim+1)%POOLSIZE) != ini){
pool[fim] = newProc;
//increment start timer with period
pool[fim].start += newProc.period;
fim = (end+1)%POOLSIZE;
return SUCESSO;
}
return FALHA;
}
Kernel com requisitos temporais
● A função de execução do kernel apresenta
uma mudança maior.
● O processo de escalonamento muda de um
modelo FIFO (aula anterior) para um
escalonador baseado no menor tempo de
inicio.
Kernel com requisitos temporais
if (ini != fim){
//Procurando o processo com menor tempo de inicio
j = (ini+1) % POOLSIZE;
next = ini;
while(j!=fim){
if (pool[j].start < pool[next].start){
next = j;
}
j = (j+1)%POOLSIZE;
}
//trocando as posições no pool
tempProc = pool[next];
pool[next] = pool[ini];
pool[ini] = tempProc;
while(pool[ini].start>0){
//ótimo lugar para economia de energia
}
if ( (pool[ini]->function)() == REPETIR ){
AddProc(&(pool[ini]));
}
ini = (ini+1)%POOLSIZE;
}
Exercício
● Montar um relógio binário onde cada led
pisca numa frequência diferente
1
2
3
4
1 segundo
2 segundos
4 segundos
8 segundos //Ligar o 1o led
PORTB = PORTB | 0x01;
//Desligar o 1o led
PORTB = PORTB & ~0x01;
//Piscar o 1o led
PORTB = PORTB ^ 0x01;

Mais conteúdo relacionado

Mais procurados

Apresentação python fábio jr alves
Apresentação python   fábio jr alvesApresentação python   fábio jr alves
Apresentação python fábio jr alves
Grupython Ufla
 
Recursividade em linguagem C
Recursividade em linguagem CRecursividade em linguagem C
Recursividade em linguagem C
Leonardo Lima
 
Conceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de ProgramaçãoConceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de Programação
Sidney Roberto
 
Programando em python interfaces graficas com tk
Programando em python   interfaces graficas com tkProgramando em python   interfaces graficas com tk
Programando em python interfaces graficas com tk
samuelthiago
 

Mais procurados (20)

Apresentação python fábio jr alves
Apresentação python   fábio jr alvesApresentação python   fábio jr alves
Apresentação python fábio jr alves
 
Java: Introducao ao Swing
Java: Introducao ao SwingJava: Introducao ao Swing
Java: Introducao ao Swing
 
Recursividade em linguagem C
Recursividade em linguagem CRecursividade em linguagem C
Recursividade em linguagem C
 
C Programming - Refresher - Part III
C Programming - Refresher - Part IIIC Programming - Refresher - Part III
C Programming - Refresher - Part III
 
Instruction Combine in LLVM
Instruction Combine in LLVMInstruction Combine in LLVM
Instruction Combine in LLVM
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em Python
 
Conceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de ProgramaçãoConceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de Programação
 
Boas praticas em um Projeto de Banco de Dados
Boas praticas em um Projeto de Banco de DadosBoas praticas em um Projeto de Banco de Dados
Boas praticas em um Projeto de Banco de Dados
 
Construção de interfaces gráficas com Tkinter
Construção de interfaces gráficas com TkinterConstrução de interfaces gráficas com Tkinter
Construção de interfaces gráficas com Tkinter
 
Apostila de Fundamentos Java
Apostila de Fundamentos JavaApostila de Fundamentos Java
Apostila de Fundamentos Java
 
Embedded C - Day 2
Embedded C - Day 2Embedded C - Day 2
Embedded C - Day 2
 
Android Camera Architecture
Android Camera ArchitectureAndroid Camera Architecture
Android Camera Architecture
 
Introdução a testes unitários com jUnit
Introdução a testes unitários com jUnitIntrodução a testes unitários com jUnit
Introdução a testes unitários com jUnit
 
Flutter do zero a publicacao
Flutter do zero a publicacaoFlutter do zero a publicacao
Flutter do zero a publicacao
 
Python Orientação a Objeto
Python Orientação a ObjetoPython Orientação a Objeto
Python Orientação a Objeto
 
Embedded C
Embedded CEmbedded C
Embedded C
 
Sistemas de Processamento de Linguagem Natural na Prática
Sistemas de Processamento de Linguagem Natural na PráticaSistemas de Processamento de Linguagem Natural na Prática
Sistemas de Processamento de Linguagem Natural na Prática
 
Programando com Python
Programando com PythonProgramando com Python
Programando com Python
 
Estrutura de Dados - Registros
Estrutura de Dados - RegistrosEstrutura de Dados - Registros
Estrutura de Dados - Registros
 
Programando em python interfaces graficas com tk
Programando em python   interfaces graficas com tkProgramando em python   interfaces graficas com tk
Programando em python interfaces graficas com tk
 

Destaque (7)

49 1225 la deidad de jesucristo
49 1225 la deidad de jesucristo49 1225 la deidad de jesucristo
49 1225 la deidad de jesucristo
 
Bluecontrol cadastro temporario
Bluecontrol cadastro temporarioBluecontrol cadastro temporario
Bluecontrol cadastro temporario
 
Ciberdelitos
CiberdelitosCiberdelitos
Ciberdelitos
 
Comercio electronico
Comercio electronicoComercio electronico
Comercio electronico
 
58 0202 escápate allá, date prisa
58 0202 escápate allá, date prisa58 0202 escápate allá, date prisa
58 0202 escápate allá, date prisa
 
Treinamento Coleta Seletiva
Treinamento Coleta SeletivaTreinamento Coleta Seletiva
Treinamento Coleta Seletiva
 
Dengue1
Dengue1Dengue1
Dengue1
 

Semelhante a Kernel com requisitos temporais

Projeto de uma controladora de drivers
Projeto de uma controladora de driversProjeto de uma controladora de drivers
Projeto de uma controladora de drivers
Rodrigo Almeida
 

Semelhante a Kernel com requisitos temporais (20)

Projeto de uma controladora de drivers
Projeto de uma controladora de driversProjeto de uma controladora de drivers
Projeto de uma controladora de drivers
 
Definição de processos
Definição de processosDefinição de processos
Definição de processos
 
Webinar: Porque o RTOS não faz o que eu quero?
Webinar: Porque o RTOS não faz o que eu quero?Webinar: Porque o RTOS não faz o que eu quero?
Webinar: Porque o RTOS não faz o que eu quero?
 
Apresentacao sobre o KURT
Apresentacao sobre o KURTApresentacao sobre o KURT
Apresentacao sobre o KURT
 
Arquitetura 8 3
Arquitetura 8 3Arquitetura 8 3
Arquitetura 8 3
 
Arquitetura 8 3
Arquitetura 8 3Arquitetura 8 3
Arquitetura 8 3
 
Interrupts and the timer
Interrupts and the timerInterrupts and the timer
Interrupts and the timer
 
Funcionamento interno do node.js e boas práticas
Funcionamento interno do node.js e boas práticasFuncionamento interno do node.js e boas práticas
Funcionamento interno do node.js e boas práticas
 
Escalonador Earliest Deadline First - TDC2014SP
Escalonador Earliest Deadline First - TDC2014SPEscalonador Earliest Deadline First - TDC2014SP
Escalonador Earliest Deadline First - TDC2014SP
 
Aula 01b - Conceitos de Hardware e Software.pdf
Aula 01b - Conceitos de Hardware e Software.pdfAula 01b - Conceitos de Hardware e Software.pdf
Aula 01b - Conceitos de Hardware e Software.pdf
 
Mini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaMini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e Distribuída
 
Webinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcadosWebinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcados
 
Ponteiros de Função
Ponteiros de FunçãoPonteiros de Função
Ponteiros de Função
 
Hierarquia dos Processadores da Intel.pptx
Hierarquia dos Processadores da Intel.pptxHierarquia dos Processadores da Intel.pptx
Hierarquia dos Processadores da Intel.pptx
 
Fundamentos de Sistemas Operacionais de Tempo Real - Criando seu próprio esc...
Fundamentos de Sistemas  Operacionais de Tempo Real - Criando seu próprio esc...Fundamentos de Sistemas  Operacionais de Tempo Real - Criando seu próprio esc...
Fundamentos de Sistemas Operacionais de Tempo Real - Criando seu próprio esc...
 
Igor Oliveira - Puppet
Igor Oliveira - PuppetIgor Oliveira - Puppet
Igor Oliveira - Puppet
 
Sistemas Operativos - Processos e Threads
Sistemas Operativos - Processos e ThreadsSistemas Operativos - Processos e Threads
Sistemas Operativos - Processos e Threads
 
Planejamento e Controle da Produção
Planejamento e Controle da Produção Planejamento e Controle da Produção
Planejamento e Controle da Produção
 
Máquinas Multiníveis - Nível da Microarquitetura
Máquinas Multiníveis - Nível da MicroarquiteturaMáquinas Multiníveis - Nível da Microarquitetura
Máquinas Multiníveis - Nível da Microarquitetura
 
Coroutine e concorrência python
Coroutine e concorrência   python Coroutine e concorrência   python
Coroutine e concorrência python
 

Mais de Rodrigo Almeida

Segurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virusSegurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virus
Rodrigo Almeida
 
Acesso à memória e registros
Acesso à memória e registrosAcesso à memória e registros
Acesso à memória e registros
Rodrigo Almeida
 

Mais de Rodrigo Almeida (20)

Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015
 
Embedded systems development Defcon 19
Embedded systems development Defcon 19Embedded systems development Defcon 19
Embedded systems development Defcon 19
 
As diferentes engenharias
As diferentes engenhariasAs diferentes engenharias
As diferentes engenharias
 
Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Testing de software en instrumentos de pesar de funcionamiento no automatico ...Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Testing de software en instrumentos de pesar de funcionamiento no automatico ...
 
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
 
Cryptology - Antônio Lacerda
Cryptology - Antônio LacerdaCryptology - Antônio Lacerda
Cryptology - Antônio Lacerda
 
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
 
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
 
Conceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffersConceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffers
 
Introdução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcadosIntrodução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcados
 
Segurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virusSegurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virus
 
Comunicação serial
Comunicação serialComunicação serial
Comunicação serial
 
Utilizando um Display de LCD
Utilizando um Display de LCDUtilizando um Display de LCD
Utilizando um Display de LCD
 
Leitura de teclas com arranjo matricial
Leitura de teclas com arranjo matricialLeitura de teclas com arranjo matricial
Leitura de teclas com arranjo matricial
 
Display de 7 segmentos multiplexados
Display de 7 segmentos multiplexadosDisplay de 7 segmentos multiplexados
Display de 7 segmentos multiplexados
 
Acessando os periféricos de um microcontrolador
Acessando os periféricos de um microcontroladorAcessando os periféricos de um microcontrolador
Acessando os periféricos de um microcontrolador
 
Acesso à memória e registros
Acesso à memória e registrosAcesso à memória e registros
Acesso à memória e registros
 
Operações com Bits
Operações com BitsOperações com Bits
Operações com Bits
 
Revisão de linguagem C para Sistemas Embarcados
Revisão de linguagem C para Sistemas EmbarcadosRevisão de linguagem C para Sistemas Embarcados
Revisão de linguagem C para Sistemas Embarcados
 
Introdução à programação embarcada
Introdução à programação embarcadaIntrodução à programação embarcada
Introdução à programação embarcada
 

Kernel com requisitos temporais

  • 1. ELT048 - SOE Requisitos temporais Rodrigo Almeida Universidade Federal de Itajubá
  • 2. Revisão ● Kernel cooperativo ● Troca de processos ● Métodos de escalonamento
  • 3. Exemplo ● Exemplo de kernel cooperativo ● O código apresentado pode ser compilado em qualquer compilador C ● O kernel é composto por três funções: ● KernelInit(): Inicializa as variáveis internas ● KernelAddProc(): Adiciona processos no pool ● KernelLoop(): Inicializa o gerenciador de processos – Esta função possui um loop infinito pois ela só precisa terminar quando o equipamento/placa for desligado.
  • 4. //return code #define SUCESSO 0 #define FALHA 1 #define REPETIR 2 #define POOLSIZE 10 //function pointer declaration typedef char(*ptrFunc)(void); //process struct typedef struct { ptrFunc function; } process; process* pool[POOLSIZE]; Exemplo
  • 5. char kernelInit(void){ ini = 0; fim = 0; return SUCESSO; } char kernelAddProc(process* newProc){ //checking for free space if ( ((fim+1)%POOLSIZE) != ini){ pool[fim] = newProc; fim = (fim+1)%POOLSIZE; return SUCESSO; } return FALHA; } Exemplo
  • 6. void kernelLoop(void){ for(;;){ //Do we have any process to execute? if (ini != fim){ //check if there is need to reschedule if (pool[start]->Func() == REPETIR){ kernelAddProc(pool[ini]); } //prepare to get the next process; ini = (ini+1)%POOLSIZE; } } } Exemplo
  • 7. void tst1(void){ printf("Process 1n"); return REPETIR; } void tst2(void){ printf("Process 2n"); return SUCESSO; } void tst3(void){ printf("Process 3n"); return REPETIR; } ● Os processos Exemplo
  • 8. void main(void){ //declaring the processes process p1 = {tst1}; process p2 = {tst2}; process p3 = {tst3}; kernelInit(); //Test if the process was added successfully if (kernelAddProc(p1) == SUCESSO){ printf("1st process addedn");} if (kernelAddProc(p2) == SUCESSO){ printf("2nd process addedn");} if (kernelAddProc(p3) == SUCESSO){ printf("3rd process addedn");} kernelLoop(); } Exemplo
  • 9. Console Output: --------------------------- 1st process added 2nd process added 3rd process added Ite. 0, Slot. 0: Process 1 Ite. 1, Slot. 1: Process 2 Ite. 2, Slot. 2: Process 3 Ite. 3, Slot. 3: Process 1 Ite. 4, Slot. 0: Process 3 Ite. 5, Slot. 1: Process 1 Ite. 6, Slot. 2: Process 3 Ite. 7, Slot. 3: Process 1 Ite. 8, Slot. 0: Process 3 ... --------------------------- Exemplo
  • 10. Requisitos temporais Na maioria dos sistemas embarcados é necessário garantir que algumas funções sejam executadas com uma certa frequência. Alguns sistema podem até mesmo falhar caso estes requisitos não sejam atingidos.
  • 11. Requisitos temporais ● Tempo real ● Velocidade ● Instantâneadade
  • 12. Real time ● Capacidade de um sistema em garantir a peridiocidade de uma tarefa ● O importante é o determinismo na execução, não a velocidade business2community.com
  • 13. Real time ● Capacidade de um sistema em garantir a peridiocidade de uma tarefa ● Determinismo
  • 14. Real time ● Hard real time ● Soft real time
  • 15. Requisitos temporais ● Para implementar um sistema que trabalhe com requisitos temporais: 1)Deve existir um relógio que trabalhe com uma frequência precisa. 2)O kernel deve ser informado da frequência, ou período, de execução de cada processo. 3)A soma dos tempos de cada processo deve “caber” no tempo disponível do processador.
  • 16. ● 1a condição: ● É necessário um timer que possa gerar uma interrupção. ● 2a condição: ● Adicionar as informações na estrutura do processo ● 3a condição: ● Testar, testar e testar. ● Em caso de falha: – Chip mais rápido – Otimização Requisitos temporais
  • 17. ● Agendamento dos processos: ● A utilização de um timer finito para medição de tempo pode causar overflow ● Exemplo: agendamento de 2 processos para 10 e 50 segundos (1 bit = 1ms) Agendamento
  • 18. ● E se os dois processos forem agendados para o mesmo tempo? Agendamento
  • 19. ● Suponha que o primeiro processo fosse executado: ● Do diagrama de tempo abaixo o processo P2 está atrasado 10(s) ou foi agendado para acontecer daqui 55(s)? Agendamento
  • 20. ● Solução: ● Utilizar um contador temporizado decrescente para cada processo ao invés de um valor de agendamento. ● Problema: ● Cada um dos contadores devem ser decrementados na rotina de interrupção. ● Isso é um problema pra sua aplicação? Agendamento
  • 22. ● A primeira modificação é adicionar ● Um contador para cada processo ● Uma variável para armazenar o período de execução //process struct typedef struct { ptrFunc function; int period; int start; } process; Kernel com requisitos temporais
  • 23. ● Deve ser criada uma função de interrupção para decrementar cada um dos contadores dos processos ● Os detalhes intrínsecos do processo de criação e manipulação de interrupções está fora do escopo desta aula. ● Por facilidade será utilizado o Device initialization Kernel com requisitos temporais
  • 27. Rotina de Interrupção //colocar no MCUinit.c na função isrVrti() #include “kernel.h” __interrupt void isrVrti(void){ KernelClock(); //limpar a flag de interrupção CRGFLG = 0x80; }
  • 28. Rotina de Interrupção //colocar no kernel.c #define MIN_INT -30000 void KernelClock(void){ unsigned char i; i = ini; while(i!=fim){ if((pool[i].start)>(MIN_INT)){ pool[i].start--; } i = (i+1)%SLOT_SIZE; } } //colocar no kernel.h void KernelClock(void);
  • 29. ● A função de adição de processos deve inicializar corretamente as variáveis char AddProc(process* newProc){ //checking for free space if ( ((fim+1)%POOLSIZE) != ini){ pool[fim] = newProc; //increment start timer with period pool[fim].start += newProc.period; fim = (end+1)%POOLSIZE; return SUCESSO; } return FALHA; } Kernel com requisitos temporais
  • 30. ● A função de execução do kernel apresenta uma mudança maior. ● O processo de escalonamento muda de um modelo FIFO (aula anterior) para um escalonador baseado no menor tempo de inicio. Kernel com requisitos temporais
  • 31. if (ini != fim){ //Procurando o processo com menor tempo de inicio j = (ini+1) % POOLSIZE; next = ini; while(j!=fim){ if (pool[j].start < pool[next].start){ next = j; } j = (j+1)%POOLSIZE; } //trocando as posições no pool tempProc = pool[next]; pool[next] = pool[ini]; pool[ini] = tempProc; while(pool[ini].start>0){ //ótimo lugar para economia de energia } if ( (pool[ini]->function)() == REPETIR ){ AddProc(&(pool[ini])); } ini = (ini+1)%POOLSIZE; }
  • 32. Exercício ● Montar um relógio binário onde cada led pisca numa frequência diferente 1 2 3 4 1 segundo 2 segundos 4 segundos 8 segundos //Ligar o 1o led PORTB = PORTB | 0x01; //Desligar o 1o led PORTB = PORTB & ~0x01; //Piscar o 1o led PORTB = PORTB ^ 0x01;