Cortex

    STM32 - BIN파일과 HEX 파일의 차이

    부트로더 펌웨어를 개발하기 위해 조사하던 도중, 실제 플래시 메모리에 실리는 펌웨어의 크기가 100KByte라고 했을 때 Bin 파일은 100Kbyte 온전한 크기를 지니고 있고, Hex 파일은 200Kbyte 정도를 지니고 있었다. HxD Editor을 통해 Byte Array을 확인한 결과 실제 플래시 메모리에 실리는 값들이 Bin 파일에 온전히 실려 있었고, Hex파일은 문자열 형식으로 무언가의 프로토콜을 지니고 있는 것 같았다. 확인 결과 Bin 파일은 플래시 메모리 주소 어디에 펌웨어가 실려야 하는지 관심 없이, 그냥 온전한 펌웨어 데이터를 갖고 있기 때문에 이를 사용하는 사용자가 메모리 주소번지 어디에 이를 실어야 하는지 관리해줘야 하고, Hex 파일은 프로토콜 자체 내에 메모리 특정 번지에 ..

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

    1차 해결 방법... 부트로더를 작성하던 도중 특정 플래시 메모리 번지로 점프만 하면 Hard fault가 발생하는 문제가 발생했다. 디버거를 통해 한줄 한줄 확인하다 보니, HAL_RCC_DeInit() 함수에서 weak symbol을 지닌 함수가 호출되는 것을 발견, 실제 strong symbol의 함수가 선언되어 있는데도 말이다. 아마 링커가 여러개의 함수를 체크하고 그 중에 우선순위가 높은 함수를 선택해야 하는데, 처음 발견된 함수 1개만 체크한 것 같다. https://mcuoneclipse.com/2013/10/16/link-order-using-multiple-definitions-with-arm-gnu-linker-and-eclipse/ -z muldefs 옵션을 Linker other f..

    STM32F4 SPI Communication

    STM32F4 SPI 초기화 함수 void SPI0_Init(void) { SPI_InitTypeDef SPI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1); GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1); GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1); GPIO_Init..