您的源代码中没有“FIRST”对象。您的分散文件可能如下所示:
LR_IROM1 0x08000000 0x00040000 { ; load region size_region
ER_IROM1 0x08000000 0x00040000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x0000A000 { ; RW data
.ANY (+RW +ZI)
}
}
链接器想要放到映像中的第一个对象是被称为 RESET 的区域。你的代码中没有 RESET 区域。
请添加类似于下面的内容:
AREA RESET, DATA, READONLY
将执行起始点指向您的汇编文件。
创建一个带有启动文件的项目,并查找AREA RESET.....声明并复制它。
对于Cortex,它看起来像:
AREA RESET, DATA, READONLY
EXPORT __Vectors
EXPORT __Vectors_End
EXPORT __Vectors_Size
__Vectors DCD __initial_sp ; Top of Stack
DCD Reset_Handler ; Reset Handler
DCD NMI_Handler ; NMI Handler
DCD HardFault_Handler ; Hard Fault Handler
DCD MemManage_Handler ; MPU Fault Handler
DCD BusFault_Handler ; Bus Fault Handler
DCD UsageFault_Handler ; Usage Fault Handler
DCD 0
每个处理程序都需要声明,但你可以只添加堆栈指针和重置处理程序就可以开始了。