Cortex

STM32 - 함수 호출, weak symbol 속성이 동작하지 않는 문제 해결 방법

1차 해결 방법...

 

부트로더를 작성하던 도중 특정 플래시 메모리 번지로 점프만 하면 Hard fault가 발생하는 문제가 발생했다.

디버거를 통해 한줄 한줄 확인하다 보니, HAL_RCC_DeInit() 함수에서 weak symbol을 지닌 함수가 호출되는 것을 발견, 실제 strong symbol의 함수가 선언되어 있는데도 말이다.

 

아마 링커가 여러개의 함수를 체크하고 그 중에 우선순위가 높은 함수를 선택해야 하는데, 처음 발견된 함수 1개만 체크한 것 같다.

 

  • 같은 symbol을 여러개 정의하는 것을 허용해주는 옵션 ( 아마 이를 통해서 링커가 모든 정의를 확인하고 strong symbol을 선택 해주는 것 같음 )

 

2차 해결 방법

 

 > 1차 해결 방법을 통해 잠깐 되는 듯 했으나.. 다시 안되는 현상 발견.. 이유를 찾아보니 *.a 아카이브 파일을 라이브러리로 사용 중이였는데, 라이브러리 파일 내에서 이 현상을 해결하는게 복잡하다고 하더라.. 임시로 아카이브 파일 안쓰고 소스코드를 모두 연결해서 해결.

 

'Cortex' 카테고리의 다른 글

STM32 - BIN파일과 HEX 파일의 차이  (0) 2021.06.01
STM32F4 SPI Communication  (0) 2014.06.05