Programar para Microcontroladores
9 pág.

Programar para Microcontroladores


DisciplinaTecnologias Web4.045 materiais12.629 seguidores
Pré-visualização4 páginas
de tradução 
(compilação) é feito previamente e o código gerado pelo compilador pode ser carregado 
na memória e a execução pode ser feita diretamente por esse código. 
 
Note que no caso das linguagens interpretadas, o trabalho de tradução do código-
fonte, além de ter de ser feito em tempo de execução, o que torna a execução lenta, tal 
trabalho deve ser feito pelo próprio processador que irá executar o código gerado, o que 
significa dizer que o programa interpretador BASIC fica carregado consumindo 
recursos de memória e devido a limitação de tais recursos nos microcontroladores isso 
resulta uma enorme diferença, se comparado com as linguagens compiladas. 
 
Existe ainda a questão da otimização do código: nas linguagens interpretadas 
cada comando de alto nível é traduzido em uma respectiva seqüência de comandos de 
baixo nível pelo programa interpretador. Se um mesmo comando for utilizado diversas 
vezes no programa, serão geradas tantas seqüências de comandos de baixo nível quantas 
forem as aparições do comando de alto nível. 
 
Já por sua vez os compiladores, por serem programas altamente complexos são 
também programas volumosos e de modo algum poderiam ser carregados na parca 
memória dos microcontroladores. Os compiladores utilizam-se de uma variedade de 
artifícios para a otimização do código gerado, tanto tendo objetivando a minimização 
do espaço ocupado pelo código, quanto na velocidade de execução do mesmo. 
 
 7 
Outra questão interessante é que em aplicações críticas, nas quais cada 
microssegundo é muito relevante, como rotinas de tratamento de interrupção com 
elevado número de interrupções num curto espaço de tempo, rotinas de manipulação de 
dados como conversões entre bases numéricas, etc, podemos utilizar código Assembly 
dentro do programa em linguagem C, de forma a acelerar ou otimizar ainda mais a 
sua execução. A linguagem Assembly pode ser inserida no programa C em qualquer 
ponto, bastando para isso utilizar as diretivas #asm e #endasm. As variáveis C 
conservam seus nomes na utilização da linguagem Assembly. Que outra linguagem de 
alto nível permite isso? 
 
Além daquilo que já foi exposto, por ser calcado em filosofia de programação 
estruturada, a linguagem C permite construções mais simples e claras dos programas de 
aplicação, o que facilita a criação de programas de maior complexidade, quando 
comparado com outras linguagens as quais não são estruturadas como Assembly ou 
BASIC. 
 
 
Utilizando a Linguagem C para Programar Microcontroladores: 
 
Os compiladores são ferramentas poderosas para a produção de software, por 
traduzirem programas escritos em linguagem de alto nível para programas escritos em 
linguagem de máquina. 
 
Entretanto, a interação da linguagem de alto nível com as operações sobre o 
hardware (operações de entrada e saída), em alguns casos, não são previstas na 
linguagem. Nos programas executados em computadores, as operações de entrada e 
saída são executadas pelo sistema operacional, através de "systems calls". 
 
Nos equipamentos desprovidos de sistema operacional é necessário que o 
programador crie os programas básicos de entrada e saída, escritos usualmente em 
linguagem assembly para que apresentem um bom grau de otimização, minimizando o 
tempo de sua execução. Eles serão utilizados por outros programas, escritos em 
linguagem de alto nível ou mesmo em linguagem assembly, e são comumente 
agrupados em bibliotecas. 
 
Esses programas são escritos na forma de sub-rotinas, e convém altamente que 
sejam respeitados os padrões de passagem de parâmetros e de devolução de resultados 
definidos pelo compilador que se pretende utilizar, visando as suas chamadas dentro de 
programas escritos em linguagem de alto nível. 
 
Esse conjunto de sub-rotinas básicas deve ser anexado ao programa que as 
utilize na fase de ligação/alocação. Cada sub-rotina deve, portanto, ser declarada como 
pública para que sejam satisfeitas as chamadas geradas pelo programa em linguagem de 
alto nível, que a declarará como externa. De forma análoga, pode-se desenvolver rotinas 
em C e chamá-las em programas elaborados em linguagem assembly. 
 
Em C é de extrema importância os tipos de dados. Identifique os diferentes tipos 
de dados utilizados e a correspondência ao número de bits e intervalo de valores que 
podem tomar. 
 
 8 
No processo de compilação também é possível definir o modelo de memória a 
utilizar. Os tipos de modelos de memória são: SMALL, COMPACT e LARGE. A 
utilização do compilador de C, permite a declaração de rotinas de serviço à interrupção, 
o que faz que o programa salte para essa parte do código quando uma interrupção 
ocorre. 
 
 
Características Inerentes dos Compiladores \u201cC\u201d: 
 
O uso de uma linguagem de alto nível no desenvolvimento de programas para 
microprocessadores e microcontroladores requer alguns cuidados adicionais. Mesmo se 
utilizando linguagens padronizadas, como a Linguagem C, não existe um padrão de 
como o código deve ser gerado para cada processador. Compiladores de fabricantes 
diferentes que geram código para um mesmo processador não necessariamente adotam 
as mesmas convenções. Assim, cada compilador apresenta características próprias para 
a geração das instruções em linguagem de máquina, tais como passagem de parâmetros 
para subrotinas, devolução de resultados de funções, tratamento de interrupções, etc. 
Assim, compiladores de fabricantes diferentes, que geram código para um mesmo 
processador, não necessariamente adotam as mesmas convenções. 
 
Além disso, muitos recursos existentes em uma implementação convencional de 
C, utilizada em computadores, nem sempre são encontrados em implementações 
especificas para a geração de código para determinados microprocessadores e 
microcontroladores (por exemplo, 8051, 8080/8085, Z80, 8086/8088, 68000, etc). 
 
Com o advento do microcomputador pessoal (por exemplo, o PC, da IBM e 
sucessores), surgiram compiladores C específicos para essas máquinas, com bibliotecas 
de rotinas de manipulação dos seus periféricos típicos (teclado, vídeo, disco, etc), e 
gerando o programa executável compatível com elas, e que nem sempre permitem que o 
mesmo possa ser utilizado para a geração de programas para sistemas diferentes, 
baseados no mesmo processador (por exemplo, baseados no 8086/8088). Tais sistemas 
costumam apresentar áreas de memória especificas, diferente dos computadores 
pessoais, exigindo compiladores e outras ferramentas de geração de programa, com 
capacidade de alocação de programas para qualquer região de memória escolhida pelo 
programador. 
 
Os manuais específicos de cada compilador devem ser sempre consultados, 
observando-se as restrições existentes, os recursos de biblioteca disponíveis, os 
mecanismos de geração de código e demais convenções adotadas. 
 
 
Compiladores \u201cC\u201d e os Microcontroladores: 
 
Atualmente, a grande maioria dos compiladores \u201cC\u201d para microcontroladores 
não é gratuita. Em muitos casos os custos envolvidos cabem no orçamento das empresas 
que desejam desenvolver seus produtos utilizando um compilador comercial. 
 
Porém para muitos leitores, este \u201ccusto\u201d é às vezes inaceitável, pois não cabe em 
seus orçamentos. Apesar da maioria dos fabricantes oferecer seus compiladores em 
versões para testes, eles sempre o fazem com algumas restrições tais como: 
 
 9 
\u2022 Limite no tamanho máximo do código gerado; 
\u2022 Impossibilidade de gerar código para alguns tipos de microcontroladores; 
\u2022 Tempo de uso limitado há alguns meses, entre outras. 
 
Talvez devido a isto, possa-se explicar o uso por muitos da linguagem 
\u201cAssembly\u201d. Esta, geralmente é fornecida de maneira gratuita pelo próprio fabricante do 
microcontrolador. Assim, muitos optam por esta linguagem não por escolha, mas por 
pura falta de alternativa. 
 
Não se deve descarta o aprendizado