Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Guilherme Palazzo

Arduino Cartão Micro SD como "memória primária" do Arduino

Recommended Posts

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á! :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@aphawk,

Beleza. Só de saber que esse é o problema, já consigo dar uma direcionada na busca por soluções. Mais uma vez, obrigado e um abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

Caso a otimização do código não resolva, considere trocar o UNO pelo Arduino Mega, 8k de RAM contra 2k do Uno.

 

Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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!

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

@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

 

 

Editado por aphawk
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

@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

 

Editado por aphawk
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×