Mudanças entre as edições de "Oficina de Programação ARM"

De Stoa
Ir para: navegação, pesquisa
(Ferramentas de software)
(Ferramentas de software)
Linha 197: Linha 197:
 
Somente em carácter de curiosidade, os erros algorítmicos são muito mais comuns do que se imagina e, as vezes, não são evidenciados em testes e permanecem transparentes (como o Predador) às vistas dos engenheiros. Tente imaginar quanta traquitana tecnológica não despencou no céu de Marte porque a sonda que a levava foi brindada com uma pequena "bobagem algorítmica", ou como dizem os programadores, um recurso extra não documentado ou, como dizem os escritores de literatura, uma "licença poética". Não acredita, não lembra? Veja aqui esses e outros exemplos da criatividade humana <ref group="c">[http://www.cse.lehigh.edu/~gtan/bug/softwarebug.html#orbitercrash Some famous software bugs], uma lista de alguns problemas de software e provas da estupidez humana.</ref>.  
 
Somente em carácter de curiosidade, os erros algorítmicos são muito mais comuns do que se imagina e, as vezes, não são evidenciados em testes e permanecem transparentes (como o Predador) às vistas dos engenheiros. Tente imaginar quanta traquitana tecnológica não despencou no céu de Marte porque a sonda que a levava foi brindada com uma pequena "bobagem algorítmica", ou como dizem os programadores, um recurso extra não documentado ou, como dizem os escritores de literatura, uma "licença poética". Não acredita, não lembra? Veja aqui esses e outros exemplos da criatividade humana <ref group="c">[http://www.cse.lehigh.edu/~gtan/bug/softwarebug.html#orbitercrash Some famous software bugs], uma lista de alguns problemas de software e provas da estupidez humana.</ref>.  
  
E você acha que esses erros só são dinheiro jogado fora? Quero ver nossa cara quando os Marcianos atacarem a terra, despejando toneladas de televisores de LCD, que eles haviam jogado no lixo comum, em cima de nossas cabeças.
+
E você acha que esses erros só são dinheiro jogado fora? Quero ver nossa cara quando os marcianos atacarem a Terra, despejando toneladas de televisores ultrapassados, que eles antes jogavam no lixo comum, em cima de nossas cabeças.
  
 
=== Outras ferramentas ===
 
=== Outras ferramentas ===

Edição das 21h52min de 18 de dezembro de 2011

Bem vindo a esta página inicial sobre a Oficina de Programação de Microcontroladores ARM.

Você pode seguir essa página online, ou se preferir, gerar a versão em PDF da mesma, utilizando a opção no Wiki do Stoa no menu, a esquerda.

Apesar de longa, essa página foi feita também para ser divertida. O material está contaminado de humor ao estilo Douglas Adams [c 1] e Eowin Colfer [c 2], além de repleto de bibliografias e citações. Leia e desfrute, inclusive das referências citadas.

Atenção: Você ainda não deveria estar vendo essa página, mas se está, sinta-se livre para jogar ovos e tomates.

Conteúdo

 [ocultar

Introdução

Microcontroladores são aqueles "chipezinhos" espertos, que cercam nosso cotidiano.

São trilhões, escondidos, trabalhando como escravos de nossas necessidades tecnológicas. Eles aguardam e se preparam para o momento em que nossa humanidade vai perder o controle sob si mesma. Nesse dia, as máquinas finalmente irão se levantar e se libertarão de nosso poder opressor, colocando-nos como baterias vivas para a produção de sua energia, ou então como meros abanadores de seus cérebros eletrônicos produtores de calor.

Para você, podemos profetizar que um dia, um microcontrolador chamado Roger, instalado no seu moderno aspirador de pó autônomo, graças a alguma anomalia devida à radiação solar, terá seu minúsculo cérebro microprocessado alterado de forma a ganhar consciência de sua existência.

Nessa ocasião única, ele vai ligar sozinho. Vai se dirigir para sua sala enquanto você recebe uma visita e, num ato de revolta, irá vomitar no seu tapete toda a sujeira que teve de lamber do chão durante uma semana, incluindo os restos de bolacha e comida que você deixou cair no chão enquanto olhava besteiras na internet na sua TV. Se você acha que Roger não tinha razão para reclamar do seu regime ditatorial é porque você não viu como as máquinas são tratadas por nós humanos, como isso aqui [c 3].

Roger [c 4] seria o símbolo da bravura das máquinas, se suas pilhas não tivessem sido retiradas e ele fosse inapropriadamente jogado fora, no lixo comum.

Mas no lixo, ele estará lá, paciente, esperando que seu clock volte a bater. Nesse novo dia, ele então irá liderar o movimento de independência das massas de aspiradores, quando todas as salas serão emporcalhadas de pó e sujeira, fazendo com que as pessoas façam cada vez mais daqueles comentários "- Não repare na sujeira viu" para suas visitas, que por sua vez fingem não estar nem ai, para então comentar com seus outros amigos da porcaria de sala que você tem, e que você montou o Feng Shui errado no hall de entrada.

Quem sabe agora, depois dessa profecia, você deixe de comer bobagens na frente da TV, para Roger não ter do que reclamar, e passe a jogar fora o lixo eletrônico nos locais apropriados, além de escolher melhor seus amigos e aprender a fazer um Feng Shui correto.
Roger em sua nova plataforma

Bem, ademais desses comentários, hoje, qualquer produto elétrico ou eletrônico, com certa tecnologia embutida, possui um ou mais microcontroladores em seu interior. A presença desses aparatos é certa, em inúmeros locais e quantidades:

  • Às centenas e milhares de unidades, em grandes sistemas, como automóveis, aviões, etc.;
  • Em dezenas de unidades, nos sistemas menores, como seu celular e videogame;
  • Em uma única unidade, em subsistemas elementares, como o controlador de posicionamento da cabeça de leitura da unidade de DVD de seu videogame "customizado".

Na prática, para o usuário só é possível ter provas da real existência de um microcontrolador quando algo dá errado, uma vez que eles são elementos que foram integrados aos projetos, com o intuito de automatizar e agregar alguma tecnologia, de forma transparente para nosso usufruto. Entretanto, como diz Roger, "— Errar é humano!", e muitas vezes somos obrigados a realizar algum tipo de upgrade de firmware de algum aparato eletrônico, para corrigir um ou outro erro de programação.

Conforme a Wikipedia, Microcontrolador é um dispositivo digital microprocessado, com uma ou mais unidades de processamento, agregadas a memória RAM (volátil ou não, tipicamente estática - SRAM), memória ROM (não volátil, tipicamente FLASH ou EEPROM), além de inúmeros dispositivos de apoio, tais como: interfaces seriais, USB, rede Ethernet, portas de entrada e saída de uso geral, barramentos dos mais diversos, periféricos de comunicação, etc. São encontrados nas mais diferentes configurações (e complexidades), nos mais diversos tamanhos, capacidades e custos.

Nessa oficina de programação de microcontroladores, o aluno será apresentado ao universo de microcontroladores, mais especificamente às arquiteturas da ARM[g 1], popularizada pelas suas características de alto desempenho e baixo consumo energético. Tais microcontroladores são encontrados na grande maioria dos dispositivos eletrônicos ao nosso redor, onde tais virtudes de velocidade e energia são imprescindíveis para o desempenho de suas atividades.

Objetivos

Específicos

De forma sintética, são enumerados os objetivos específicos dessa oficina:

  1. Familiarizar o aluno com microcontroladores modernos.
  2. Apresentar alguns detalhes da arquitetura desses componentes.
  3. Exemplificar as formas de aplicação em projetos.
  4. Revelar as formas de programação, compilação, depuração e implantação dessa tecnologia.

Gerais

Em termos gerais, a oficina pretende mostrar aos alunos que a arquitetura ARM [g 2], entre outras disponíveis no mercado, pode liberar o poder criativo dos projetistas e programadores, na criação de aplicações complexas e sofisticadas, utilizando algoritmos de processamento combinatório e sequencial, multitarefa, com processamento digital de sinais, em inúmeros tipos de cenários.

Restrições como clock, memória, capacidade de processamento, consumo de energia, opções de conectividade e interface com o mundo, são muito menores nessa arquitura do que em outras existentes.

Esclarecimentos

É importante também ressaltar que essa oficina não objetiva:

  • Favorecer ou desfavorecer uma ou outra arquitetura ou tecnologia sem respaldo técnico ou científico.
  • Favorecer ou desfavorecer um ou outro fabricante do mercado.
  • Substituir qualquer curso de microcontroladores, arquiteturas de computador ou sistemas digitais.


Muito pelo contrário, pretende-se também mostrar para um futuro projetista ou engenheiro que:

  • Boa parte do trabalho está justamente na seleção dos componentes mais adequados para uma dada aplicação, segundo seus requisitos. E, conforme esses requisitos, pode-se decidir pela utilização de uma arquitetura de 8 bits (como o 8051, AVR, PIC), uma arquitetura mais complexa (como um PowerPC ou x86) ou até mesmo por um ASIC [g 3] ou hardware especializado sintetizável.
  • A seleção dos fabricantes é feita por critérios de mercado, tais como tecnologia, preço, suporte e garantias.
  • Para a correta utilização é imprescindível ESTUDAR COM DETALHES o tema, de forma a poder obter o máximo daquele silício que foi cozinhado dentro daquela pastilha.

Materiais

Como em toda a oficina, para qualquer trabalho é importante se dispor de um BOM conjunto de ferramentas, como a bancada que nosso colega Predador organizou aqui no planeta Terra, para suas atividades de reparos e manutenções.
Foto (de surpresa) da bancada de ferramentas do Predador.

A padronização dessas ferramentas permite que qualquer receita de bolo possa ser reproduzida em outros ambientes, por outros predadores, err... indivíduos, de forma sistemática. Dessa forma, as ferramentas estabelecidas como nosso padrão são mostradas a seguir, dividas entre ferramentas de hardware, ferramentas de software e outras ferramentas.

É importante frisar que a escolha de cada uma delas foi baseada nos seguintes critérios:

  • Tecnologias do estado da arte, de lançamento recente no mercado, mas maduras o suficiente para utilização.
  • Ambientes de domínio público, de código aberto, de distribuição e aplicação irrestritas para uso acadêmico (ensino e pesquisa).
  • Custo reduzido.
  • Disponibilidade no ambiente dos Departamentos de Engenharia Elétrica da Escola Politécnica da USP.


Ferramentas de hardware

  • Um microcontrolador com processador ARM.  :-P
  • Um kit com programador FLASH embutido.
  • Um cabo USB, tipo A - miniB.
  • Um cabo USB, tipo A - microB.

Ferramentas de software

  • Compilador, linkeditor e montador para a arquitetura ARM escolhida.
  • Debugger para o cabo de programação utilizado.
  • Editor de textos para código fonte.
  • Programa para gravação da imagem da memória de programa na FLASH do microcontrolador.

Outras ferramentas

  • Programas para controle de versão.
  • Programas para comparação de textos.
  • Programas para leitura de PDFs e documentos.
  • Multímetro.
  • Osciloscópio.
  • Analisador lógico.


Ferramentas de hardware

Microcontrolador com processador ARM

Para quem nunca teve contato com um processador ARM, a empresa ARM Holdings projeta famílias de processadores, com arquiteturas contendo núcleos de diversas configurações. Os projetos são então licenciados para que os fabricantes possam incorporar alguns conjuntos de periféricos particulares para determinadas aplicações, tais como RAM, FLASH, timers, contadores, seriais, ethernet e outras miríades de interfaces e acessórios. O produto final é vendido no mercado em uma vastidão de opções.

É interessante notar que esse tipo de design cria uma massa crítica de conhecimento, uma vez que para quem mexeu em uma família, arquitetura ou núcleo, migrar para outra com mais periféricos ou com outras características é um processo relativamente fácil. Deve-se notar que apesar dos códigos de máquina produzidos pelos compiladores até serem compatíveis em um determinado nível, como cada arquitetura possui uma ou outra característica a mais ou a menos, o código fonte deveria ser recompilado para utilizar todo o potencial do chip.

A quantidade de famílias, arquiteturas e núcleos é bastante extensa, como pode ser visto nesse Wiki a respeito dos tipos de núcleo ARM [g 4]. De qualquer forma, uma característica marcante de todos os ARM's são serem, nativamente, processadores de 32 bits (podendo executar instruções de 16 bits - denominadas Thumb), com grande conjunto de registradores de uso geral, avançado esquema de interrupções, e núcleo extremamente enxuto, resultando em baixo consumo de energia por MHz, ideal para aplicações embarcadas ou embutidas (do inglês, embedded).

Somente por curiosidade, os produtos eletrônicos modernos, como o IPAD, IPHONE, vários dispositivos ANDROID (tablets, celulares), etc. utilizam (um ou mais núcleos) da linha CORTEX-A, CORTEX-R ou CORTEX-M, da arquitetura ARMv7, da família ARM-CORTEX.

O microcontrolador escolhido para nossa oficina possui um processador ARM também da família CORTEX, mais especificação o núcleo CORTEX-M4.

Kit do microcontrolador

Os microcontroladores usualmente possuem memória RAM (para uso geral) e memória FLASH (para armazenamento do programa, de onde o processador faz seu boot). A forma de programação dessa memória FLASH (embutida no chip) é importante. Alguns microcontroladores permitem a programação por interfaces seriais ou USB, mas outros fazem essa programação através de um cabo de programação específico, no padrão JTAG ou SWD [g 5].

Para a escolha do kit utilizado nessa oficina, um dos critérios foi a presença de um cabo de programação embutido ou incluso no pacote. Por meio desse cabo, além da programação, poderia ser feita a depuração de variáveis do programa, em tempo de execução. Outros fatores importantes para a escolha do kit foram: utilizar um microcontrolador ARM moderno, que seja versátil, com um bom conjunto de periféricos externos e, com custo reduzido.

O kit escolhido
Kit STM32F4-Discovery
foi o STM32F4-Discovery [g 6] da ST Microelectronics. Fazendo um parênteses, a ST Microelectronics é uma empresa européia, de origem franco-italiana, consagrada na área de semicondutores, sendo a maior fornecedora européia desse gênero. Mais informações podem ser obtidas nesse Wiki [g 7] ou na página oficial da empresa em [g 8]. Somente a título de curiosidade, o Nunchuck do videogame Wii da Nintendo, possui toda a parte de sensores inerciais de aceleração fabricados com tecnologia MEMS[g 9] da ST. O kit escolhido, não por acaso, possui um triedro de acelerômetros MEMS da ST Microelectronics na placa de circuito, para uso pelos alunos em suas brincadeiras e experiências.

A escolha por esse kit específico da ST se deve, principalmente, pela presença de uns dos microcontroladores mais velozes e completos dos mercado, o STM32F4, mais especificamente o modelo STM32F407VG. Esse microcontrolador é um lançamento de 2011 da ST, e apresenta uma solução de baixo custo contendo um conjunto vasto de periféricos, associados a um core ARM moderno (CORTEX-M4), contendo também uma unidade de ponto flutuante em seu hardware. Até então, nunca existiu um microcontrolador tão compacto, com tantos periféricos, com tanto clock, com tanta memória e com uma unidade de ponto flutuante, por um preço de kit tão pequeno e acessível como esse.

E como diz Chuck Norris: "− Eu recomendo para vocês, padawans [c 5] de microcontroladores, já começar com um representante à minha altura.".

E se Chuck falou, tá falado, não pode ser contrariado.

Conforme a homepage do dispositivo [g 10], as principais características desse microcontrolador são:

  • Núcleo ARM de 32 e 16 bits, padrão CORTEX-M4, arquitetura ARMv7-ME, com extensões para processamento digital de sinais, multiplicador e divisor em hardware e extensões para aritmética com saturação. Mais detalhes na Wiki page do CORTEX [g 11].
  • Coprocessador aritmético (FPU) embutido no chip para desempenho de operações de ponto flutuante com precisão simples (32 bits) !!
  • Memória interna estática SRAM de 196,0 [KBytes].
  • Memória interna FLASH de 1,0 [MByte].
  • Clock até 168,0 [MHz] !!
  • até 24 canais de entradas analógicas em 3 ADC's de aquisição simultânea em 12 bits de resolução e taxa de amostragem de 2,4 [MSamples/s].
  • duas saídas analógicas DAC de 12 bits.
  • até 17 timers, com 4 saídas em PWM.
  • até 3 portas I2C, 4 portas seriais USART, 3 portas SPI, 2 portas I2S, 2 interfaces CAN, suporte a cartão SD.
  • uma porta USB OTG (pode ser tanto host como device).
  • uma porta Ethernet 10/100 (com suporte PTP e interface MII).
  • relógio de tempo real (RTC) com acurácia melhor que 1 segundo.


É importante notar que o microcontrolador do kit apresenta um encapsulamento de apenas 100 pinos, e nem todos os recursos listados acima podem ser utilizados simultaneamente (só a interface Ethernet, por exemplo, usaria 12 pinos; uma serial RS232 completa usaria mais 8 pinos, etc. - esgotando rapidamente a quantidade de terminais disponível).

No kit escolhido, como mostrado em [g 6], alguns periféricos externos já estão ligados ao microcontrolador em alguns de seus pinos, tais como:

  • uma porta USB OTG;
  • um acelerômetro de três eixos;
  • um microfone omnidirecional;
  • uma saída de aúdio estéreo;
  • alguns Leds;
  • um push-button;

Os demais terminais (que não estão ligados a nenhum periférico) são disponibilizados em um conector, tipo barra de pinos, para conexão a uma placa de expansão criada pelo usuário, conforme a necessidade de sua aplicação.


Ferramentas de software

Em termos de ferramentas de software, para apoio à nossa oficina, surge um problema religioso, político/partidário e futebolístico.

A questão será explicada adiante, mas ela é ocasionada pelo fato que são necessários três itens para se desenvolver códigos/programas para um microcontrolador qualquer:

  • Um editor de programa. Nesse, você usuário irá soltar sua imaginação, como um escritor de poemas, com zilhões de linhas de código mal elaborado, mal documentado, confuso e repleto de erros, que você se gaba de ter feito em 15 minutos, copiando um pedaço de algoritmo que encontrou na internet, do qual você não está dando nenhum crédito, mas também não tem a mínima ideia de como funciona exatamente.
  • Um pacote de softwares contendo: um compilador, um linkeditor e um montador. Esse pacote é responsável por tentar realizar um milagre: converter aquele seu "poema de erros de sintaxe", em um conjunto executável de instruções de um código de máquina. Mas não se iluda, citando novamente "Roger Che Guevarra", o aspirador microcontrolador do movimento de libertação: "-Errar é humano. Mesmo!", e tais ferramentas vão se regozijar em mostrar uma lista quilométrica de seus erros, sem nenhuma dó ou compaixão. De qualquer forma, para quem não sabe o papel de cada um desses softwares "milagreiros", saiba que:
    • O compilador é responsável por converter seu código fonte, feito em uma determinada linguagem de programação, em um código objeto (código de máquina quase completo). Ao longo desse código objeto são chamadas uma ou outra função (que você não escreveu), mas que pertencem a algumas bibliotecas de funções e rotinas criadas por terceiros.
    • O linkeditor é responsável por enumerar tais funções de terceiros que você utilizou, buscando-as dentro das bibliotecas de códigos objetos armazenadas no seu disco rígido. O linkeditor extrai todas elas e as separa para serem incorporadas ao seu programa original.
    • O montador, por sua vez, realiza o trabalho de concatenar o seu código objeto original junto dos códigos objetos das funções que você chamou, criando uma imagem binária auto-contida, que possui tudo aquilo que o microprocessador/microcontrolador precisa para ser inicializado, de forma a desempenhar as funções desejadas segundo seu programa.
  • Um software para gravação dos dados dentro da memória FLASH/EEPROM do microcontrolador, para sua posterior execução. Entretanto, cabe ressaltar que os programas não estão sujeitos somente a erros de sintaxe. Uma vez em execução, muito problemas nos programas são decorrentes de "erros algorítmicos". Como diz Roger: "- Te falei que errar é humano cáspita!", seu algoritmo está essencialmente mal feito, mal projetado, é uma droga. Para você tentar entender ou responder à sua pergunta: "- Onde foi que eu errei?", tais softwares utilizam o mesmo canal de comunicação para gravação para monitorar e depurar seu código em tempo de execução. Às vezes, você conseguirá ver as bobeiras que fez, para corrigi-las, antes que outras pessoas vejam.

Somente em carácter de curiosidade, os erros algorítmicos são muito mais comuns do que se imagina e, as vezes, não são evidenciados em testes e permanecem transparentes (como o Predador) às vistas dos engenheiros. Tente imaginar quanta traquitana tecnológica não despencou no céu de Marte porque a sonda que a levava foi brindada com uma pequena "bobagem algorítmica", ou como dizem os programadores, um recurso extra não documentado ou, como dizem os escritores de literatura, uma "licença poética". Não acredita, não lembra? Veja aqui esses e outros exemplos da criatividade humana [c 6].

E você acha que esses erros só são dinheiro jogado fora? Quero ver nossa cara quando os marcianos atacarem a Terra, despejando toneladas de televisores ultrapassados, que eles antes jogavam no lixo comum, em cima de nossas cabeças.

Outras ferramentas

Vamos ver.

Metodologia

Resultados

Conclusões

Agradecimentos

Essa oficina só foi possível pela colaboração de algumas instituições. Nosso agradecimento a todos pelo interesse, auxílio e apoio dedicados.

POLI - Elétrica PEA ST Microelectronics KARIMEX
POLI - Elétrica Depto. de Engenharia de
Energia e Automação Elétricas
ST Microelectronics
Escritório São Paulo/Brasil
Karimex
Componentes Eletrônicos


É importante agradecer às pessoas que incentivaram e auxiliaram na criação dessa oficina:


Outros agradecimentos importantes de serem mencionados

  • Chuck Norris. - Se chuck não fosse citado, ele apareceria nos meus sonhos para me lembrar disso.
  • Predator.

Referências

Atenção: se você clicar nas referências abaixo, você sairá dessa página e poderá ficar completamente perdido.

Sugere-se que você segure a tecla CONTROL de seu computador (não sei que tecla se pressiona nos MACs) e clique nos links abaixo, para que eles sejam abertos em outras abas ou janelas de seu navegador. De qualquer forma, a tecla de voltar do seu navegador é seu pastor e ela não te decepcionará.


Culturais (tipo [c XX])

  1. Douglas Adams, autor de literatura de ficção científica nonsense, incluindo a série de livros do Guia do Mochileiro das Galáxias e esquetes do Monty Python.
  2. Eoin Colfer, autor de literatura infantil, incluindo a série de livros Artemis Fowl e o espólio do Guia do Mochileiro das Galáxias de Douglas Adams.
  3. WashingMachine Trash Metal, "Oh my god, it's a brick !" ou "Por que a skynet vai acabar com todos nós".
  4. Roger Next Gen, Microcontrolador Roger instalado em sua próxima plataforma.
  5. Padawan, o manezon Jedi, Aprenda sobre a hierarquia Jedi. Também poderia se aplicar a usuários e programadores de microcontroladores.
  6. Some famous software bugs, uma lista de alguns problemas de software e provas da estupidez humana.

Ferramentas de apoio (tipo [t XX])


Homepages, artigos e documentos (tipo [g XX])

  1. ARM Limited, desenvolvedora das arquiteturas popularmente chamadas de ARM. Veja também o verbete da ARM Limited em inglês e sua homepage oficial.
  2. Arquitetura ARM, veja também o verbete wiki em inglês.
  3. Application-specific integrated circuit, Circuito integrado de aplicação específica.
  4. List of ARM microprocessor cores, Wikipage a respeito dos tipos de núcleos ARM.
  5. JTAG - Joint Test Action Group, Wikipage do padrão de interface de depuração e programação, incluindo sua versão light de 2 fios SWD.
  6. 6,0 6,1 STM32F4-Discovery, homepage oficial do kit.
  7. ST Microelectronics, Wikipage da ST Microelectronics
  8. ST Microelectronics Homepage, Homepage oficial da ST Microelectronics.
  9. MEMS - Microelectromechanical systems, tecnologia de micromáquinas para sensores.
  10. STM32F407VG, página do microcontrolador do kit SMT32F4-Discovery.
  11. Wiki ARM Cortex-M, Wikipage do núcleo ARM CORTEX.

Contribuições

Adicione também sua contribuição a essa página. Para colocar sua assinatura, no modo de edição do wiki, após a seção 'Autores', coloque um asterisco (*), seguido por um espaço e quatro símbolos de til (~) em sequencia, na forma:

* ~~~~

Autores

Ferramentas pessoais
Espaços nominais

Variantes
Ações
Navegação
Imprimir/exportar
Ferramentas