내가 알 수있는 한, 프로젝트에서 사용중인 RAM의 양을 알고 싶습니다. 실제로 직접 계산하고 계산하는 것 외에는 실제로 해결할 수있는 방법이 없습니다. 나는 RAM이 부족하다고 판단한 다소 큰 프로젝트의 무대에 도달했습니다.
섹션을 추가 할 수 있고 명백한 이유없이 코드의 다른 곳에서 느슨해지기 때문에 이것을 결정했습니다 . #ifndef
다른 것이 있으면 다시 작동합니다. 새 코드에는 프로그래밍 방식으로 문제가 없습니다.
사용 가능한 RAM이 끝날 것으로 의심되었습니다. 너무 많은 스택을 사용하고 있다고 생각하지 않습니다 (가능하더라도) 실제로 사용중인 RAM의 양을 결정하는 가장 좋은 방법은 무엇입니까?
통과하고 그것을 해결하려고 노력하면서 열거 형과 구조체에 도달 할 때 문제가 있습니다. 메모리 비용은 얼마입니까?
첫 번째 편집 : 또한 시작한 이후 스케치를 너무 많이 편집했습니다. 이것은 처음에 얻은 실제 결과는 아니지만 지금 얻는 결과입니다.
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
첫 번째 줄 (텍스트 17554 포함)이 작동하지 않았으며, 많은 편집 후 두 번째 줄 (텍스트 16316 포함)이 정상적으로 작동합니다.
편집 : 세 번째 줄에는 모든 작업, 직렬 판독, 새로운 기능 등이 있습니다. 본질적으로 일부 전역 변수와 중복 코드를 제거했습니다. 이 코드는 sae 당이 코드가 아니기 때문에 RAM 사용과 관련이 있기 때문에 이것을 언급합니다. 원래 질문으로 돌아가서 "최선의 측정 방법"으로 돌아가서 여전히 몇 가지 답변을 확인하고 있습니다. 감사합니다.
위의 정보를 실제로 어떻게 해석합니까?
지금까지 내 이해는 :
`TEXT` is program instruction memory
`DATA` is variables (unitialised?) in program memory
`BSS` is variables occupying RAM
BSS가 1024 바이트보다 적기 때문에 두 번째는 왜 작동하지만 첫 번째는 그렇지 않습니까? 그렇다면 DATA+BSS
둘 다 1024 이상을 차지합니다.
다시 편집 : 코드를 포함하도록 질문을 편집했지만 문제와 실제로 관련이 없기 때문에 코드를 제거했습니다 (잘못된 코딩 방법, 변수 선언 등). 당신은 당신이 경우 편집을 통해 다시보고 코드를 검토 할 수 있습니다 정말 그것을보고 싶어요. 나는 RAM 문제를 측정하는 방법에 대한 더 기반을 둔 당면한 질문으로 돌아가고 싶었습니다.
String
은 당신의 프로그램에서 타입 을 사용 합니까? 이것은 빈번한 동적 메모리 할당 및 릴리스를 수행하는 것으로 알려져 있으며, 이로 인해 힙이 남지 않은 지점으로 힙이 조각화 될 수 있습니다.
String
오버 헤드로 인해 s 에서 멀리 떨어져 있습니다 . 나는 char 배열로 작업하는 것을 기쁘게 생각합니다. 거의 모든 char 배열을 고정 된 크기로 정의합니다 (현재는 다른 재 컴파일을 위해 컨텐츠 길이를 변경하기 때문에 순전히 ONE 바이트 배열을 갖습니다)