错误:L6236E:没有部分匹配选择器 - 没有部分是第一个/最后一个

时间:2014-11-22 09:15:29

标签: arm keil

我是使用ARM编译器进行Keil Microvision V5.12编程的新手。 我无法编译一个简单的汇编项目来获取此错误:

.\Objects\learn.sct(7): error: L6236E: No section matches selector - no section to be FIRST/LAST.

我尝试过搜索,找不到解决此问题的方法。

这就是我的所作所为:

  1. 创建项目(不带启动文件)
  2. 添加新的程序集文件(learn.s)
  3. 点击Build Target
  4. 有人可以帮忙吗?

4 个答案:

答案 0 :(得分:11)

我为新手添加了这个答案,
因此,创建新项目后,请执行与图片相同的操作:

enter image description here

答案 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)就可以解决