我是使用ARM
编译器进行Keil Microvision V5.12
编程的新手。
我无法编译一个简单的汇编项目来获取此错误:
.\Objects\learn.sct(7): error: L6236E: No section matches selector - no section to be FIRST/LAST.
我尝试过搜索,找不到解决此问题的方法。
这就是我的所作所为:
Build Target
。有人可以帮忙吗?
答案 0 :(得分:11)
答案 1 :(得分:6)
没有' 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)
}
}
链接器想要放入图像的_FIRST对象是名为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
需要声明每个处理程序,但您只需添加堆栈指针和重置处理程序即可开始。
答案 2 :(得分:2)
对于ARM LPC,启动程序集文件Startup.s是这样的:
AREA MyStacks,DATA,NOINIT,ALIGN = 2
IrqStackSpace SPACE IRQ_STACK_LEGTH * 4
FiqStackSpace SPACE FIQ_STACK_LEGTH * 4
AbtStackSpace SPACE ABT_STACK_LEGTH * 4
UndtStackSpace SPACE UND_STACK_LEGTH * 4
AREA RESET, DATA, READONLY
bottom_of_heap SPACE 1
AREA RESET, DATA, READONLY
StackUsr SPACE 1
只需更换即可。
答案 3 :(得分:0)
如果您在cubeMX 的时钟配置中选择HSI,尽管您已经在RCC 中选择了HSE,则会发生此错误。如果你选择其中之一(HSI/HSE)就可以解决