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

Jav*_*vid 5 arm keil

我是ARM使用Keil Microvision V5.12编译器编程的新手.我无法编译一个简单的程序集项目得到此错误:

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

我试过搜索,找不到任何解决这个问题的方法.

这就是我做的:

  1. 创建一个项目(没有启动文件)
  2. 添加新的程序集文件(learn.s)
  3. 点击Build Target.

有人可以帮忙吗?

Pro*_*ell 14

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

在此输入图像描述


小智 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)
  }
}
Run Code Online (Sandbox Code Playgroud)

链接器想要放入图像的_FIRST对象是名为RESET的区域.您的代码中没有RESET区域.添加一些东西

AREA    RESET, DATA, READONLY
Run Code Online (Sandbox Code Playgroud)

到您希望执行开始的汇编文件.

使用启动文件创建一个项目,然后查找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     
Run Code Online (Sandbox Code Playgroud)

需要声明每个处理程序,但您可以添加堆栈指针和重置处理程序以开始.