Prévia do material em texto
ARA0301 PROGRAMAÇÃO DE MICROCONTROLADORS Aula 5: Linguagem C e Microcontroladores Prof. Dr. Roney L. de S. Santos RONEY.LIRASALE@professores.estacio.br MICROCONTROLADORES 2 • Devido a restrições de custo, tamanho e consumo, em sistemas embarcados são usados microcontroladores com pouca memória e baixa velocidade. • Deve ser notado que o custo de programação é um custo não recorrente, e que o custo de um microcontrolador maior se refletirá em um custo maior por cada unidade fabricada. – Além disso, deve ser notado ainda que um tempo maior de desenvolvimento aumenta o custo e diminui o tempo de mercado de um produto LINGUAGENS PARA MICROCONTROLADORES 3 • Entre as linguagens usadas ou projetadas para uso em sistemas embarcados, destacam-se: – Assembly – C – C++ – Java – Ada – Esterel LINGUAGENS PARA MICROCONTROLADORES 4 • Entre as linguagens usadas ou projetadas para uso em sistemas embarcados, destacam-se: – Assembly • Possibilita código mais eficiente em termos de velocidade e uso de memória, mas é inerentemente não portável e exige tempo muito grande de desenvolvimento. – C – C++ – Java – Ada – Esterel LINGUAGENS PARA MICROCONTROLADORES 5 • Entre as linguagens usadas ou projetadas para uso em sistemas embarcados, destacam-se: – Assembly – C • Permite tempo menor de desenvolvimento, mas exige uma disciplina do programador, similar a exigida em Assembly. – C++ – Java – Ada – Esterel LINGUAGENS PARA MICROCONTROLADORES 6 • Entre as linguagens usadas ou projetadas para uso em sistemas embarcados, destacam-se: – Assembly – C – C++ • Permite o uso de técnicas de programação orientada a objetos, mas apresenta problemas de tamanho de memória e de velocidade. • Para diminuir estes problemas existe uma versão mais enxuta, chamada Embedded C++ que impede o uso de mecanismos que aumentam demasiadamente o consumo de memória, ou tornam o comportamento temporal difícil de prever. – Java – Ada – Esterel LINGUAGENS PARA MICROCONTROLADORES 7 • Entre as linguagens usadas ou projetadas para uso em sistemas embarcados, destacam-se: – Assembly – C – C++ – Java • Embora tenha sido inicialmente planejada para sistemas embarcados, a demanda por memória é excessiva para a maior parte das aplicações. • O fato de o comportamento no tempo não ser previsível é devido ao garbage collector, que impede o seu uso em certas aplicações. – Ada – Esterel LINGUAGENS PARA MICROCONTROLADORES 8 • Originalmente, os sistemas embarcados eram desenvolvidos em Assembly. – Com o aumento de complexidade destes sistemas e a pressão por tempos menores de desenvolvimento, o uso exclusivo de Assembly tem diminuído, e hoje alcança apenas cerca de 8% dos projetos. • A linguagem C representa um excelente compromisso entre eficiência e facilidade de programação. – Devido a facilidade de se construir um compilador C, e o fato de que a linguagem implementa um nível de abstração bastante próximo ao hardware LINGUAGENS PARA MICROCONTROLADORES 9 • Atualmente, a absoluta maioria, cerca de 90% dos sistemas são desenvolvidos em C/C++ – As vezes com alguma parte pequena em Assembly. • O uso do Embedded C++ é crescente mas ainda representa uma parte menor do uso do C. LINGUAGEM C 10 • A linguagem C é uma das mais usadas atualmente e é base para várias outras linguagens como C++, Java e C#. • No entanto, é no desenvolvimento de sistemas embarcados que são, por natureza, mais próximos as intenções originais da linguagem que ele é mais usado – Representado uma alternativa ao uso de linguagens de montagem (Assembly) com resultados muito bons. LINGUAGEM C 11 • A diferença de tamanho de código gerado e de desempenho devido ao uso do C ou do assembly é dependente da arquitetura do microprocessador alvo. – Em algumas arquiteturas, com conjunto de instruções mais adequados, a diferença pode ser da ordem de 10%, em outras de até 300%. • O uso do C implica na necessidade de disciplina por parte do programador. Dois erros são muito comuns: – Usar uma área que já foi liberada, mas que o ponteiro ainda aponta para lá (dangling pointers) – Usar além da área alocada (memory overflow) LINGUAGEM C 12 • As características principais da linguagem C são: – Estrutura simples com poucas palavras chave. – Operações de entrada e saída são feitas por meio de biblioteca. • #include stdio.h – Flexibilidade de implementação. – Manuseio de memória por meio de apontadores. – Operadores incremento e decremento. – Portabilidade. LINGUAGEM C 13 • A estrutura básica de um programa em C para microcontroladores é a seguinte LINGUAGEM C 14 • A linguagem C é case sensitive – Diferencia as letras maiúsculas das minúsculas • Palavras reservadas LINGUAGEM C 15 • Representação Numérica LINGUAGEM C 16 • Toda variável usada em um programa deve ser declarada como de um determinado tipo, que define seu tamanho (em número de bits) e suas características. As variáveis podem ser: LINGUAGEM C 17 • Modificadores de Tipos de Dados Determinam o modo como as variáveis podem ser acessadas e, além disso, especificam se a variável pode ser alterada ou não. LINGUAGEM C 18 • Tipos de Dados Inteiros LINGUAGEM C 19 • Constantes – Servem para criar símbolos de valor constante que auxiliam na programação. No momento da compilação, o compilador se encarrega de atribuir os valores corretos aos símbolos criados. LINGUAGEM C 20 • Definições – Atribuições de outros nomes a símbolos já existentes no microcontrolador. Por exemplo, imagine que você tenha um LED ligado ao bit 0 da porta A do seu microcontrolador, além de um motor DC ligado ao bit 1 dessa mesma porta. Para facilitar a programação, pode-se fazer: LINGUAGEM C 21 • Definições – Atribuições de outros nomes a símbolos já existentes no microcontrolador. LINGUAGEM C 22 • Variáveis: devem ser declaradas da seguinte forma: • Exemplos: • Podem ser locais ou globais – Escopo da variável por todo o programa LINGUAGEM C 23 • Funções – Trechos de códigos que são repetidos várias vezes • Pode-se isolar estes trechos em funções. – Assim, podemos chamar uma função em diferentes pontos do programa principal, evitando reescrever aquele trecho de código repetidamente LINGUAGEM C 24 • Funções LINGUAGEM C 25 • Funções LINGUAGEM C 26 • Operadores LINGUAGEM C 27 • Operadores: Aritméticos LINGUAGEM C 28 • Operadores: Relacionais LINGUAGEM C 29 • Operadores: Relacionais LINGUAGEM C 30 • Operadores: Booleanos – usados para realizar testes booleanos entre elementos em um teste condicional LINGUAGEM C 31 • Operadores: Booleanos – usados para realizar testes booleanos entre elementos em um teste condicional LINGUAGEM C 32 • Operadores: Lógicos – usados para realizar testes lógicos bit a bit LINGUAGEM C 33 • Operadores: Lógicos – usados para realizar testes lógicos bit a bit se PORTA.B0 for igual a um E PORTA.B1 for igual a um, então cont é incrementado em uma unidade LINGUAGEM C 34 • Operadores: Lógicos – usados para realizar testes lógicos bit a bit se PORTA.B0 for igual a um E PORTA.B1 for igual a um, então cont é incrementado em uma unidade se PORTA.B0 for igual a um OU PORTA.B1 for igual a um, então o valor de cont é deslocado para a esquerda LINGUAGEM C 35 • Operadores: Lógicos – usados para realizar testes lógicos bit a bit se PORTA.B0 for igual a um E PORTA.B1 for igual a um, então cont é incrementado em uma unidade se PORTA.B0 for igual a um OU PORTA.B1 for igual a um, então o valor de cont é deslocado para a esquerda se PORTA.B0 for igual a um E PORTA.B1 não for igual a um, então o valor de cont é decrementado de uma unidade LINGUAGEM C 36 • Estruturas Condicionais: if LINGUAGEM C 37 • Estruturas Condicionais: if Em C, qualquer número diferente de zero é considerado verdadeiro, o que significa que a condição if só será falsa se o teste lógico aplicado resultar em zero (0). Qualquer outrovalor, mesmo que negativo, é considerado verdadeiro (1). LINGUAGEM C 38 • Estruturas Condicionais: if IMPORTANTE: = -> ATRIBUIÇÃO == -> COMPARAÇÃO (operador booleano) LINGUAGEM C 39 • Estruturas Condicionais: if-else LINGUAGEM C 40 • Estruturas Condicionais: if-else-if LINGUAGEM C 41 • Estruturas Condicionais: switch • O comando switch testa o valor de uma variável e executa os comandos correspondentes a casos (cases) pré- estabelecidos. • Cada case define uma série de comandos que serão executados até chegar na instrução break. • Quando nenhum caso correspondente for encontrado, a cláusula default será executada. Porém, o uso da cláusula default é opcional. LINGUAGEM C 42 • Estruturas Condicionais: switch LINGUAGEM C 43 • Estruturas de Repetição: for • Exemplo: LINGUAGEM C 44 • Estruturas de Repetição: for e o comando break O comando break é utilizado para encerrar o laço for antes de se completar todas as iterações. Quando o laço é quebrado, o programa pula para a próxima instrução após o laço LINGUAGEM C 45 • Estruturas de Repetição: while LINGUAGEM C 46 • Estruturas de Repetição: while LINGUAGEM C 47 • Estruturas de Repetição: do-while LINGUAGEM C 48 • Estruturas de Repetição: do-while • Diferença para o while? – while: comandos executados depois do teste – pré-teste – do-while: comandos executados antes do teste – pós-teste ARA0301 PROGRAMAÇÃO DE MICROCONTROLADORES 49 • Dúvidas? • Fiquem à vontade para entrar em contato no RONEY.LIRASALE@professores.estacio.br Slide 1 Slide 2 Slide 3 Slide 4 Slide 5 Slide 6 Slide 7 Slide 8 Slide 9 Slide 10 Slide 11 Slide 12 Slide 13 Slide 14 Slide 15 Slide 16 Slide 17 Slide 18 Slide 19 Slide 20 Slide 21 Slide 22 Slide 23 Slide 24 Slide 25 Slide 26 Slide 27 Slide 28 Slide 29 Slide 30 Slide 31 Slide 32 Slide 33 Slide 34 Slide 35 Slide 36 Slide 37 Slide 38 Slide 39 Slide 40 Slide 41 Slide 42 Slide 43 Slide 44 Slide 45 Slide 46 Slide 47 Slide 48 Slide 49 Slide 50