• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Oliveira88

Linguagem de Programação usada em Microcontroladores

25 mensagens neste tópico

Boas, Que linguagens de programação são usadas em programação de Microcontroladores?

Até agora só aprendi em C, mas devem existir mais...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O arduino que é a plataforma de 'micro-desenvolvimento' mais popular e mais sexy :D usa a sua prórpria linguagem que basicamente é um dialecto de C.

Em teoria qualquer linguagem pode ser usada desde que seja compilada para a arquitectura em questão, adicionalmente convem ter bibliotecas de acesso a particularidades do hardware.

Na pratica, nunca vi ninguem a programar um microcontrolador em nada para alem de C ou assembly, e eu tirei eng electrotecnica.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Na pratica, nunca vi ninguem a programar um microcontrolador em nada para alem de C ou assembly, e eu tirei eng electrotecnica.

Já vi em dialectos de Basic.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A linguagem mãe de cada microcontrolador, é o Assembler.

Depois há as linguagens de mais alto nivel, que se abstraem um pouco do hardware, lbertando o programador.

Eu faço programação em Assembler, a não ser que o meu trabalho tenha que ser alterado posteriormente por outra pessoa.

Para trabalhos em que o nivel de processamento é elevado, o Assembler tem-me dado os melhores resultados.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

zedlav, não era minha intenção estar a encontrar uma classificação rigorosa para o que é um dialecto de C.

Mas não podes prgramar o arduino em C, pelo menos usando o compilador deles. Pelo menos nunca vi nenhum compilador de C para um arduino nem estou a ver qual o objectivo de uma ferramenta desse tipo.

O arduino vem com uma plataforma completa de desenvolvimento que usa uma linguagem baseada em C/C++, não é C.

Mas voltando ao tema inicial que isto de definições rigorosas penso que tem pouco ou nenhum interesse para o Oliveira88.

Como podes ver o mais alto nível que há por aí popularmente difundido é C ou uma coisa parecida. Pessoalmente sonho com o dia em que existem compiladores e bibliotecas de I/O em linguagens como python, java, PHP, etc.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pessoalmente sonho com o dia em que existem compiladores e bibliotecas de I/O em linguagens como python, java, PHP, etc.

Cuidado que na Internet não podes sonhar muito alto, quando deres por ela já estão aí... =)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

As linguagens mais difundidas para uC são assembly, C e BASIC, sendo que a nível "profissional" são usadas mais o assembly e o C. Não sei bem como classificar o assembly mas é uma linguagem um pouco diferente das restantes, pois cada processador tem a sua, ao passo que as restantes são mais ou menos standardizadas. Por exemplo, não faz muito sentido dizer "eu sei programar em assembly", porque é uma frase incompleta; teria que dizer por exemplo "eu sei programar em assembly x86". Apesar de haverem muitos conceitos horizontais aos vários assembly's, conhecer o assembly de uma máquina não nos torna automaticamente capazes de escrever uma única linha de assembly para outra máquina; é preciso ir estudar a arquitectura da máquina e a sintaxe do seu assembly, que para uma mesma máquina até pode ser diferente conforme o programa assembler!

Eu já fui grande fã e viciado em assembly. Mas os compiladores hoje em dia estão tão bons que, excepto no caso de um uC que só tinha 512 bytes de memória de programa, ainda não tive que fazer uma única rotina em assembly. Os projectos que tenho feito têm sido num uC de 2KB de memória de programa e ainda não tive que recorrer a assembly (embora já tenha usado algumas rotinas Open Source, mas é código genérico, como por exemplo para multiplicar 2 números). E alguns deles ainda fazem imensa coisa. O trabalho extra de ginástica mental, a pouca flexibilidade e a pouca legibilidade do assembly não justificam que se invista nele a não ser em casos muito pontuais.

Do que eu já vi da "linguagem" de programação do Arduino, é C/C++ mas com algumas bibliotecas para lidar com uma série de sensores e actuadores. Lá por baixo, o ambiente usa o GCC :).

Pedro, não entendi o que queres dizer com existirem compiladores e bibliotecas de I/O em python, etc...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
The Arduino language is based on C/C++.

Sempre parti do principio que usam uma coisa qq tipo gcc, mas não me parece que as funcionalidade par alem das básicas da linguagem C estejam disponíveis.

Por falar nisso... encomendei esta semana um arduino :)

Em relação ao assembly até digo mais:

Depende do processador e do assembler. Usando mesmo assembler, tecnicamente o assembly é o mesmo, só que os registos, interrupções, etc são diferentes, daí o assembly diferente que falas.

Verdade seja dita, a linguagem assembly pode ser descrita numa frase. Saber as caracteristicas do processador é que é o mais chato. Concordo contigo.

Pedro, não entendi o que queres dizer com existirem compiladores e bibliotecas de I/O em python, etc...

Quero dizer uma plataforma como o arduino por exemplo mas que tenha suporte para python e que haja bibliotecas para aceder a todos os portos.

Eu já fui grande fã e viciado em assembly. Mas os compiladores hoje em dia estão tão bons que, excepto no caso de um uC que só tinha 512 bytes de memória de programa, ainda não tive que fazer uma única rotina em assembly. Os projectos que tenho feito têm sido num uC de 2KB de memória de programa e ainda não tive que recorrer a assembly (embora já tenha usado algumas rotinas Open Source, mas é código genérico, como por exemplo para multiplicar 2 números). E alguns deles ainda fazem imensa coisa. O trabalho extra de ginástica mental, a pouca flexibilidade e a pouca legibilidade do assembly não justificam que se invista nele a não ser em casos muito pontuais.

+1

Andam praí 8086 dos antigos por um euro ou dois, não há necessidade absolutamente nenhuma de estar a programar bit a bit.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Mas não podes prgramar o arduino em C pelo menos usando o compilador deles

Claro que posso programar em C e quem fez o arduino não fez um compilador, eles usam o GCC (para compilar) e o avrdude (para gravar o microcontrolador) e nenhum destes dois foi feito por eles!

O arduino vem com uma plataforma completa de desenvolvimento que usa uma linguagem baseada em C/C++, não é C.

Claro que não é C, é C ou C++!

Sempre parti do principio que usam uma coisa qq tipo gcc, mas não me parece que as funcionalidade par alem das básicas da linguagem C estejam disponíveis

Eles não usam um tipo de GCC eles usam mesmo o GCC (avr-gcc) e é com as funcionalidade básicas de C (e algum assembly se necessário) que se faz uma libC.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Quero dizer uma plataforma como o arduino por exemplo mas que tenha suporte para python e que haja bibliotecas para aceder a todos os portos.

Estas máquinas são pequenas, têm tipicamente entre 1KB e 64KB (sendo o mais usual até 8KB), e também estão limitadas em RAM (um AVR tem até uns 4KB, nos chips maiores). Implementar uma linguagem de alto nível numa máquina destas até pode ser possível, mas será um desperdício. O código para criar o ambiente para a linguagem correr tende a consumir os escassos recursos disponíveis rapidamente, e acaba-se por não aproveitar a potencialidade da máquina. Espetacular nestas máquinas é o tanto que se pode fazer com tão pouco. E eu não vejo que vantagens é que programar em python trás para um uC destes, e PHP (dirigido a aplicações web) muito menos. Existem alguns sistemas, nomeadamente de BASIC como uns da parallax, que o que fazem é correr um interpretador no uC e ter o programa BASIC guardado numa EEPROM (chip) à parte. Isto permite ter um programa maior, à custa de uma grande limitação de dados e velocidade de execução.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Zeldav. Não é C. Não esotu a dizer que não usam o gcc ou que não partiram do C, mas acrescentaram coisas que precisavam e removeram outras que estavam no caminho.

Tecnicamente não é pois não segue nenhuma especificação de C.

The Arduino language is based on C/C++ and supports all standard C constructs and some C++ features. It links against AVR Libc and allows the use of any of its functions; see its user manual for details.

Isto é um quote do site do arduino.

Njay... sim é verdade, mas penso que já está um pouco na hora de andar para a frente. Por exemplo, já se compram  telemoveis novos por 60 euros com capacidades de processamento iguais ou superiores às dos pentiums e com centenas de kilobytes de memória. O próprio arduino penso que é um passo nesse sentido. A sua popularidade está a ser um estrondo, penso que daqui por 2-4 anos haverá mais plataformas e com hardware muito mais poderoso.

Uma pergunta e isto não estou por dentro do mercado de processadores. Não há nenhum processador da família 80x86 que se venda por aí num IC com pinos salientes por meia dúzia de euros?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Lá na escola acho que usam basic, o _JR_ é que sabe masi promenores sobre isso...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Njay... sim é verdade, mas penso que já está um pouco na hora de andar para a frente. Por exemplo, já se compram  telemoveis novos por 60 euros com capacidades de processamento iguais ou superiores às dos pentiums e com centenas de kilobytes de memória. O próprio arduino penso que é um passo nesse sentido. A sua popularidade está a ser um estrondo, penso que daqui por 2-4 anos haverá mais plataformas e com hardware muito mais poderoso.

Mas estamos a falar de uC de 8 bits. E para o tamanho destas máquinas não faz sentido "sonhar" muito alto. Elas têm o tamanho apropriado à dimensão das tarefas para as quais foram desenhadas. Existe hardware mais poderoso. x86 desconheço que haja em formato "chip barato e fácil de usar", mas tens por exemplo ARMs. A própria ATMEL tem uma família até relativamente barata (penso que andava pelos poucos $ o chip), que já corre Linux. Mas é um chip maior, precisa já de mais alguma electrónica de suporte. Dá uma olhadela no site da ATMEL. Eles também tinham por exemplo FPGAs com um AVR integrado, mas programar uma FPGA já é outro nível; cada dispositivo é desenhado com um determinado tipo de tarefas em mente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Arduino Documentation

This section explains how every part of the system works. this is useful if you want to modify or add to arduino.

The compilation process

The arduino code is actually just plain old c without all the header part (the includes and all). when you press the 'compile' button, the IDE saves the current file as arduino.c in the 'lib/build' directory then it calls a makefile contained in the 'lib' directory.

This makefile copies arduino.c as prog.c into 'lib/tmp' adding 'wiringlite.inc' as the beginning of it. this operation makes the arduino/wiring code into a proper c file (called prog.c).

After this, it copies all the files in the 'core' directory into 'lib/tmp'. these files are the implementation of the various arduino/wiring commands adding to these files adds commands to the language

The core files are supported by pascal stang's procyon avr-lib that is contained in the 'lib/avrlib' directory

At this point the code contained in lib/tmp is ready to be compiled with the c compiler contained in 'tools'. If the make operation is succesfull then you'll have prog.hex ready to be downloaded into the processor.

http://arduino.cc/hu/Main/Documentation

is ready to be compiled with the c compiler

Parece que eles usam no seu IDE um C compiler.

antes

/*
* Blink
*
* The basic Arduino example.  Turns on an LED on for one second,
* then off for one second, and so on...  We use pin 13 because,
* depending on your Arduino board, it has either a built-in LED
* or a built-in resistor so that you need only an LED.
*
* http://www.arduino.cc/en/Tutorial/Blink
*/

int ledPin = 13;                // LED connected to digital pin 13

void setup()                    // run once, when the sketch starts
{
  pinMode(ledPin, OUTPUT);      // sets the digital pin as output
}

void loop()                     // run over and over again
{
  digitalWrite(ledPin, HIGH);   // sets the LED on
  delay(1000);                  // waits for a second
  digitalWrite(ledPin, LOW);    // sets the LED off
  delay(1000);                  // waits for a second
}

depois

/*
* Blink
*
* The basic Arduino example.  Turns on an LED on for one second,
* then off for one second, and so on...  We use pin 13 because,
* depending on your Arduino board, it has either a built-in LED
* or a built-in resistor so that you need only an LED.
*
* http://www.arduino.cc/en/Tutorial/Blink
*/

#include "WProgram.h"
void setup();
void loop();
int ledPin = 13;                // LED connected to digital pin 13

void setup()                    // run once, when the sketch starts
{
  pinMode(ledPin, OUTPUT);      // sets the digital pin as output
}

void loop()                     // run over and over again
{
  digitalWrite(ledPin, HIGH);   // sets the LED on
  delay(1000);                  // waits for a second
  digitalWrite(ledPin, LOW);    // sets the LED off
  delay(1000);                  // waits for a second
}

int main(void)
{
init();

setup();
    
for (;
	loop();
        
return 0;
}

Acho que já não tenho mais nada a dizer...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Zeldav, não sei para que foi isto.

Não sei onde é que esta discussão leva. Se o manual diz que a linguagem é uma linguagem baseada em C/C++ o que é que queres provar?

Mas devias ler com atenção aquilo que acabaste de citar. Em particular parte que sublinhaste traduzida para português diz isto:

"Esta operação faz do código do arduino e das ligações um ficheiro de C propriamente dito"

Ou seja, o que escreves no IDE do arduno não é C válido, o IDE serve precisamente para pegar no teu código arduino (C com umas modificações) e transforma-lo em C. É a única coisa que estou a tentar dizer. Não quero de forma alguma dizer que não seja basicamente programar numa espécie de C.

O código que acabaste de afixar é um bom exemplo, não compila como C.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Agora comprendo porque querias programar o microcontrolador em python, tu não pescas nada de C .  Mais engraçado é tu nas estatisticas do teu perfil ainda não tenhas dado nenhum contributo lá para os lados do C (para quem sabe identificar o que é C e o que não é no minimo estranho). E fico por aqui porque não vale a pena. Boas programações em arduino language  :D.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não percebo porque é que estás tão picado com isto zedlav, a tua penúltima resposta já achei que tinha passado um bocado dos limites, mas esta é completamente fora. Pareces um miúdo a discutir no jardim infantil.

O pedrotuga está apenas a referir que arduino se programa num dialecto de C, e tu estás numa birra infernal a tentar provar que é C... Qual é o objectivo? Como tu, ao contrário do pedrotuga, tens vasto conhecimento da matéria, conheces esta referência: http://www.arduino.cc/en/Reference/HomePage por dentro e por fora, e como tal, leste isto:

Arduino programs can be divided in three main parts: structure, values (variables and constants), and functions. The Arduino language is based on C/C++.

A partir do momento em que leste isto, acabou a discussão e não há razão para mais birras, pode ser?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E quem és tu??? O educador de infancia??? O moderador??? Não me parece que sejas nem um nem outro, por isso só podes ser colega do jardim de infancia. Tambem deves estar picado com algo, se não não te davas ao trabalho de dizer para eu acabar com a birra!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E quem és tu??? O educador de infancia??? O moderador??? Não me parece que sejas nem um nem outro, por isso só podes ser colega do jardim de infancia. Tambem deves estar picado com algo, se não não te davas ao trabalho de dizer para eu acabar com a birra!

Não estou picado com nada, estou apenas perplexo com a tua atitude. Moderador é o pedrotuga, não sei se reparaste. Mas garanto-te que, pelo tempo que já passei nesta comunidade, não é de pessoas com a tua atitude que ela precisa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Moderador é o pedrotuga, não sei se reparaste

Claro que é, mas não é da parte eletronica e muito menos do C.

Mas garanto-te que, pelo tempo que já passei nesta comunidade, não é de pessoas com a tua atitude que ela precisa.

O que queres dizer, que me devo ir embora??? Fogo pensei que este site fosse democratico, que se podesse discutir.

Ps- No brasil fala-se um dialecto do portugues. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Claro que é, mas não é da parte eletronica e muito menos do C.O que queres dizer, que me devo ir embora??? Fogo pensei que este site fosse democratico, que se podesse discutir.

Pensaste que se pudesse discutir e pode-se. O que não se pode é começar com ataques pessoais do género "não pescas nada de C" e argumentar que só porque a pessoa não tem contribuições numa secção não pode falar disso.

Esta tua atitude de "não pescas nada de C" não é positiva, e seria má se tivesses razão. Dado que não tens, e qualquer pessoa com competências básicas ao nível da leitura do Inglês que visite o site do arduino pode comprová-lo, a situação torna-se ridícula.

Ps- No brasil fala-se um dialecto do portugues. :P

Pois fala, e o que é que isso tem a ver com esta discussão?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Agradecia que a conversa ficasse por aqui senão vou ter que fechar o tópico. Não interessa quem é moderador e quem não é moderador, somos todos pessoas e toda a gente merece respeito. Em relação ao ser ou não ser C, ambos os pontos de vista são válidos. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpem lá, mas o zedlav tem razão, claro que é C:

The arduino code is actually just plain old c without all the header part (the includes and all). when you press the 'compile' button, the IDE saves the current file as arduino.c in the 'lib/build' directory then it calls a makefile contained in the 'lib' directory.

This makefile copies arduino.c as prog.c into 'lib/tmp' adding 'wiringlite.inc' as the beginning of it. this operation makes the arduino/wiring code into a proper c file (called prog.c).

O único que ele faz antes de passar ao GCC é copiar um ficheiro para o início do código que escrevemos, não altera nada ao código, portanto é puro C.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
o IDE serve precisamente para pegar no teu código arduino (C com umas modificações) e transforma-lo em C. É a única coisa que estou a tentar dizer. Não quero de forma alguma dizer que não seja basicamente programar numa espécie de C.

Assim de fora, parece-me que foi exactamente o que o pedrotuga disse.

Voltando ao tópico, porque o derrapanço já se nota por aqui, eu tenho ainda pouca experiência neste mundo, em termos de variedade, mas com os microcontroladores que uso programo em C, mas sei que esse C é interpretado e passado para Assembly.

É possível, aliás, ver a lista que é gerada da interpretação do C.

Citando a Wiki:

Microcontrollers were originally programmed only in assembly language, but various high-level programming languages are now also in common use to target microcontrollers. These languages are either designed specially for the purpose, or versions of general purpose languages such as the C programming language.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora