지금 TM4C1231H6PZ 용 펌웨어를 작성하고 있습니다. 얼마 전에 IDE와 toolchain을 설정하는데 도움을주었습니다. 이것은 내 프로젝트를위한 깔끔하고 작동 가능한 바이너리를 ~ 8 kB 크기로 생성하는 데 도움이되었습니다. 그 후, 나는 같은 디렉터리에서 다른 프로젝트로 옮겨 갔다. (같은 디렉토리에서 전체 프로젝트 디렉터리를 복원했다.) 이진 520Mb를 생성하는데, 이는 분명히 잘못되었다.ARM 용 Eclipse 및 Codesourcery가 매우 큰 바이너리를 생성합니다.
새로운 바이너리를 살펴보면 00000000에서 0000079b까지의 코드가 있고 그 다음에는 NULL 만 있고 20000000에서 2000002b까지의 코드가 있다는 것을 알 수 있습니다. 나는 그것이 SRAM을위한 몇 가지 코드가되어야한다고 생각하지만, 나는 그것으로 무엇을 해야할지 모른다. 20000000에서 시작하는 코드를 삭제하려고했지만 결과 바이너리가 MCU에서 작동하지 않습니다.
누가 제 IDE + toolchain을 복구하여 이전과 같이 정상적인 바이너리를 생성하도록 도울 수 있습니까?
Eclipse Toolbox (ARM-2013.11-24-arm-none-eabi.exe 설치 프로그램) 용 Eclipse Kepler 2.0.2, Codesourcery Lite 및 TivaWare (SW-TM4C-2.1.0.12573.exe)를 사용합니다.
MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 16K
SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 32K
}
SECTIONS
{
.text :
{
_text = .;
KEEP(*(.isr_vector))
*(.text*)
*(.rodata)
*(.rodata*)
_etext = .;
} > FLASH
/* C++ initialization and finalization data */
.preinit_array :
{
PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP (*(.preinit_array*))
PROVIDE_HIDDEN (__preinit_array_end = .);
} >FLASH
.init_array :
{
PROVIDE_HIDDEN (__init_array_start = .);
KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array*))
PROVIDE_HIDDEN (__init_array_end = .);
} >FLASH
.fini_array :
{
PROVIDE_HIDDEN (__fini_array_start = .);
KEEP (*(.fini_array*))
KEEP (*(SORT(.fini_array.*)))
PROVIDE_HIDDEN (__fini_array_end = .);
} >FLASH
.data : AT(ADDR(.text) + SIZEOF(.text) + SIZEOF(.preinit_array) + SIZEOF(.init_array) + SIZEOF(.fini_array))
{
. = ALIGN(4);
_data = .;
*(.data)
*(.data*)
. = ALIGN(4);
_edata = .;
} > SRAM
. = ALIGN(4);
.bss :
{
_bss = .;
*(.bss*)
*(COMMON)
. = ALIGN(4);
_ebss = .;
} > SRAM
}
지도 파일을 생성하고 주소 0000000의 기호가 무엇인지 확인하십시오. '외계인'섹션이나 알 수없는 오브젝트 파일을 도입했습니다. 링커 파일에 이전에 절대 오브젝트 경로가있을 수 있습니다. –
링커 스크립트 파일을 보여주십시오. –
바이너리 형식의 파일을 만들었습니다. elf를 사용하는 대신 크기가 0x20000000 바이트 인 파일과 예상되는 결과를 조금 더한 것입니다. 이진 이미지로 작성하지 말고 elf 나 coff 또는 intel hex 또는 srec 등으로 작성하십시오. –