Estou atualmente ministrando um curso de programacao de microcontroladores. E como sempre surge a polemica: Linguagem de alto nivel? Baixo nivel? O que e isso? O que utilizar, e quando?Bom... "nivel" e um conceito relativo. Todos concordam que as linguagens Assembly sao baixo nivel. Mas a partir dai, o cenario fica muito mais confuso!Essa classificacao foi criada quando so existiam os Assemblers e os compiladores procedurais. Nesse cenario, as linguagens Assembly foram consideradas "baixo nivel", porque seus comandos descrevem codigo nativo de maquina, numa relacao um-para-um, portanto estamos na camada mais baixa possivel de interacao com o hardware. As linguagens compiladas foram, como um todo, consideradas de "alto nivel", pois seus comandos sao compilados para codigo de maquina numa relacao um-para-N, e o programador nao ve mais os detalhes desse codigo.Mas depois as coisas comecaram a se complicar. Apareceram as linguagens nao-procedurais, nas quais o programador descreve tarefas, e os compiladores se encarregam da geracao de comandos. Como chamar isso? Altissimo nivel? Alem disso, apareceram linguagens como o "C", hoje largamente empregado em microcontroladores. O "C", embora compilado, conserva uma relacao muito mais direta entre codigo fonte e codigo de maquina. Ele "disfarca" muito menos o hardware, e protege muito menos o programador de seus erros de logica - e nesse aspecto lembra bastante um Assembler. Tanto que alguns programadores que nunca usam Assembler passaram a chamar o "C" de "baixo nivel".De qualquer forma, eu falava de programacao de microcontroladores. E nesse tipo de programacao eu nunca vi serem utilizadas linguagens nao-procedurais, ja que isso nos colocaria longe demais da camada de hardware, o que e inviavel nesse tipo de ambiente. Mesmo linguagens de alto nivel sao poucas nesse ambiente. Quase exclusivamente "C". E assim voltamos ao principio de tudo. Num microcontrolador, Assembly e baixo nivel. Linguagem compilada e alto nivel. Ponto.E agora, depois de falar tudo isso, podemos responder a pergunta. Repetindo o que ja disse em ocasioes anteriores: Aconselho sempre meus alunos a estudar cuidadosamente cada "core" de microcontrolador que forem utilizar. E para isso, nada melhor do que programar em Assembler. Depois que conhecerem bem o "core", o "C" e uma boa pedida, pois vai economizar bastante em esforco e tempo de programacao.Ahhh... mas nao se esquecam de dar uma olhada no codigo de maquina gerado pelo compilador... ate hoje nao inventaram um compilador tao esperto quanto um programador, e se voces forem bons nisso sempre poderao otimizar o codigo gerado! ... de processamento! Nao vamos falar aqui da Suzuki Hayabusa, nem da Bugatti Veyron, mas sim de velocidade da execucao de codigo em computadores - mais especificamente, em microcontroladores.Um grande problema quando se fala em computadores, ou controladores, esta em escolher o modelo que nos trara os recursos e o desempenho desejados.O problema comeca porque, diferente de um carro ou de uma moto, um computador nao e um sistema fixo e completo. Quando escolhemos um carro, temos para cada modelo no maximo duas ou tres opcoes de motorizacao... talvez dois cambios... e fim! Passa a regua! Para cada combinacao (e sao poucas) teremos um teste de desempenho feito,