Ir ao conteúdo

Posts recomendados

Postado

Olá amigos(as), boa noite!

 

Gostaria de saber se é possível armazenar código fonte do arduino em cartão SD, acessando-o para execução das rotinas.

 

Estou fazendo uma aplicação no arduino nano, e devido a quantidade de sensores e componentes, a memória está esgotada, causando problemas de instabilidade no funcionamento.

 

Alguém pode me dar uma luz?

 

Muito obrigado desde já! :)

Postado

@Guilherme Palazzo ,

 

Infelizmente o programa é efetuado na memória Flash, então tem de ficar “gravando” trechos dessa memória a partir do cartão SD, e esse processo poderia ser feito por algum sistema tipo Bootloader, mas para rodar o novo trecho de programa tem de ser re-inicializado... é muito complicado, lento, e só pode ser feito cerca de 10.000 veze e depois estraga o microcontrolador.

 

Resumindo : não tem jeito... o que voce pode fazer é usar trechos em Assembly, ajuda bastante a diminuir o tamanho do programa.

 

Mas você verificou se o seu problema não é com a alocação da memória RAM ? Para mim é muito mais provável esse ser o problema ...

 

Paulo

Postado

@aphawk,

Primeiramente, agradeço a atenção.

 

Sou novo nesse mundo de Arduino, então acredito que eu não saiba muitos conceitos básicos, haha. Obrigado pelas infos.

 

"A mensagem de erro que recebo quando compilo o código é essa: Variáveis globais usam 1833 bytes (89%) de memória dinâmica, deixando 215 bytes para variáveis locais. O máximo são 2048 bytes.
Pouca memória disponível, problemas de estabilidade podem ocorrer."

 

Essa mensagem é referente a memória RAM? Se sim, como eu faria para resolver? Estou usando variáveis globais para definição dos pinos dos sensores, uma para guardar o nível do sistema como um todo (HIGH ou LOW) e um objeto rtc do Real Time Clock DS3231.

 

Obrigado e um abraço.

Postado

@Guilherme Palazzo ,

 

Sim, a mensagem está informando que a memória RAM está 89% comprometida para uso das variáveis.

Mas tem mais coisa que utiliza a memória RAM, por exemplo o stack do microcontrolador, e as interrupções armazenam dados na memória RAM livre. Além das variáveis locais que podem ser utilizadas em sub-rotinas.

 

A IDE do Arduíno não tem muito controle sobre o uso total da memória RAM, então ela lhe avisa que podem ocorrer problemas de estabilidade....

 

Eu não entendo nada sobre programar com Arduíno, então terá de aguardar alguém com experiência nesse assunto, ok ?

 

Paulo

Postado

@Guilherme Palazzo ,

 

Tente otimizar as variáveis, muita gente usa variáveis float sem precisar, e elas consomem bastante memória.

Em meus programas, a grande maioria são de 8 ou 16 bits ( BYTE ou WORD), e só uso algo tipo Float onde é estritamente necessário.

 

Boa sorte !

 

Paulo

Postado

@Fervolt,

Bom dia!

Infelizmente não consigo trocar porque as dimensões da aplicação não permitem. Estou fazendo uma pulseira para monitoramento biológico.

 

Dei uma otimizada no código, como o amigo acima sugeriu, e consegui diminuir 3%. Vou seguir nessa linha e ver o que consigo.

 

Obrigado!

Postado

@Guilherme Palazzo ,

 

Se voce está armazenando dados dos sensores, que tal usar uma memória EEprom serial para isso ?

 

Custam bem barato, e algumas já vem com uma plaquinha com terminais para ligar no Uno, e de quebra ainda ganha um RTC kkkkk :

 

https://produto.mercadolivre.com.br/MLB-711170864-modulo-relogio-rtc-ds1307-e-at24c32-com-bateria-arduino-_JM

 

Paulo

 

 

  • Curtir 1
Postado

Se precisa de algo pequeno e potente:

 

https://produto.mercadolivre.com.br/MLB-815875887-placa-stm32f103c8t6-stm32-arm-cortex-m3-32-bit-arduino-ide-_JM

 

STM32F103C8T6 - ARM Cortex M3. 128k de flash, 20k de RAM e RTC interno. Muuuito mais poderoso que o Arduino Uno, Mega, etc (claro que não menosprezando), do mesmo preço (ou mais barato) do Arduino Nano e do mesmo tamanho.

 

Essa placa pode ser programada pela IDE do arduino, mas é necessário ter o programador próprio (que também é barato).

 

Claro que exigiria pesquisas e estudos a mais para poder usar, mas fica aí para conhecimento.

 

Abrass

  • Curtir 1
Postado

@Fervolt ,

 

É o que eu falo todo o tempo .... esconder a falta de preparo dos programadores, que agora só querem programar em "linguagem de alto nível" , aproveitado bibliotecas escritas por outros que só Deus sabe como foram escritas, e acabam usando uma baita potência de hardware para compensar a falta de preparo no software e o quase total desconhecimento de como funciona o hardware de um microcontrolador, o Stack, as interrupções.... enfim é o que fez o Windows 3.11 que voava virar um Windows 10 que é uma carroça, e um gigantesco desperdício de hardware, com dezenas de Gigabytes de RAM, com clocks acima de 3 Ghz, com HDs de Terabytes, e o bicho continua uma carroça.....

 

Se escrever em Assembly, esse projeto aí do @Guilherme Palazzo resolve até com um Atmega88 rodando a 8 Mhz, nem precisa ser a 20 Mhz...  Mas , quem quer ter o trabalho, se as faculdades não preparam mais os alunos para isso ?

 

O hardware novo existe e é barato, então acabam optando por isso, um canhão pra matar uma formiguinha...

 

Paulo

Postado

@aphawk ,

Não vejo nenhum problema em usar um hardware poderoso para uma tarefa simples, mesmo porque esse hardware é melhor e mais barato que o hardware "da moda", Arduino.

Sinceramente não entendi se foi uma crítica generalizada ou a mim, por eu ter recomendado um canhão pra matar uma formiga, mas como eletrônica não é meu "ganha pão" e sim um hobby, hoje em dia quero meus projetos rodando o mais breve e com o mínimo esforço possível.

Escovei muito bit há alguns anos, atualmente não tenho tempo pra isso.

Entendo perfeitamente seu ponto de vista de querer que o pessoal aprenda a máquina, como tudo funciona internamente e tal. Realmente é um conhecimento que faz muita diferença. Mas, é fato que muitas das pessoas que postam aqui querem somente uma solução para seus problemas e nada mais além disso. É muito comum vermos [1 post].

Sim, eu também acho que se escrever em assembly nem precisa de mais memória, mas quanto tempo vai levar isso, partindo do pressuposto de que o colega @Guilherme Palazzo não conhece assembly?

Por isso tentei ajudar com foco estritamente no problema do colega, ou seja, se tem falta de memória RAM, ou otimiza o código, como foi muito bem sugerido pelo Sr., ou troca o uC por um com mais memória.

 

 

Fernando

 

 

  • Curtir 1
Postado

@Fervolt ,

 

Não entenda como uma crítica, mas sim um desabafo, pois é isso o que estão ensinando hoje.

 

E assim fazemos cada vez mais profissionais com menos conhecimento, que viram "desempregados com diploma", e colocam a culpa na situação econômica do país, mas a culpa é deles mesmos, pois ninguém vai contratar um cara que não tem preparo técnico para assumir responsabilidades profissionais !

 

De que adianta um diploma que não tem valor hoje em dia ????????????????

 

É a mesma coisa quando dizem que uma pessoa não é mais analfabeta quando aprende a ler e escrever, e quando dizem que uma pessoa deixa de ser pobre se tiver um emprego onde ganhe 1 salário mínimo ou que tenha uma TV em sua casa, ou quando deixam o aluno passar de ano mesmo sendo reprovado em todas as matérias ....

 

 

Quando é para uso de hobbista, é compreensivel procurar a facilidade em vez do conhecimento.

 

Mas a finalidade aqui é ensinar, não é ?

 

Não é apenas resolver os problemas de hobbistas, pois eu pelo menos concordo em ajudar desde que o interessado também esteja aprendendo com o processo.

 

Paulo

 

  • Curtir 1
Postado

@aphawk e @Fervolt boa noite!

 

Desculpem a demora em retornar.

 

Agradeço as sugestões de componentes e placas. Acho bacana essa discussão saudável sobre conhecimentos e soluções. Não sou nativo da área de computação (estou no último ano de eng de produção), por isso acredito que eu peque até nos conhecimentos mais básicos.

 

Estou me interessando mais por essa área, e já comprei cursos para aprender sobre tudo que puder dentro dela (mesmo não sendo o foco do post, caso queiram sugerir tópicos para que eu leia, sou todo ouvidos, haha).

Em relação ao código: dei uma otimizada nele e consegui reduzir bastante a memória. Acredito que não terei mais problema com isso para essa aplicação.

 

Grande abraço!

Postado

@Guilherme Palazzo ,

 

Que bom que conseguiu otimizar o código !

 

Eu sou engenheiro eletrônico, e a programação aprendí por conta própria, na minha época era Assembly mesmo e olhe lá kkkk

 

Tem muito tutorial sobre programação na Internet, e eu acho que você tem de ler vários deles e escolher a linguagem que você mais se identifica.

 

Mas se puder te dar um conselho, lembre-se que você tem de conhecer tudo o que existe dentro dos microcontroladores e entender o funcionamento dessas partes internas, assim fica muito mais simples.

 

Paulo

 

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!