프로그램 디버깅시에 현재 할당되어있는 메모리상태를 확인하고자 할때 참조.
1. Build Analyzer 사용
Build Analyzer를 사용하면 현재 프로그램의 RAM & Flash 사용 공간 및 여분을 확인 할 수 있다.
추가적으로 Memory Details를 클릭하면 각 영역들의 주소와 크기를 확인 가능하다.
특히 문제가 발생하였을 때, registers 창의 SP와 heap_end를 비교하여 메모리가 Full 되었는지 여부를 확인 가능하다.
heap_end를 확인하는 방법은 다음과 같다.
heap의 마지막 주소를 확인하는 방법
우선 .ld에서 heap_end를 참조 가능하도록 변수 선언해준다.
/* User_heap_stack section, used to check that there is enough RAM left */
._user_heap_stack :
{
. = ALIGN(8);
PROVIDE ( end = . );
PROVIDE ( _end = . );
. = . + _Min_Heap_Size;
PROVIDE ( _heap_end = . ); /* 이곳에 옆과 같이 코드를 추가한다. */
. = . + _Min_Stack_Size;
. = ALIGN(8);
} >RAM
이후 _sbrk 함수를 사용하여 현재 heap_end의 주소를 확인한다.
extern char end; // Defined by the linker script
static char *heap_end;
char *_sbrk(int incr) {
char *prev_heap_end;
if (heap_end == 0) {
heap_end = &end;
}
prev_heap_end = heap_end;
heap_end += incr;
return prev_heap_end;
}
void checkHeapUsage() {
printf("Current heap end: %p\n", heap_end);
}
'SW 개발 공부 > STM32' 카테고리의 다른 글
[STM32] Vector Table & SP & PC (0) | 2025.02.28 |
---|---|
[Stm32 Project]BootLoader 구현 (3) | 2024.11.13 |
ISR 내부 루틴의 간소화 필요성 (0) | 2024.02.14 |
stm32에서 printf() 함수 사용하기 (0) | 2024.02.07 |
[stm32 chip 메모리구조#1] (0) | 2023.03.21 |