Вы находитесь на странице: 1из 3

ANE0004

C OU NÃO C, EIS A QUESTÃO

Autor: José Domingos Adriano


1.2. Passado e Futuro da
linguagem C
Desde seu surgimento no início dos anos 70, a
1. Introdução linguagem C sofreu alterações, ampliações,
tornou-se um padrão estável e gerou
A escolha da linguagem a ser usada no
descendentes.
desenvolvimento de um projeto com
microcontroladores é um fator de extrema
C foi desenvolvido inicialmente para a
importância, pois impacta em diversos
implementação do sistema operacional Unix.
aspectos: tempo (e, portanto custo) de
Como o Unix se popularizou e foi portado para
desenvolvimento, custo de ferramentas de
várias plataformas diferentes, foi necessário
desenvolvimento, portabilidade de código,
implementar compiladores C para diferentes
facilidade de depuração, futuras alterações e
arquiteturas. Foi então que a características de
atualizações tecnológicas, dentre outros.
portabilidade do C se tornou mais evidente.
No universo dos computadores pessoais há
Em meados dos anos 80 a ANSI (American
diversas opções de linguagens, podendo
National Standard for Information Systems)
atender a necessidade específicas de cada
criou uma norma padronizando o C, criando
desenvolvedor ou projeto.
uma língua comum a ser reconhecida por todos
os compiladores C.
No universo dos microcontroladores existe
também a possibilidade de se programar em
Em virtude da evolução da computação, o C
diversas linguagens de programação de médio
gerou várias linhas de evolução. Para atender
e alto nível, tais como C/C++, Pascal, Basic e
aos conceitos da programação orientada a
Java. Em oposição a essas linguagens existe
objeto foi desenvolvido o C++. Seguindo essa
sempre a opção de se programar na linguagem
linha, surgiu a linguagem Java. Para aplicações
Assembly nativa de cada microcontrolador.
para Internet a linguagem PHP é descendente
direto do C. Para aplicações para celulares foi
É muito discutida entre os profissionais da área
criado o C#. Além disso, várias ferramentas
qual a melhor linguagem de programação para
usam C/C++ para desenvolver código com
microcontroladores. Essa discussão concentra-
interface gráfica amigável, como o Visual C++
se principalmente na questão das vantagens e
ou o Borland C++ Builder.
desvantagens de uma linguagem de médio ou
alto nível em relação ao Assembly nativo do
microcontrolador.
1.3. C é a melhor opção
Obviamente deve-se considerar, em primeiro
lugar, a linguagem mais adequada para cada Há quem defenda ferrenhamente que o
aplicação em especial. Além disso, é desenvolvedor profissional deva trabalhar em
importante considerar também o quanto o Assembly. Os principais argumentos a favor
desenvolver está familiarizado com uma desse modo de pensar são a eficiência (em
linguagem e o fator subjetivo de qual temos de ocupação de memória) do código
linguagem lhe agrada mais. Apesar de ter gerado por um programador experiente, o
sempre em mente essas premissas, vamos menor tempo de execução do programa e o
expor aqui porque, na maioria das vezes e para controle total, já que nada é feito sem que o
grande parte dos desenvolvedores, a linguagem programador saiba e queira. A eficiência de
C é a mais adequada. código é importante na medida em que a
memória disponível nos componentes em
questão é restrita e tem grande impacto no
custo do componente. Também se perde o
controle do código gerado, já que toda vez que

www.exsto.com.br 1
ANE0004

um compilador é usado o código Assembly conjunto de instruções, com pouco tempo para
produzido sai do controle do desenvolvedor. o estudo detalhado de cada caso.
No passado, compiladores pouco confiáveis
apresentavam erros de implementação difíceis A solução então é utilizar uma linguagem de
de serem depurados. E ainda, se o conjunto de mais alto nível, que por princípio são
instruções não possuir certas características o independentes do hardware. O desenvolvedor
uso de compiladores gera um código concentra seu trabalho na criação de
significativamente maior e mais lento que um algoritmos e funcionalidades no projeto e
de mesmas funções em Assembly. deixa o trabalho de implementação para o
compilador. Surge então outro problema: qual
Por outro lado, é mais difícil de se desenvolver linguagem usar?
algoritmos complexos em Assembly, tornando
o trabalho de desenvolvimento mais lento e Para muitas pessoas a resposta é: o C!
mais caro. Realizar operações matemáticas Vejamos por que.
complexas (por exemplo, com variáveis do
tipo ponto flutuante) torna-se bastante confuso. Em primeiro lugar, o C é considerado uma
Como a linguagem nativa e os modelos de linguagem de médio nível, isto é, mais
memória de cada arquitetura de amigável para o ser humano, mas mantendo
microcontroladores diferem, é exigido um recursos de baixo nível. Em virtude disso, o C
tempo muito longo de estudo para se adaptar a permite gerar códigos mais eficientes quando
um novo conjunto de instruções. Instruções de comparado com outros compiladores. Há
mesma função podem ter mnemônicos também a vantagem da independência do
totalmente diferentes em diferentes conjuntos hardware que permite que um projeto seja
de instrução. A grande quantidade de linhas de portado de uma arquitetura para outra com
código e a pouca inteligibilidade tornam os poucas alterações no código. Essas
processos de depuração demorados e difíceis. características do C não são por acaso. A
Sendo o Assembly uma linguagem de linguagem foi desenvolvida no início dos anos
programação não estruturada os custos de 70 por Dennis Ritchie especificamente para o
desenvolvimento, depuração e manutenção desenvolvimento do sistema operacional
tendem a ser maiores. Por fim, o UNIX. Na época o dilema era quase o mesmo:
reaproveitamento de código e a portabilidade construir sistemas operacionais em assembly
de programas entre uma arquitetura e outra é era demorado e dispendioso e todo o trabalho
quase impossível, resultando na reescrita de tinha que ser refeito a cada novo processador
várias centenas ou milhares de linhas de criado. Os computadores da época tinham
programa. pouca memória e os modelos usados por
Ritchie não eram capazes de implementar
No passado era possível a um desenvolvedor operações de ponto flutuante diretamente.
especializar-se nessa ou naquela arquitetura, Ritchie desenvolveu uma linguagem simples,
tornando-se cada vez mais experiente no uso fácil de ser aprendida, mas com recursos que
de um set de instruções e realizando todos seus permitem o desenvolvimento de programas
projetos com alguns poucos complexos, como sistemas operacionais, que
microcontroladores compatíveis. Hoje, porém, permite portabilidade de código sem prejudicar
a variedade de microcontroladores é muito as funcionalidades de baixo nível, gerando um
grande. Praticamente todos os fabricantes de código bastante “enxuto”, isto é, eficiente no
circuitos integrados digitais têm suas famílias uso da memória.
de microcontroladores. A concorrência de
preço entre esses fabricantes e a diversidade de Por ser uma linguagem estruturada, o C exige
configurações dos microcontroladores exige que o programador siga boas práticas de
que as empresas optem por usar diferentes programação, evitando assim erros que, em
arquiteturas em diferentes projetos, ou mesmo Assembly, poderiam passar despercebidos.
substituir componentes em produtos já
existentes. É necessário que o desenvolvedor A portabilidade de código fica garantida, pois
de sistemas microcontrolados seja capaz de se existe uma norma que rege a linguagem C.
adaptar aos diferentes modelos de memória e Todo compilador que segue o padrão ANSI
deve conseguir reconhecer o mesmo código

www.exsto.com.br 2
ANE0004

gerado, independente da arquitetura alvo. Os gerado pelo compilador, buscando formas de


compiladores C profissionais são bastante otimizá-lo. Além disso, em situações críticas, é
confiáveis, geram código eficiente e livre de possível inserir linhas de código Assembly
bugs de implementação. dentro de um programa escrito em C.

Uma vantagem adicional do C são as


bibliotecas de funções que acompanham os 1.4. Conclusão
compiladores. Além das bibliotecas
Por essas e por outras razões os fabricantes de
convencionais do padrão ANSI a maioria dos
microcontroladores têm, já há alguns anos,
compiladores possui bibliotecas para uso das
desenvolvido arquiteturas de
funcionalizadas específicas de cada
microcontroladores otimizadas para o uso da
microcontrolador. Além do ganho de tempo
linguagem C. Alguns tipos de instruções e
em se usar as bibliotecas já prontas existe
modos de endereçamento são incluídos para
também um ganho de eficiência de código, já
tornar mais fácil a tradução do código C para o
que essas funções são normalmente
código de máquina. Isso acontece com o
implementadas em Assembly para otimização
PIC18 no set de instruções convencional e
de memória e tempo.
mais pronunciadamente no set estendido.
Como o C é utilizado também em
Como adaptações do processador ao C podem
computadores, trata-se de uma linguagem
citar as instruções voltadas para
muito difundida nas escolas e universidade.
endereçamento indireto e para leitura de
Também os profissionais que tiveram uma
constantes na memória de programa, além da
formação acadêmica voltada para o PASCAL
presença de diversos ponteiros para
terão facilidade em desenvolver em C.
endereçamento indireto de variáveis (facilitam
a implementação de vetores, matrizes e
Na tabela 2.1 se pode observar uma
variáveis do tipo ponteiro).
comparação entre as linguagens C e Assembly.
Esperamos ter demonstrado que a linguagem C
tem sido cada vez mais usada no
Característica Assembly C desenvolvimento com microcontroladores,
Eficiência de Ótima Muito Boa trazendo diversas vantagens que justificam seu
código uso em aplicações profissionais.
Velocidade de Ótima Muito Boa
execução Uma última observação deve ser feita quanto
Controle do Ótimo Muito Bom ao uso de linguagens orientadas a objeto.
sistema Apesar da orientação a objeto ser uma
Portabilidade Péssimo Ótimo tendência na programação e trazer inegáveis
Depuração Muito difícil Fácil benefícios ao desenvolvimento de software,
Programação Não- Estruturada hoje ainda ela não usada em larga escala. Uma
estruturada provável causa é o maior consumo de memória
Bibliotecas de Não Há Padronizadas e que a técnica acarreta. Contudo já existem
funções específicas compiladores que permitem trabalhar de forma
Tabela 2.1 – Comparação entre C e Assembly orientada a objetos (em C++, Java, etc). No
futuro otimizações na arquitetura dos
Contudo, não se deve entender que o estudo da microcontroladores serão feitas para tornar o
linguagem Assembly deve ser negligenciado. código orientado a objeto mais leve aos
Assim como o bom piloto de corrida entende microcontroladores.
tanto da mecânica de seu carro quanto os
engenheiros que o projetaram, o bom
desenvolvedor deve ter sólidos conhecimentos
da arquitetura, modelo de memória e conjunto
de instruções Assembly do microcontrolador
com o qual trabalha. É imprescindível
conhecer bem o assembly, até para poder
conseguir os melhores resultados em C.
Sempre é possível analisar o código Assembly
www.exsto.com.br 3