Ir ao conteúdo

Posts recomendados

Postado

Estou pesquisando um controle FFB e sempre encontro muito material para arduino,então vou comprar uma placa Arduino Leonardo para aprender a usar o firmware no microcontrolador diretamente.
Minha questão é a seguinte,eu baixando a IDE do Arduino,instalando a Lib e compilando,é gerado um Hex comum que a maioria utiliza um Bootloader para carregar?então como não pretendo usar um Bootloader,esse hex gerado pode ser gravado diretamente no Micro ou é obrigatório o Bootloader?

  • Membro VIP
Postado

Se gravar sem o bootloader não regrava mais [com facilidade] . Na etapa de aprendizado/desenvolvimento é bom manter. Mas de fato pro sistema final ele é desnecessário e só ocupa espaço. Pra gravar sem ele possua um gravador de verdade pro seu mc

Postado

Dei uma pesquisada e parece que é só gravar o hex na maneira convencional.

Pensei que tinha que alterar alguma coisa no código,mas parece que não.

  • Membro VIP
Postado

kibon que sua pesquisa dispensa resposta personalizada. Senão eu ia falar que...

A nobre proposta arduína é deixar tudo fácil, universal e mastigado pra todo mundo. P.ex. meu compilador arduíno gerava 2 arquivos: nomedoarquivo.hex e nomedoarquivo_with_bootloader.hex (ou algo do gênero) que é ligeiramente maior que o anterior. Isso me bastava pra saber o que ele fazia e claro qual arquivo escolher. Portanto se gravar o nomedoarquivo_with_booloader.hex de maneira tradicional me parece que está trocando 6 por meia dúzia (considerando o conteúdo de tua inquietação).

... e de nada

Postado
36 minutos atrás, .if disse:

kibon que sua pesquisa dispensa resposta personalizada. Senão eu ia falar que...

A nobre proposta arduína é deixar tudo fácil, universal e mastigado pra todo mundo. P.ex. meu compilador arduíno gerava 2 arquivos: nomedoarquivo.hex e nomedoarquivo_with_bootloader.hex (ou algo do gênero) que é ligeiramente maior que o anterior. Isso me bastava pra saber o que ele fazia e claro qual arquivo escolher. Portanto se gravar o nomedoarquivo_with_booloader.hex de maneira tradicional me parece que está trocando 6 por meia dúzia (considerando o conteúdo de tua inquietação).

... e de nada

Eu ainda não instalei a IDE e nem chegou a placa,chegando posto o 'resultado'.

É uma pena verificar que muitas bibliotecas 'interessante' estão disponíveis em C/C++/Arduino.

  • Confuso 1
Postado
2 horas atrás, vtrx disse:

É uma pena verificar que muitas bibliotecas 'interessante' estão disponíveis em C/C++/Arduino.

 Acho que não entendi ...

 

Paulo

Postado
1 hora atrás, aphawk disse:

 Acho que não entendi ...

 

Paulo

As bibliotecas não são diretamente compatíveis com a maioria dos compiladores,tem que fazer 'ajustes' para compilar,pelo menos as que eu li,é uma mistura de C,C++ e linguagem Arduínica.

Se eu estiver errado,me corrijam,eu até ficarei feliz em entender.

  • Confuso 1
  • Membro VIP
Postado
16 horas atrás, vtrx disse:

As bibliotecas não são diretamente compatíveis com a maioria dos compiladores,

Penso que não se deve e nem precisa misturar ou confundir compiladores com a ide arduína. Penso não ter muito sentido adaptar libs do Keil C p.ex. pro ambiente arduíno. Como já foi dito, ele quer ser universal portanto já tem praticamente tudo pronto pra ele em termos de 'driver' de hw. mesmo quando lançam um ci novo ou interface totalmente nova, alguém (sem o que fazer) faz rapidão uma lib pra ele deixando a camada de acesso disponível pra toda a comunidade arduina em pouquíssimo tempo. O mesmo não é feito pros compiladores comerciais - pelo menos em pouco tempo.

De fato as adaptações que mencionas são mínimas se comparadas a compiladores normais pois cada um acessa o hw do mc de forma diferente.

Já Arduínos & cia p.ex.

#define led 5
static bit a; //ou boolean .. não lembro
loop()
{
digitalwrite(led,a);
a^=1;
delayms(1000);
}

que é a única coisa que  acho que sei fazer com arduíno, serve pra virtualmente qualquer placa arduína em qualquer parte do universo observável. Praticamente nem precisa configurar hw e etc. Mesmo tendo que configurar, é rápido e intuitivo. Raramente precisa ler o d.s. do mc (apesar que eu recomendo muito). Já num compilador 'normal' tem muita coisa que precisa ser lida & entendida

  • Curtir 1
Postado

Voltando....

Foi só gravar o arquivo.hex (sem bootloader) e funcionou normalmente.

A IDE não é boa,mas pelo menos compila o código que procurava que funciona,graças a comunidade.

Bibliotecas completas,ja o compilador...não abre arquivos.h etc.

  • Curtir 1
Postado

Aprendi como portar um projeto Arduino para ser compilado no compilador AtmelStudio 7,que é o que eu mais utilizo.

Agora posso verificar todos os procedimentos 'oculto' usado na IDE do Arduino e deixar o projeto mais limpo e resolver rapidamente algum erro pois posso abrir qualquer tipo de arquivo no compilador,inclusive estou usando o Main.cpp direto e não indireto como na IDE do Arduino.

Desinstalei e apaguei as pastas relacionadas a IDE do Arduino para verificar se ainda ficou dependente da plataforma e ficou totalmente independente. :)

  • Amei 1
  • Membro VIP
Postado
2 horas atrás, vtrx disse:

Aprendi como portar um projeto Arduino para ser compilado no compilador AtmelStudio 7

Já sei... a complexidade do método te impede de compartilhar com mais detalhes ou até mesmo de tentar resumir e nos contar, acertei? (o que você contou acima é bem pouco). E a gente não entenderia mesmo se você colocasse exemplo, desenhos e fontes, certo? Nem mesmo de um pisca led? Também não tem tempo e acha que isso não seria um bom conteúdo pro forum, né?

Caso contrário abra ainda mais seu coração 😁

🤪

  • Curtir 1
  • Haha 1
Postado
15 minutos atrás, .if disse:

Já sei... a complexidade do método te impede de compartilhar com mais detalhes ou até mesmo de tentar resumir e nos contar, acertei? (o que você contou acima é bem pouco). E a gente não entenderia mesmo se você colocasse exemplo, desenhos e fontes, certo? Nem mesmo de um pisca led? Também não tem tempo e acha que isso não seria um bom conteúdo pro forum, né?

Caso contrário abra ainda mais seu coração 😁

🤪

 

Não é isso.

Eu fiz de manhã no serviço quando ainda não tinha ninguém.

Devo estar +- as 14:00 em casa e mostro o passa a passo.

É bem simples,apenas a parte de desmembrar o Main que é chato.

 

PS:Faltou eu dizer que como sou 'novato' em Arduino,esperei alguém comentar pois corria o risco de alguém 'comentar' que ja sabia a tempos isso.

Postado

@vtrx ,

 

Olha, eu leio muita coisa sobre projetos com AVR, a grande maioria com Arduino, mas é a primeira vez que vejo alguém fazer isso que você fêz…. Creio que será de grande ajuda para muita gente se você puder fazer um passo a passo, pois é uma maneira bem legal de se aproveitar milhares de libraries !

 

Paulo

  • Curtir 1
Postado

Algumas observações:

Sou novo no mundo Arduino,não me interessava pela plataforma até que encontrei duas Libs muito bem feitas para o ambiente Arduino que eu tentava otimizar de um código C para PIC ou AVR,uma das Libs é complexa e dedicada parar o Atmega32U4 e não encontrei referencia na internet para outros micros e apenas achei para Arduino Leonardo.

Pensei em adaptar o código para outros compiladores/micro mas descobri que o Arduino usa linguagem C++,isso é um empecilho a mais para converter para C no meu caso.

Quando comecei a programar para PC,escolhi C e Delphi e para minha falta de sorte,o Delphi usa Object Pascal ou C++ e resolvi aprender Object Pascal deixando o C++ de fora,eu poderia hoje em dia ter convertido um projeto Arduino rapidamente se tivesse escolhido C++ no Delphi.

Só mencionei isto para explicar porque fiquei interessado em portar um projeto Arduino para C.

Existe um inconveniente quando se porta um projeto do Arduino para AtmelStudio,o .hex fica maior.

Procurando na internet descobri que a IDE do Arduino,na hora de compilar,não incluem as bibliotecas não usadas,porém o AtmelStudio as incluem mesmo se não for usadas,ficam 'paradas' no código,então a vantagem é que o projeto no AtmelStudio fica totalmente independente do Arduino instalado e expõe todas as Libs do Arduino para ler/alterar/examinar dentro do compilador em tempo de execução,o Arduino não.

A programação dentro do ambiente Arduino não é eficaz em relação a execução de código,este é mais um motivo que me levou a portar o projeto,exemplo;

Num projeto .ino a execução do programa passa por void setup() e roda dentro de void loop().

A estrutura com em C seria mais ou menos assim;

/*
 * exemplo.c
 *
 * Created: 01/01/2022 06:55:41
 * Author : ALL
 */ 

//DEFINIÇÃO DO CLOCK PARA REFERENCIA DE TEMPORIZAÇÕES//
#ifndef F_CPU
#define   F_CPU 20000000UL // 20 MHz clock speed
#endif

//ARQUIVOS QUE SERÃO USADOS DEPENDENTE DO PROGRAMA
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdio.h>

//------ DEFINIÇÕES ----------------------------------------------

//------- VARIAVEIS ----------------------------------------------

//-------- PROTÓTIPO DE ROTINAS/FUNÇÕES --------------------------
...
//-------- FUNÇÕES/ROTINAS ---------------------------------------

//-------- INICIO/START/SETUP ------------------------------------
int main(void)
{	
 //INICIALIZAÇÃO DAS VARIAVEIS E HARDWARE//
	
	while(1)
	{
         //LOOP DE REPETIÇÃO DE ROTINAS VARIAS
	}
}
//FIM

 

No Arduino,o arquivo .ino faz um salto para um pseudo 'main',mais ou menos assim;

#include <Arduino.h>

#include "Algum_arquivo.h"

Bla,Bla,Bla
etc...
void setup()
{
 //CONFIGUIRAÇÕES DE HARDWARE ETC...
}

void loop()
{
//REPETIÇÕES DAS ROTINAS ETC..
}

 

Em #include <Arduino.h> não tem muito problema,ele configura o clock,os pinos,os includes Atmel e um monte de definição.

Depois disso ele vai para o main{} 'padrão' iniciando variáveis etc e dentro deste main temos um looping normal,como mostrado,mas tem um detalhe.

Dentro deste looping temos;

		loop();
		if (serialEventRun) serialEventRun();

Isso significa que qualquer rotina dentro de void loop() no Sketch passa por uma chamada de rotina(loop();) e por uma comparação(if (serialEventRun) serialEventRun();).

Olha o desperdício de recursos se voce apenas piscar um LED!

Tem mais alguns detalhes de desperdício.

Para setar um pino,exemplo pino 13:digitalWrite(13, 0);

Olha o código gerado toda vez que voce setar o pino em HIGH/LOW;

void digitalWrite(uint8_t pin, uint8_t val)
{
	uint8_t timer = digitalPinToTimer(pin);
	uint8_t bit = digitalPinToBitMask(pin);
	uint8_t port = digitalPinToPort(pin);
	volatile uint8_t *out;

	if (port == NOT_A_PIN) return;

	// If the pin that support PWM output, we need to turn it off
	// before doing a digital write.
	if (timer != NOT_ON_TIMER) turnOffPWM(timer);

	out = portOutputRegister(port);

	uint8_t oldSREG = SREG;
	cli();

	if (val == LOW) {
		*out &= ~bit;
	} else {
		*out |= bit;
	}

	SREG = oldSREG;
}

Imagine gerar pulso usando;

digitalWrite(13, 0);//LOW

digitalWrite(13, 1);//HIGH

Ja da para ter uma ideia de desperdício de desempenho em pró a facilidade.

Para importar um Sketch do Arduino para o Atmel Studio é simples,a própria IDE faz isso;

image.thumb.png.f151786935e53e85e306e7cb48c632b5.png

 

Selecione o arquivo .ino,crie a nova pasta e o AtmelStduio faz o resto para voce.

No meu caso eu baixei uma Lib,com exemplos,então voce deve copiar todos os .h e .cpp,que não fazem parte do Arduino,e colar na pasta criada pelo AtmelStudio com o nome de sua Sketch(onde fica a pasta Debug e Release).

Pronto o AtmelStudio mostrara em sua IDE todos os arquivos que o Arduino usa,deste modo voce pode ler e verificar todos.

A grande vantagem é que voce pode procurar algum erro facilmente pois pela IDE do AtmelStudio,basta selecionar o trecho de código com o mouse direito e clicar em Goto Implemation,deste modo voce vai direto a rotina ou definição do trecho do código onde estiver para voce poder verificar ou alterar livremente,eu mesmo ja 'travei' um projeto Arduino tentando fazer uma alteração e tive que reinstalar o Arduino.

Outra vantagem é que o hex gerado estará na pasta padrão,que é Debug ou Release e voce pode até desinstalar o Arduino.

Por enquanto é isso,ainda vou procurar mais facilidades desta importação.

 

PS:

Esqueci de mencionar.

Depois de criado o novo projeto pelo AtmelStudio,dentro da pasta do projeto existe uma pasta .vs,ele é oculta voce tem que liberar a visualização de arquivos ocultos para poder ver,apague esta pasta antes da primeira recompilação,isto é,uma vez só,depois disso não precisa mais.

É que pode haver mensagens de erro que dependem da versão do Arduino instalado,apagando esta arquivo o AtmelStudio substitui pela versão usada nele.

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!