Você está na página 1de 3

ANE0004

C OU NO C, EIS A QUESTO
Autor: Jos Domingos Adriano

1.2. Passado e Futuro da linguagem C


Desde seu surgimento no incio dos anos 70, a linguagem C sofreu alteraes, ampliaes, tornou-se um padro estvel e gerou descendentes. C foi desenvolvido inicialmente para a implementao do sistema operacional Unix. Como o Unix se popularizou e foi portado para vrias plataformas diferentes, foi necessrio implementar compiladores C para diferentes arquiteturas. Foi ento que a caractersticas de portabilidade do C se tornou mais evidente. Em meados dos anos 80 a ANSI (American National Standard for Information Systems) criou uma norma padronizando o C, criando uma lngua comum a ser reconhecida por todos os compiladores C. Em virtude da evoluo da computao, o C gerou vrias linhas de evoluo. Para atender aos conceitos da programao orientada a objeto foi desenvolvido o C++. Seguindo essa linha, surgiu a linguagem Java. Para aplicaes para Internet a linguagem PHP descendente direto do C. Para aplicaes para celulares foi criado o C#. Alm disso, vrias ferramentas usam C/C++ para desenvolver cdigo com interface grfica amigvel, como o Visual C++ ou o Borland C++ Builder.

1. Introduo
A escolha da linguagem a ser usada no desenvolvimento de um projeto com microcontroladores um fator de extrema importncia, pois impacta em diversos aspectos: tempo (e, portanto custo) de desenvolvimento, custo de ferramentas de desenvolvimento, portabilidade de cdigo, facilidade de depurao, futuras alteraes e atualizaes tecnolgicas, dentre outros. No universo dos computadores pessoais h diversas opes de linguagens, podendo atender a necessidade especficas de cada desenvolvedor ou projeto. No universo dos microcontroladores existe tambm a possibilidade de se programar em diversas linguagens de programao de mdio e alto nvel, tais como C/C++, Pascal, Basic e Java. Em oposio a essas linguagens existe sempre a opo de se programar na linguagem Assembly nativa de cada microcontrolador. muito discutida entre os profissionais da rea qual a melhor linguagem de programao para microcontroladores. Essa discusso concentrase principalmente na questo das vantagens e desvantagens de uma linguagem de mdio ou alto nvel em relao ao Assembly nativo do microcontrolador. Obviamente deve-se considerar, em primeiro lugar, a linguagem mais adequada para cada aplicao em especial. Alm disso, importante considerar tambm o quanto o desenvolver est familiarizado com uma linguagem e o fator subjetivo de qual linguagem lhe agrada mais. Apesar de ter sempre em mente essas premissas, vamos expor aqui porque, na maioria das vezes e para grande parte dos desenvolvedores, a linguagem C a mais adequada.

1.3. C a melhor opo


H quem defenda ferrenhamente que o desenvolvedor profissional deva trabalhar em Assembly. Os principais argumentos a favor desse modo de pensar so a eficincia (em temos de ocupao de memria) do cdigo gerado por um programador experiente, o menor tempo de execuo do programa e o controle total, j que nada feito sem que o programador saiba e queira. A eficincia de cdigo importante na medida em que a memria disponvel nos componentes em questo restrita e tem grande impacto no custo do componente. Tambm se perde o controle do cdigo gerado, j que toda vez que um compilador usado o cdigo Assembly
1

www.exsto.com.br

ANE0004
produzido sai do controle do desenvolvedor. No passado, compiladores pouco confiveis apresentavam erros de implementao difceis de serem depurados. E ainda, se o conjunto de instrues no possuir certas caractersticas o uso de compiladores gera um cdigo significativamente maior e mais lento que um de mesmas funes em Assembly. Por outro lado, mais difcil de se desenvolver algoritmos complexos em Assembly, tornando o trabalho de desenvolvimento mais lento e mais caro. Realizar operaes matemticas complexas (por exemplo, com variveis do tipo ponto flutuante) torna-se bastante confuso. Como a linguagem nativa e os modelos de memria de cada arquitetura de microcontroladores diferem, exigido um tempo muito longo de estudo para se adaptar a um novo conjunto de instrues. Instrues de mesma funo podem ter mnemnicos totalmente diferentes em diferentes conjuntos de instruo. A grande quantidade de linhas de cdigo e a pouca inteligibilidade tornam os processos de depurao demorados e difceis. Sendo o Assembly uma linguagem de programao no estruturada os custos de desenvolvimento, depurao e manuteno tendem a ser maiores. Por fim, o reaproveitamento de cdigo e a portabilidade de programas entre uma arquitetura e outra quase impossvel, resultando na reescrita de vrias centenas ou milhares de linhas de programa. No passado era possvel a um desenvolvedor especializar-se nessa ou naquela arquitetura, tornando-se cada vez mais experiente no uso de um set de instrues e realizando todos seus projetos com alguns poucos microcontroladores compatveis. Hoje, porm, a variedade de microcontroladores muito grande. Praticamente todos os fabricantes de circuitos integrados digitais tm suas famlias de microcontroladores. A concorrncia de preo entre esses fabricantes e a diversidade de configuraes dos microcontroladores exige que as empresas optem por usar diferentes arquiteturas em diferentes projetos, ou mesmo substituir componentes em produtos j existentes. necessrio que o desenvolvedor de sistemas microcontrolados seja capaz de se adaptar aos diferentes modelos de memria e conjunto de instrues, com pouco tempo para o estudo detalhado de cada caso.
www.exsto.com.br

A soluo ento utilizar uma linguagem de mais alto nvel, que por princpio so independentes do hardware. O desenvolvedor concentra seu trabalho na criao de algoritmos e funcionalidades no projeto e deixa o trabalho de implementao para o compilador. Surge ento outro problema: qual linguagem usar? Para muitas pessoas a resposta : o C! Vejamos por que. Em primeiro lugar, o C considerado uma linguagem de mdio nvel, isto , mais amigvel para o ser humano, mas mantendo recursos de baixo nvel. Em virtude disso, o C permite gerar cdigos mais eficientes quando comparado com outros compiladores. H tambm a vantagem da independncia do hardware que permite que um projeto seja portado de uma arquitetura para outra com poucas alteraes no cdigo. Essas caractersticas do C no so por acaso. A linguagem foi desenvolvida no incio dos anos 70 por Dennis Ritchie especificamente para o desenvolvimento do sistema operacional UNIX. Na poca o dilema era quase o mesmo: construir sistemas operacionais em assembly era demorado e dispendioso e todo o trabalho tinha que ser refeito a cada novo processador criado. Os computadores da poca tinham pouca memria e os modelos usados por Ritchie no eram capazes de implementar operaes de ponto flutuante diretamente. Ritchie desenvolveu uma linguagem simples, fcil de ser aprendida, mas com recursos que permitem o desenvolvimento de programas complexos, como sistemas operacionais, que permite portabilidade de cdigo sem prejudicar as funcionalidades de baixo nvel, gerando um cdigo bastante enxuto, isto , eficiente no uso da memria. Por ser uma linguagem estruturada, o C exige que o programador siga boas prticas de programao, evitando assim erros que, em Assembly, poderiam passar despercebidos. A portabilidade de cdigo fica garantida, pois existe uma norma que rege a linguagem C. Todo compilador que segue o padro ANSI deve conseguir reconhecer o mesmo cdigo gerado, independente da arquitetura alvo. Os compiladores C profissionais so bastante
2

ANE0004
confiveis, geram cdigo eficiente e livre de bugs de implementao. Uma vantagem adicional do C so as bibliotecas de funes que acompanham os compiladores. Alm das bibliotecas convencionais do padro ANSI a maioria dos compiladores possui bibliotecas para uso das funcionalizadas especficas de cada microcontrolador. Alm do ganho de tempo em se usar as bibliotecas j prontas existe tambm um ganho de eficincia de cdigo, j que essas funes so normalmente implementadas em Assembly para otimizao de memria e tempo. Como o C utilizado tambm em computadores, trata-se de uma linguagem muito difundida nas escolas e universidade. Tambm os profissionais que tiveram uma formao acadmica voltada para o PASCAL tero facilidade em desenvolver em C. Na tabela 2.1 se pode observar uma comparao entre as linguagens C e Assembly. Caracterstica Eficincia de cdigo Velocidade de execuo Controle do sistema Portabilidade Depurao Programao Assembly tima tima timo C Muito Boa Muito Boa Muito Bom otimiz-lo. Alm disso, em situaes crticas, possvel inserir linhas de cdigo Assembly dentro de um programa escrito em C.

1.4. Concluso
Por essas e por outras razes os fabricantes de microcontroladores tm, j h alguns anos, desenvolvido arquiteturas de microcontroladores otimizadas para o uso da linguagem C. Alguns tipos de instrues e modos de endereamento so includos para tornar mais fcil a traduo do cdigo C para o cdigo de mquina. Isso acontece com o PIC18 no set de instrues convencional e mais pronunciadamente no set estendido. Como adaptaes do processador ao C podem citar as instrues voltadas para endereamento indireto e para leitura de constantes na memria de programa, alm da presena de diversos ponteiros para endereamento indireto de variveis (facilitam a implementao de vetores, matrizes e variveis do tipo ponteiro). Esperamos ter demonstrado que a linguagem C tem sido cada vez mais usada no desenvolvimento com microcontroladores, trazendo diversas vantagens que justificam seu uso em aplicaes profissionais. Uma ltima observao deve ser feita quanto ao uso de linguagens orientadas a objeto. Apesar da orientao a objeto ser uma tendncia na programao e trazer inegveis benefcios ao desenvolvimento de software, hoje ainda ela no usada em larga escala. Uma provvel causa o maior consumo de memria que a tcnica acarreta. Contudo j existem compiladores que permitem trabalhar de forma orientada a objetos (em C++, Java, etc). No futuro otimizaes na arquitetura dos microcontroladores sero feitas para tornar o cdigo orientado a objeto mais leve aos microcontroladores.

Pssimo timo Muito difcil Fcil NoEstruturada estruturada Bibliotecas de No H Padronizadas e funes especficas Tabela 2.1 Comparao entre C e Assembly Contudo, no se deve entender que o estudo da linguagem Assembly deve ser negligenciado. Assim como o bom piloto de corrida entende tanto da mecnica de seu carro quanto os engenheiros que o projetaram, o bom desenvolvedor deve ter slidos conhecimentos da arquitetura, modelo de memria e conjunto de instrues Assembly do microcontrolador com o qual trabalha. imprescindvel conhecer bem o assembly, at para poder conseguir os melhores resultados em C. Sempre possvel analisar o cdigo Assembly gerado pelo compilador, buscando formas de
www.exsto.com.br