Eu gostaria de saber quanta RAM eu estou usando no meu projeto, tanto quanto posso dizer, não há como realmente resolver isso (além de passar por mim e calculá-la). Eu cheguei a um estágio em um projeto bastante grande, onde determinei que estou ficando sem memória RAM.
Eu determinei isso porque posso adicionar uma seção e, em seguida, todo o inferno se solta em outro lugar do meu código sem motivo aparente. Se eu #ifndef
algo mais, funciona novamente. Não há nada programaticamente errado com o novo código.
Suspeitei por um tempo que estava chegando ao fim da RAM disponível. Eu não acho que estou usando muita pilha (embora seja possível), qual é a melhor maneira de determinar quanta RAM eu estou realmente usando?
Passando e tentando resolver isso, tenho problemas quando chego a enumerações e estruturas; quanta memória eles custam?
primeira edição: TAMBÉM editei muito meu esboço desde o início, esses não são os resultados reais que obtive inicialmente, mas são o que estou obtendo agora.
text data bss dec hex filename
17554 844 449 18847 499f HA15_20140317w.cpp.elf
16316 694 409 17419 440b HA15_20140317w.cpp.elf
17346 790 426 18562 4882 HA15_20140317w.cpp.elf
A primeira linha (com texto 17554) não estava funcionando. Após muita edição, a segunda linha (com texto 16316) está funcionando como deveria.
edit: a terceira linha tem tudo funcionando, leitura serial, minhas novas funções, etc. Eu essencialmente removi algumas variáveis globais e código duplicado. Menciono isso porque (como se suspeita) não se trata desse código em si, mas do uso da RAM. O que me leva de volta à pergunta original: "como melhor mensurá-la"? Ainda estou consultando algumas respostas, obrigado.
Como realmente interpreto as informações acima?
Até agora, meu entendimento é:
`TEXT` is program instruction memory
`DATA` is variables (unitialised?) in program memory
`BSS` is variables occupying RAM
como o BSS é consideravelmente menor que 1024 bytes, por que o segundo funciona, mas o primeiro não? Se for, DATA+BSS
ambos ocupam mais de 1024.
reedição: editei a pergunta para incluir o código, mas agora a removi porque realmente não tinha nada a ver com o problema (exceto talvez práticas ruins de codificação, declarações de variáveis e similares). Você pode revisar o código revisando as edições, se realmente quiser vê-lo. Eu queria voltar à pergunta em questão, que era mais baseada em: Como medir o uso da RAM.
String
tipo em seus programas? Sabe-se que ele executa alocações e liberações de memória dinâmica freqüentes, o que pode fragmentar o heap até o ponto em que você não pode ficar com mais memória.
String
s por causa da sobrecarga. Estou feliz por trabalhar com matrizes de caracteres, isto é, quase sempre defino todas as minhas matrizes de caracteres com um tamanho fixo (no momento, tenho uma matriz de UM byte que não é apenas porque altero o comprimento do conteúdo para diferentes recompilações.