我现在正在为 TM4C1231H6PZ 编写固件。前段时间,我被帮助设置 IDE 和工具链,它们为我的项目生成整洁且工作的二进制文件,大约 8 kB 大。之后,我做了一些目录移动等等,现在同一个 IDE,使用同一个项目(我已经从存档中恢复了整个项目目录)生成了 520 Mb 大的二进制文件,这显然是错误的。
查看新的二进制文件,我看到有从 00000000 到 0000079b 的代码,之后只有 NULL,然后是从 20000000 到 2000002b 的一些代码。我相信它必须是一些用于 SRAM 的代码,但我不知道如何处理它。我试图从 20000000 开始删除代码,但生成的二进制文件在 MCU 上不起作用。
有人可以帮我修复我的 IDE+工具链以像以前一样生成正常的二进制文件吗?
我使用 Eclipse Kepler 2.0.2、用于 ARM 工具链的 Codesourcery Lite(arm-2013.11-24-arm-none-eabi.exe 安装程序)和 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
}