A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

SVC  GRECO Escalonador de Processos de Tempo Real RTX Tiny.

Apresentações semelhantes


Apresentação em tema: "SVC  GRECO Escalonador de Processos de Tempo Real RTX Tiny."— Transcrição da apresentação:

1 SVC  GRECO Escalonador de Processos de Tempo Real RTX Tiny

2 SVC  GRECO Necessidade Manipulação de processos Definição de ordem de execução Tratamento de eventos / interrupções Sincronização / comunicação Time-slicing

3 SVC  GRECO RTX Tiny Produzido pela Keil, Inc. Subconjunto do RTX comercial Características técnicas –Escalonamento round-robin sem prioridades –7 primitivas de sistema –Permite até 16 tarefas –Usa máximo de 64 bytes de RAM –Usa o Timer 0 –900 bytes de código

4 SVC  GRECO RTX Tiny Características técnicas (continuação) –Latência de interrupção < 20 ciclos –Tempo usado na mudança de contexto é de 100 a 700 ciclos, dependendo se a pilha está muito carregada. –Timer 0 programado para interromper a cada 10ms (padrão que pode ser alterado). –Time slicing de 5 pulsos do Timer 0 (padrão que pode ser alterado).

5 SVC  GRECO Primitivas Disponíveis char os_create_task (uchar task_id); 1) Inicializa e põe a tarefa task_id na fila de processos no estado ready. 2) Retorna 0 se OK, e -1 se task_id não existe ou não pode ser inicializada.

6 SVC  GRECO Primitivas Disponíveis char os_create_task (uchar task_id); char os_delete_task (uchar task_id); 1) Pára a tarefa task_id e remove da fila de processos. 2) Retorna 0 se OK, e -1 se task_id não existe ou não estava na fila de processos.

7 SVC  GRECO Primitivas Disponíveis char os_create_task (uchar task_id); char os_delete_task (uchar task_id); char os_wait (uchar tipo, uchar ticks, uint d); 1) Pára a tarefa atual e espera pelo evento definido em tipo. 2) O parâmetro d não é usado e é mantido apenas por compatibilidade com a versão completa do RTX Comercial.

8 SVC  GRECO Primitivas Disponíveis char os_create_task (uchar task_id); char os_delete_task (uchar task_id); char os_wait (uchar tipo, uchar ticks, uint d); 1) O parâmetro tipo pode ter os seguintes valores: K_SIG  Espere por um sinal K_TMO  Espere por timeout K_IVL  Espere por tempo 2) Estes valores podem ser combinados. Ex: (K_SIG | K_TMO), espera um sinal pelo tempo definido em ticks. 3) O parâmetro ticks define o número de pulsos do timer que devem ser esperados caso K_IVL ou K_TMO sejam usados.

9 SVC  GRECO Primitivas Disponíveis char os_create_task (uchar task_id); char os_delete_task (uchar task_id); char os_wait (uchar tipo, uchar ticks, uint d); Após a ocorrência do evento esperado, a função pode retornar um dos seguintes valores: NOT_OK  Parâmetro Tipo é inválido SIG_EVENT  Recepção de sinal TMO_EVENT  Acabou o tempo definido em ticks

10 SVC  GRECO Primitivas Disponíveis char os_create_task (uchar task_id); char os_delete_task (uchar task_id); char os_wait (uchar tipo, uchar ticks, uint d); char os_send_signal (uchar task_id); 1) Envia sinal à tarefa task_id. Se esta já estiver esperando por um sinal, passará para o estado ready. Senão o sinal é armazenado no flag correspondente. 2) Retorna 0 se OK, e -1 se task_id não existe. 3) Só pode ser usada a partir de rotinas comuns e não de rotinas de interrupção.

11 SVC  GRECO Primitivas Disponíveis char os_create_task (uchar task_id); char os_delete_task (uchar task_id); char os_wait (uchar tipo, uchar ticks, uint d); char os_send_signal (uchar task_id); char os_clear_signal (uchar task_id); 1) Apaga o flag de sinal da tarefa task_id. 2) Retorna 0 se OK, e -1 se task_id não existe.

12 SVC  GRECO Primitivas Disponíveis char os_create_task (uchar task_id); char os_delete_task (uchar task_id); char os_wait (uchar tipo, uchar ticks, uint d); char os_send_signal (uchar task_id); char os_clear_signal (uchar task_id); char isr_send_signal (uchar task_id); 1) Envia sinal à tarefa task_id. Se esta já estiver esperando por um sinal, passará para o estado ready. Senão o sinal é armazenado no flag correspondente. 2) Retorna 0 se OK, e -1 se task_id não existe. 3) Só pode ser usada a partir de uma rotina de interrupção.

13 SVC  GRECO Primitivas Disponíveis char os_create_task (uchar task_id); char os_delete_task (uchar task_id); char os_wait (uchar tipo, uchar ticks, uint d); char os_send_signal (uchar task_id); char os_clear_signal (uchar task_id); char isr_send_signal (uchar task_id); char os_running_task_id (void); 1) Retorna o identificador da tarefa em execução no momento. 2) Se for usada de uma rotina de interrupção, retorna o valor da tarefa que estava executando antes de haver a interrupção.

14 SVC  GRECO Exemplo 1: Contadores #include #include int counter0; //counter for task 0 int counter1; //counter for task 1 int counter2; //counter for task 2 //RTX-51 tiny começa pela tarefa 0 job0 () _task_ 0 { os_create_task (1); //start task 1 os_create_task (1); //start task 1 os_create_task (2); //start task 2 os_create_task (2); //start task 2 while (1) while (1) {counter0++;} } {counter0++;} } // Esta rotina não faz nada void main () {while (1);} //Esta tarefa inicia em os_create_task(1) job1 () _task_ 1 { while (1) {counter1++;} } //Esta tarefa inicia em os_create_task(2) job2 () _task_ 2 { while (1) {counter2++;} }

15 SVC  GRECO Exemplo 2: Comunicação #include #include int counter0; //counter for task 0 int counter1; //counter for task 1 int counter2; //counter for task 2 int counter3; //counter for task 3 //RTX-51 tiny começa pela tarefa 0 job0 () _task_ 0 { os_create_task (1); // start task 1 os_create_task (1); // start task 1 os_create_task (2); // start task 2 os_create_task (2); // start task 2 os_create_task (3); // start task 3 os_create_task (3); // start task 3 while (1) { counter0++; counter0++; os_wait (K_TMO, 5, 0); //Esp.timeout os_wait (K_TMO, 5, 0); //Esp.timeout }} job1() _task_ 1 { while (1) { counter1++; counter1++; os_wait (K_TMO, 10, 0); //Esp.timeout os_wait (K_TMO, 10, 0); //Esp.timeout } } } } job2() _task_ 2 { while (1) { counter2++; if (counter2 == 0) counter2++; if (counter2 == 0) os_send_signal (3); //Envie para 3 os_send_signal (3); //Envie para 3 } } } job3 () _task_ 3 { while (1) { os_wait (K_SIG, 0, 0); //Espere sinal os_wait (K_SIG, 0, 0); //Espere sinal counter3++; counter3++; }} //Esta rotina não faz nada void main () {while (1);} {while (1);}


Carregar ppt "SVC  GRECO Escalonador de Processos de Tempo Real RTX Tiny."

Apresentações semelhantes


Anúncios Google