Slides dos Laboratórios / Atividades para o HandsOn de mbedOS, realizado no dia 8 de Novembro de 2016 no NXP FTF Connects, em São Paulo.
São 5 atividades que gradativamente exploram recursos tanto do LPCXpresso4337+Shield como do mbedOS.
O HandsOn teve como base a placa LPCXpresso4337, e o desenvolvimento de sistemas de tempo real usando mbed IDE online com mbedOS.
Material de autoria conjunta de André Curvello e Felipe Neves.
Agradecimentos especiais ao time NXP e ao time Embarcados pelo apoio ao treinamento!
2. Lab 1 - Preparando o Ambiente
»Abra sua workspace em:
»https://developer.mbed.org/compiler/
»Ao abrir o workspace clique em Import;
»Na caixa de pesquisa busque por:
»ftf_mbed_lab1
»Importe o projeto, compile, grave e rode o código.
2
3. Lab 1 - Considerações
»Exploraremos algumas API para acesso ao hardware da placa;
»Observe o display, um menu será a apresentado;
»Navegue com as teclas cima e baixo utilizando o JoyPad;
»Selecione o LED desejado pressionando o botão central do JoyPad;
»Com o potenciômetro, selecione a intensidade de cada LED
»Observe as diversas cores formadas;
»Monitore os valores de cor para cada canal.
3
4. Lab 1 - Exercícios
»Adicione uma opção no menu que possua valores de cor pré-definidos.
»Utilize o botão central do JoyPad para entrar no menu e as teclas cima e
baixo para seleção.
»Quando encontrar a cor desejada a mesma só será inserida nos LEDs com o
pressionamento do botão central, saindo do menu.
»Adicione a opção de piscar o LED com a cor corrente, o tempo de pisca e o
número de repetições fica a cargo do usuário;
»**DICA: utilize a classe Timeout para anexar um callback ao término da execução do pisca.
»Adicione um fator de escala de modo a controlar a intensidade da cor
corrente do LED.
4
7. Lab 2 - Preparando o Ambiente
»Abra sua workspace em:
»https://developer.mbed.org/compiler/
»Ao abrir o workspace clique em Import
»Na caixa de pesquisa busque por:
»ftf_mbed_lab2
»Importe o projeto, compile, grave e rode o código.
7
8. Lab 2 – Considerações – O Prompt e o Controle
»Ferramente muito desejada durante o desenvolvimento Um prompt de
commandos!
»Alguns comandos disponíveis controlam alguns atuadores ou dão informações
sobre a placa.
»Não esqueça de conectar a placa ao TeraTerm Setup: 8-N-1 115200bps.
»Para verificar a lista de comandos do prompt, pressione Enter.
»Digite os comandos conforme as instruções do terminal.
»Observe o que ocorre na placa.
»Digite comandos incorretos e verifique que podem ser corrigidos usando
backspace.
8
9. Lab 2 - Exercícios
»A função shell_parser() contém um trecho localizado na linha 204
responsável por identificar o comando digitado.
»Sabendo disso, adicione um comando nessa lista para controlar um atuador
de sua preferência na placa!
»DICA: importe a API de PWM do lab anterior e crie um comando para gerar cores nos LEDS.
»Adicione um comando para ler os valores do acelerômetro da placa.
»Lembre – se de utilizar a API I2C() para se comunicar com ele:
-Slave address: 0x68 << 1
-Valor de configuração em 0x40: 0x28;
-Valor de sw reset em 0x7E: 0xB6 **DICA: aguarde um tempo após executar esse comando
-Registrador base dos dados: 0x12 **DICA: [0x12] ->X_msb, [0x13] -> X_lsb, [0x14]->Y_msb,…
**DICA os pinos SDA e SCL são respectivamente: P2_3, P2_4
9
12. Lab 3 - Preparando o Ambiente
Abra sua workspace em:
»https://developer.mbed.org/compiler/
Ao abrir o workspace clique em Import
Na caixa de pesquisa busque por:
»ftf_mbed_lab3
»Importe o projeto, compile, grave e rode o código.
12
13. Lab 3 – Considerações – Tarefas com Threads
»Conectar a placa ao Tera Term configurado em 8-N-1 115200bps
»Verificar a lista de comandos pressione Enter;
»Nesse lab, exploraremos o tipo de objeto mais primitivo de todo RTOS, as threads;
»Através do prompt de comandos é possível suspender ou executar uma determinada
thread.
»Para isso utilize o comando thread e acompanhe a execução no LCD;
»Threading do Mbed OS possui duas políticas: Preemptiva e Cooperativa (com round-
robin);
-Preemptivo: execute a thread app1, em seguida execute a thread app2, observer o LCD
em seguida suspenda app2. Observe novamente o LCD;
-Cooperativo: execute a thread app1 e em seguida a thread app3, observe no LCD, o que
mudou?
13
14. Lab 3 - Exercícios
»A função shell_thread_execute_command() localizada na linha 97 é responsável por
receber as opções do comando ”thread”.
»Analise e adicione uma opção que permita mudar a prioridade das threads existentes
sem ter que recompilar o código;
»Modifique o código de cada thread de modo que cada thread controle um LED da
placa, em seguida adicione na função shell_parser() um comando para controlar a taxa
de pisca de cada LED;
»Reescreva as threads de modo que todas tenham a mesma prioridade, e faça com que
cada thread consiga executar na seguinte ordem: app1,app2, app3, app1,app2,app3…
-DICA: verifique o método yield() dentro da classe Thread;
-Registre a execução de cada thread no prompt de comando.
14
17. Lab 4 - Preparando o Ambiente
»Abra sua workspace em:
»https://developer.mbed.org/compiler/
»Ao abrir o workspace clique em Import;
»Na caixa de pesquisa busque por:
»ftf_mbed_lab4.
»Importe o projeto, compile, grave e rode o código.
17
18. Lab 4 - Considerações
»Conectar a placa ao Tera Term configurado em 8-N-1 115200bps Inicialmente… SEM terminal;
»Os semáforos são utilizados para sincronizar a execução de duas threads de baixa prioridade com
eventos ocorridos em uma thread de alta prioridade;
»O acelerômetro funciona como uma thread periódica (não pode sofrer atrasos), então sua prioridade é a
mais alta do Sistema.
»As threads de LCD e evento por sua vez precisam ser executadas uma vez a cada nova leitura tomada
pelo acelerômetro garantindo o processamento dos eventos em tempo real;
»Observe no código a utilização dos semáforos acc_sema e align_event_sema;
»Movimente a placa e observe o LCD, alinhe a placa em algum eixo cartesiano primitivo, observe os
LEDS;
-Analise: Cada thread executa uma vez por ciclo?
-Se não houvesse o semáforo aconteceria a mesma coisa?
18
19. Lab 4 - Exercícios
»O shell não foi utilizado nesse laboratório, porém ele possui o inconveniente de
rodar de forma assíncrona (a cada 50ms) exigindo que sua thread possua
prioridade alta e que execute muitas vezes sem necessidade (sem caractere
novo no buffer).
»Sabendo disso, modifique o código da shell_task para que ela somente
execute quando um novo caractere chegar pela serial.
-DICA: Veja o método attach na classe Serial.
-DICA: Utilize um semáforo para aguardar na task, e o mesmo para sinalizar na callback chamada pelo
método attach.
»Adicione o comando ”thread” do Lab 3 para suspender e resumir as tarefas,
utilize o semáforo para controlar o sinal de execução e suspensão.
19
22. Lab 5 - Preparando o Ambiente
»Abra sua workspace em:
»https://developer.mbed.org/compiler/
»Ao abrir o workspace clique em Import;
»Na caixa de pesquisa busque por:
»ftf_mbed_lab5
»Importe o projeto, compile, grave e rode o código.
22
23. Lab 5 - Considerações
»Não esqueça de conectar a placa ao Tera Term configurado em 8-N-1 115200bps;
»Pressione Enter para ver a lista de comandos!
»Lab muito parecido com o Lab 2 e combinado com o Lab 3, os comandos controlam as
threads, e a thread do prompt consegue enviar mensagens dizendo o que cada thread
deve fazer;
»Observe que o sistema de Mail Queue do mbed OS funciona por referência.
»O usuário é responsável por alocar a memória que será anexada a Mail para transmitir a
mensagem;
»Observe que com isso podemos criar comandos mais complexos (Ex. leds).
23
24. Lab 5 - Exercícios
»Utilizando a Mail Queue, adicione uma thread para comunicação com o
acelerômetro.
»Com isso crie um descritor de comando I2C e opere os registradores do
acelerômetro pelo prompt de comandos (não esqueça de adicionar um
comando função shell_parser()), dados:
-Slave address: 0x68 << 1
-Valor de configuração em 0x40: 0x28;
-Valor de sw reset em 0x7E: 0xB6 **DICA: aguarde um tempo após executar esse comando
-Registrador base dos dados: 0x12 **DICA: [0x12] ->X_msb, [0x13] -> X_lsb, [0x14]->Y_msb,…
-DICA os pinos SDA e SCL são respectivamente: P2_3, P2_4
24
27. Links Úteis - 1
-Placa de Desenvolvimento LPCXpresso4337:
https://www.embarcados.com.br/lpcxpresso4337/
-LPCXpresso4337 no mbed:
https://www.embarcados.com.br/lpcxpresso4337-no-mbed/
-Usando o display gráfico na LPCXpress4337 com mbed:
https://www.embarcados.com.br/display-grafico-na-lpcxpresso4337-
no-mbed/
-Usando Leds e Joystick no mbed:
https://www.embarcados.com.br/usando-os-leds-e-joystick-na-
lpcxpresso4337-no-mbed/
27
28. Links Úteis - 2
-Shield OM13082 para placas LPCXpresso:
https://www.embarcados.com.br/shield-para-as-placas-lpcxpresso/
-mbed OS: Primeiros passos:
https://www.embarcados.com.br/mbed-os/
-Como utilizar as Threads no mbed OS:
https://www.embarcados.com.br/threads-no-mbed-os/
28
29. Links Úteis - 3
-Semáforos no mbed OS: https://www.embarcados.com.br/semaforos-
no-mbed-os-sincronizacao/
-Semáforos para Compartilhar recursos no mbed OS:
https://www.embarcados.com.br/semaforos-mbed-os-recurso-
compartilhado/
-Entrada analógica e comunicação Serial com a LPCXpresso4337:
https://www.embarcados.com.br/entrada-analogica-e-comunicacao-
serial-na-lpcxpresso4337-no-mbed/
29