본문 바로가기

SW 개발 공부/STM32

[stm32 chip 메모리구조#2] 메모리 디버깅 방법

 

프로그램 디버깅시에 현재 할당되어있는 메모리상태를 확인하고자 할때 참조.

 

1. Build Analyzer 사용

 

stm32cubeide 의 build Analyzer

 

Build Analyzer를 사용하면 현재 프로그램의 RAM & Flash 사용 공간 및 여분을 확인 할 수 있다.

추가적으로 Memory Details를 클릭하면 각 영역들의 주소와 크기를 확인 가능하다.

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