programação concorrente e cmsis rtos

59
1 César Ofuchi – [email protected] Programação Concorrente e CMSIS RTOS César Yutaka Ofuchi [email protected] (adaptado do prof. André Schneider de Oliveira)

Upload: others

Post on 19-Feb-2022

16 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programação Concorrente e CMSIS RTOS

1César Ofuchi – [email protected]

Programação Concorrente e

CMSIS RTOS

César Yutaka Ofuchi

[email protected]

(adaptado do prof. André Schneider de Oliveira)

Page 2: Programação Concorrente e CMSIS RTOS

2César Ofuchi – [email protected]

Referências Úteis

• Trevor Martin-The Designer’s Guide to

the Cortex-M Processor Family-Newnes(2016)

– Capítulo 9: Cortex Microcontroller Software

Interface Standard-Real Time Operating

System

• Material Complementar– (site prof. Andre Schneider)

http://dainf.ct.utfpr.edu.br/~andre/doku.php?id=sistemas_embarcados

– (site prof. Carlos Maziero)

http://wiki.inf.ufpr.br/maziero/doku.php

- CMSIS RTOS

https://www.keil.com/pack/doc/CMSIS/RTOS/html/index.html

Page 3: Programação Concorrente e CMSIS RTOS

3César Ofuchi – [email protected]

Concorrência

• Um programa concorrente descreve diversas

atividades que ocorrem simultaneamente, de

modo diferente de programas comuns, que

descrevem apenas uma atividade (ex: função

main em linguagem C)

Page 4: Programação Concorrente e CMSIS RTOS

4César Ofuchi – [email protected]

Concorrência

• Um programa concorrente descreve diversas

atividades que ocorrem simultaneamente, de

modo diferente de programas comuns, que

descrevem apenas uma atividade (ex: função

main em linguagem C)

Page 5: Programação Concorrente e CMSIS RTOS

5César Ofuchi – [email protected]

Prog. Sequencial x Prog. Concorrente

• Analogia indivíduo x equipe

– Indivíduo:

• Responsável por todas as tarefas

– Equipe:

• Ocorre divisão de tarefas entre vários indivíduos

Page 6: Programação Concorrente e CMSIS RTOS

6César Ofuchi – [email protected]

Vantagens do Trabalho em Equipe

• Em uma equipe é menos complexo definir o

trabalho de cada indivíduo

• Não há necessidade de um indivíduo mudar de

atividade ao longo do tempo

• Há separação entre atividade e controle de

atividade (priorização)

Page 7: Programação Concorrente e CMSIS RTOS

7César Ofuchi – [email protected]

Implementação de Concorrência

Tarefa

1

Tarefa

2

Tarefa

3

Laço

Interrupção 1

Interrupção 2

Interrupção 3

Tarefa

1

Tarefa

2

Tarefa

3

Int

Int

Sequencial Laço + Interrupções RTOS (Multi-thread)

- Periféricos

- Eventos externos

- Comunicação

Page 8: Programação Concorrente e CMSIS RTOS

8César Ofuchi – [email protected]

Desafios

• Multi-core

– Sincronização de tarefas: 1 processo dividido em 2 ou

mais threads (ociosidade, paralelismo)

• Mono-core

– Preempção de tarefas: capacidade de interromper o

processo e trocar por outro (troca de contexto, pilha,

prioridade)

• Compartilhamento de recursos

– Processador : chaveamento de contexto

– Regiões de memória :variáveis compartilhadas - conflito

– Periféricos: múltiplos acessos, acessos simultâneos,

conflitos de interrupção

Page 9: Programação Concorrente e CMSIS RTOS

9César Ofuchi – [email protected]

Multi-threading com RTOS

• Múltiplas “linhas” de execução

P1 P2 ... Pn

Real Time OS

Hardware

Processador

Memória

Periféricos

Múltiplos processos

Memória compartilhada

Periféricos compartilhados

Controle de execução de

tarefas

Gerenciamento de Memória

Page 10: Programação Concorrente e CMSIS RTOS

10César Ofuchi – [email protected]

Multi-threading com RTOS

• RTOS cria processadores virtuais idênticos– Registradores e pilha individuais

• Sistemas multi-core– Muito mais processadores virtuais do que núcleos

• A soma da capacidade de processamento dos

processadores virtuais é igual à capacidade de

processamento original

Page 11: Programação Concorrente e CMSIS RTOS

11César Ofuchi – [email protected]

Regiões de Memória

Flash

CODE

RAM

HEAP

STACK

DATA

CPU

Registradores

Programação sequencial

Page 12: Programação Concorrente e CMSIS RTOS

12César Ofuchi – [email protected]

Regiões de Memória

Programação concorrente com RTOS

FlashCODE

RAMHEAP

DATA

RAMRegs 1

STACK 1

RAMRegs n

STACK n

...

CPURegistradores

Page 13: Programação Concorrente e CMSIS RTOS

13César Ofuchi – [email protected]

Efeito ao Longo do Tempo

(granularidade grossa)

Uma Thread é iniciada até uma ociosidade (desperdício), nesse

ponto inicia outra thread

segundos

Como as tarefas parecem estar sendo executadas:

Page 14: Programação Concorrente e CMSIS RTOS

14César Ofuchi – [email protected]

Efeito ao Longo do Tempo

(granularidade fina)

Rodízio aproveitando todos os ciclos de clock, sem ociosidade

milisegundos

Porém, apenas uma tarefa é executada por vez...

Page 15: Programação Concorrente e CMSIS RTOS

15César Ofuchi – [email protected]

Efeito ao Longo do Tempo

(granularidade)

Thread A

A1 A2 X X A3

Thread B

B1 X X B2 X

Thread C

C1 C2 C3 C4 X

Granularidade grossa

A1 A2 X B1 X C1 C2 C3 C4 X A3 B2

Granularidade fina

A1 B1 C1 A2 B2 C2 A3 C3 C4

ORDEM: A->B->C

Page 16: Programação Concorrente e CMSIS RTOS

16César Ofuchi – [email protected]

Acesso a Recursos Compartilhados

• Acessos múltiplos a recursos compartilhados, sem modificações de estado, podem ocorrer em paralelo sem conflitos (leitura x atualização)

• Problemas surgem quando acessos aos recursos compartilhados modificam o seu estado– Acesso concorrente a memória

compartilhada

– Acesso concorrente a periférico compartilhado

Page 17: Programação Concorrente e CMSIS RTOS

17César Ofuchi – [email protected]

Conceito de Seção Crítica

• Thread pode ser dividida em seção crítica e não-crítica

• A seção crítica está relacionada com a área de código que acessa o recurso compartilhado

Page 18: Programação Concorrente e CMSIS RTOS

18César Ofuchi – [email protected]

Conceito de Seção Crítica

• Solução: apenas uma thread pode estar acessando a sua seção crítica

• Um único processo pode estar nesta seção em determinado instante de tempo

• Certificar-se de que no máximo um processo pode entrar na sua seção crítica (exclusão mútua)

Page 19: Programação Concorrente e CMSIS RTOS

19César Ofuchi – [email protected]

Maiores Preocupações da Programação Concorrente

• Exclusão mútua– Apenas um processo na seção crítica em determinado

instante de tempo (concorrentemente)

• Ausência de impasse (deadlock)– Se dois ou mais tentarem entrar, ao menos um terá sucesso

(disputa pelo acesso à seção crítica)

Page 20: Programação Concorrente e CMSIS RTOS

20César Ofuchi – [email protected]

Maiores Preocupações da Programação Concorrente

• Ausência de atrasos desnecessários– Se não houver outros processos na seção crítica, um processo

tentando entrar não deve sofrer atrasos

• Garantia de entrada– todas as thread devem ter a oportunidade de acessar a sua

seção crítica

Page 21: Programação Concorrente e CMSIS RTOS

21César Ofuchi – [email protected]

Real Time Operating System (RTOS)

• Noção de Tempo– Qualitativa (quanto o tempo é

representado por palavras como

antes, depois, alguma hora, etc.)

• Exemplo: Abrir a porta depois de

apertar o botão.

– Quantitativo (noção numérica,

tempo é medido utilizando um

relógio real)

• Exemplo: Sistema air bag deve

funcionar em 1-2 milissegundos.

Sistema Real Time ... Existe tempo não real?

Sistema tem restrições de tempo para funcionar corretamente!

Page 22: Programação Concorrente e CMSIS RTOS

22César Ofuchi – [email protected]

Tipos de Tempo Real

• Divisão entre 2/3 categorias

Hard Real Time

- Sistema deve cumprir deadline senão resulta em falha.

- Consequências catrastróficasquando falha.

Exemplo:

Airbag

Soft Real Time

- Deadlines são toleráveis mas indesejáveis.

- Atrelado a Qualidade de Serviço (QoS).

Exemplo:

Streaming de vídeo

Botão do teclado

Firm Real Time

- Sistema não cumprir deadline não produz falha.

- Resultado é obsoleto e deve ser descartado.

Exemplo:

Robo que faz a manufatura de uma peça (cuja falha é detectada no setor de qualidade)

Page 23: Programação Concorrente e CMSIS RTOS

23César Ofuchi – [email protected]

CMSIS

Page 24: Programação Concorrente e CMSIS RTOS

24César Ofuchi – [email protected]

CMSIS RTOS KEIL RTX

• Segue o padrão CMSIS voltado

para a linha Cortex

Obs: (ARM comprou a KEIL em 2005)

Page 25: Programação Concorrente e CMSIS RTOS

25César Ofuchi – [email protected]

Outros RTOS

RTOS Empresa Características

FreeRTOS FreeRTOS OpenSouce gratuíto

μC/OS Micrium Sistema pago, com certificação para

indústria (automotivo, aviônica,

ferroviário, etc)

Linux RT Linux OpenSouce, porém ocupa muita

memória e não é próprio para μC de

entrada

TI-RTOS Texas

Instruments

MQX Freescale/N

XP

...

Page 26: Programação Concorrente e CMSIS RTOS

26César Ofuchi – [email protected]

Estado das Tarefas no CMSIS RTOS

Time^Signal^Message^Mail^Release

Yield

^Scheduling

Scheduling

Page 27: Programação Concorrente e CMSIS RTOS

27César Ofuchi – [email protected]

Estado das Tarefas

• Pronta (Ready): A tarefa está em memória,

pronta para executar (ou para continuar

sua execução), apenas aguardando a

disponibilidade do processador.

• Executando(Running): O processador está

dedicado à tarefa, executando suas

instruções e fazendo avançar seu estado

• Esperando(Waiting): A tarefa não pode

executar porque esta esperando dados

externos ainda não disponíveis, algum tipo

de sincropnização (fim de outra tarefa

para liberar recurso compartilhado) ou

eventos temporais (como delay).

• Inativa (Inactive): O processamento da

tarefa foi encerrado

Page 28: Programação Concorrente e CMSIS RTOS

28César Ofuchi – [email protected]

Transições

• Pronta -> Executando: Tarefa escolhida

pelo escalonador.

• Executando->Pronta: Acaba a fatia de

tempo destinada à tarefa; como nesse

momento a tarefa não precisa de outros

recursos além do processador, ela volta

a fila de tarefas prontas.

• Executando->Terminada: Tarefa encerra

execução ou é abortada por algum erro.

• Executando->Esperando: tarefa precisa

de um recurso não disponível, como

dados ou sincronização; ela abandona o

processador e fica esperando o recurso.

• Esperando->Pronta: O recurso solicitado

esta disponível, ela pode executar e

entra na fila ao estado pronta.

Page 29: Programação Concorrente e CMSIS RTOS

29César Ofuchi – [email protected]

Prioridades

osPriorityIdle = -3,

osPriorityLow = -2,

osPriorityBelowNormal = -1,

osPriorityNormal = 0,

osPriorityAboveNormal = +1,

osPriorityHigh = +2,

osPriorityRealtime = +3,

osPriorityError = 0x84

Page 30: Programação Concorrente e CMSIS RTOS

30César Ofuchi – [email protected]

Implementação RTX

• Adicionar o arquivo de configuração RTOS no projeto:

RTX_Conf_CM.c

• Adicionar a biblioteca Cortex-M3 no projeto:

RTX_LIB_CM.a

• Incluir o header no programaprincipal:

#include "cmsis_os.h”

Page 31: Programação Concorrente e CMSIS RTOS

31César Ofuchi – [email protected]

Kernel (Núcleo do SO)

Através do Kernel RTOS é possível

• obter informações do sistema e do Kernel

• obter a versão do CMSIS-RTOS API

• inicializar o Kernel e criar os objetos RTOS

• iniciar a execução do Kernel RTOS e do

gerenciamento das threads

• verificar o status da execução do Kernel RTOS

Page 32: Programação Concorrente e CMSIS RTOS

32César Ofuchi – [email protected]

Os elementos do Kernel seguem um ciclo de

vida:

1. Definição

2. Inicialização

3. Operação

4. Término

Ciclo de Vida dos Elementos do Kernel

Page 33: Programação Concorrente e CMSIS RTOS

33César Ofuchi – [email protected]

Informação e Controle do Kernel

• osKernelInitialize - Inicializa o kernel

• osKernelStart - Ativa o kernel

• osKernelRunning - Consulta se o kernel está ativo

• osKernelSysTick - Obtém o valor do temporizador do

kernel

• osDelay (função de espera genérica) - Espera por um tempo

específico

Page 34: Programação Concorrente e CMSIS RTOS

34César Ofuchi – [email protected]

Definição e Acesso das Threads

osThreadDef(job1, osPriorityAboveNormal, 1, 0)

•Macro que cria uma instância de uma estrutura do tipoosThreadDef_t, que contém:

– nome da tarefa

– prioridade

– número máximo de instâncias

– tamanho da pilha em bytes

•O nome desta instância é: os_thread_def_job1

osThread(job1)

•Macro que é expandida para: &os_thread_def_job1, ou seja, um

ponteiro para a estrutura criada com osThreadDef

Page 35: Programação Concorrente e CMSIS RTOS

35César Ofuchi – [email protected]

Gerenciamento de Tarefas

• osThreadCreate - Ativa a execução de uma tarefa

• osThreadTerminate - Desativa a execução de uma tarefa

• osThreadYield - Passa a execução à próxima tarefa que pronta

• osThreadGetId - Obtém o identificador que referencia a tarefa

• osThreadSetPriority - Altera a prioridade de uma tarefa

• osThreadGetPriority - Obtém a prioridade atual de uma tarefa

Page 36: Programação Concorrente e CMSIS RTOS

36César Ofuchi – [email protected]

Estrutura Básica

#include "cmsis_os.h"

// definições de tarefas, temporizadores, etc.

// declarações das funções das tarefas e de callback

void main(){

osKernelInitialize();

// inicializações de hardware

// ativação de tarefas, temporizadores, etc.

osKernelStart();

// laço de repetição ou encerramento da tarefa main()

} // main

Page 37: Programação Concorrente e CMSIS RTOS

37César Ofuchi – [email protected]

Exemplo de Uso (Tarefa)

#include "LPC13xx.h" // CMSIS-Core

#include "gpio.h" // Lib_EABaseBoard

#include "cmsis_os.h" // CMSIS-RTOS

void thread1(void const *argument){

while(1){

GPIOSetValue(0, 7, 0); // apaga LED2

osDelay(500);

GPIOSetValue(0, 7, 1); // acende LED2

osDelay(500);

}

}

osThreadDef(thread1, osPriorityNormal, 1, 0);

Page 38: Programação Concorrente e CMSIS RTOS

38César Ofuchi – [email protected]

Exemplo de Uso (Tarefa)

void main(){

osKernelInitialize();

SystemInit();

GPIOInit();

GPIOSetDir(0, 7, 1); // LED2 como saída

osThreadCreate(osThread(thread1), NULL);

osKernelStart();

osDelay(osWaitForever);

}

Page 39: Programação Concorrente e CMSIS RTOS

39César Ofuchi – [email protected]/19/2017

Exemplo Thread no RTOS LPC1343

Page 40: Programação Concorrente e CMSIS RTOS

40César Ofuchi – [email protected]

Prática

Fazer o download do novo workspace com CMSIS RTOS na página

• Habilitar exemplo RTOS_1 thread e testar

• Avaliar o arquivo cmsis_os.h

• Avaliar arquivo de configuração RTX_Conf_CM.c

Page 41: Programação Concorrente e CMSIS RTOS

41César Ofuchi – [email protected]

Projeto e Análise de sistemas concorrentes

• Projeto teórico– Diagrama de estados e transições

• Análise dos resultados– Diagrama de Gantt

10/19/2017

Page 42: Programação Concorrente e CMSIS RTOS

42César Ofuchi – [email protected]

Diagrama de Estados e Transições

• Realizar a representação gráfica das principais

ações e eventos da solução proposta

• Organizar o estudo do problema e esboço da

solução

• Importante ferramente para agilizar o

desenvolvimento

Page 43: Programação Concorrente e CMSIS RTOS

43César Ofuchi – [email protected]

43

Principais Entidades

Estado inicial

Estado final

Estado

Transição

Condição

evento [condição] / ação

Page 44: Programação Concorrente e CMSIS RTOS

44César Ofuchi – [email protected]

Exemplo: Semáforo

• Cruzamento de duas vias de mão única com

dois semáforos S1 e S2

• TVerde = 20 seg

• TAmarelo = 4 seg

• TVermelho = 28 seg

• TSobreposição = 2 seg

S1

S2

Page 45: Programação Concorrente e CMSIS RTOS

45César Ofuchi – [email protected]

Diagrama de Tempo

S1

S2

Vermelho Verde A Vermelho Verde A

Verde A Vermelho Verde A Vermelho

28 20 4 28 20 4

20 4 28 20 4 28

S1 – Semáforo 1S2 – Semáforo 2

t(s)

Page 46: Programação Concorrente e CMSIS RTOS

46César Ofuchi – [email protected]

Número de Estados

S1

S2

Vermelho Verde A

Verde A Vermelho

1 2 3 4 5 6 1

Page 47: Programação Concorrente e CMSIS RTOS

48César Ofuchi – [email protected]

Exemplo: Semáforo Inteligente

• Além dos dois semáforos S1 e S2, existem

também contadores de veículos (c1 e c2)

• Deixar verde > tempo para rua com > carros

• TContagem = 5 min

• c1 ≥ c2 → TVerde1 = 30 seg

→ TVerde2 = 20 seg

• c1 < c2 → TVerde1 = 20 seg

→ TVerde2 = 30 seg S1

S2

c1c2

Page 48: Programação Concorrente e CMSIS RTOS

50César Ofuchi – [email protected]

Diagrama de Estados e Transições

• Draw.io (ferramenta de desenho na

nuvem)

– https://www.draw.io/

• Yakindu Statechart Tools (desenho +

simulação)

– http://statecharts.org/

Page 49: Programação Concorrente e CMSIS RTOS

51César Ofuchi – [email protected]/19/2017

Diagrama de Gantt

• Objetiva descrever a descrição das etapas de um

projeto em relação ao tempo

• Também pode ser aplicado para ilustrar a

execução de um sistema multithread,

– cada etapa representa o estado de uma thread

Page 50: Programação Concorrente e CMSIS RTOS

52César Ofuchi – [email protected]

Diagrama de Gantt

Page 51: Programação Concorrente e CMSIS RTOS

53César Ofuchi – [email protected]

Tipos de Tarefas

Page 52: Programação Concorrente e CMSIS RTOS

54César Ofuchi – [email protected]/19/2017

Diagrama de Gantt

• Mermaid Live Editor

https://knsv.github.io/mermaid/live_editor/

• Documentação Diagrama de Gantt

https://mermaidjs.github.io/gantt.html

Page 53: Programação Concorrente e CMSIS RTOS

55César Ofuchi – [email protected]/19/2017

Prática gerar diagramas de Gantt

• Mermaid Live Editor

https://knsv.github.io/mermaid/live_editor/

• Documentação Diagrama de Gantt

https://mermaidjs.github.io/gantt.html

Page 54: Programação Concorrente e CMSIS RTOS

56César Ofuchi – [email protected]

Prática – Gerar Diagramas de Gantt

• Habilitar exemplo Gantt_diagram e testar

• Abrir a pasta do projeto no diretório “Examples” e copier conteúdo do arquivo “gantt.txt”

• Abrir o site e colar no text box do lado esquerdo

https://knsv.github.io/mermaid/live_editor/

Page 55: Programação Concorrente e CMSIS RTOS

57César Ofuchi – [email protected]/19/2017

Exemplo RTOS Gantt 1/2

Page 56: Programação Concorrente e CMSIS RTOS

58César Ofuchi – [email protected]/19/2017

Exemplo RTOS Gantt 2/2

Page 57: Programação Concorrente e CMSIS RTOS

59César Ofuchi – [email protected]

Roadmap Laboratórios -> Prova

DataLogger 1.0

- FatFs/SD Card

- Drivers

- Timers

DataLogger 2.0

- RTOS

-Processamento dos dados

- Interrupção

- Comunicação Serial com PC

DataLogger 3.0

-Comunicação Serial com PC

-Protocolo de comunicação (Máquina de

Estados)

-Escalonamento

Prova 2

Questões

30%

Apresentação 70%

dia semana atividade de entrega

19/10/2017 hoje Prévia laboratórios

26/10/2017 semana 1 Datalogger 1.0

02/11/2017 Recesso/feriado semana 2

09/11/2017 semana 3

16/11/2017 semana 4 Datalogger 2.0

23/11/2017 semana 5

30/11/2017 semana 6

07/12/2017 semana 7 Prova -> apresentação Datalogger 3.0 + questões

14/12/2017 semana 8 Recuperação/Fechamento

Page 58: Programação Concorrente e CMSIS RTOS

60César Ofuchi – [email protected]

Problemas com tempo de kit

• Diminução do tempo de aula teórica (maior

tempo de aula prática)

• Entregas serão em semanas distintas do prof.

André Schneider

• Agendar horário com professor para utilizar um kit

e mandar e-mail com dúvidas (avaliando)

• Simulação de partes do código

Page 59: Programação Concorrente e CMSIS RTOS

61César Ofuchi – [email protected]

Simulação

• Gravação de arquivo:– fprintf em arquivo (similar ao gantt)

• Comunicação serial com PC– com0com null modem emulator

– Free Virtual Serial Ports emulator

• Sensores (geração de valores aleatórios+delay)