error: L6236E: No section matches selector - no section to be FIRST/LAST

匿名 (未验证) 提交于 2019-12-03 01:34:02

问题:

I'm new to ARM programming using Keil Microvision V5.12 compiler. I can't compile a simple assembly project getting this error:

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

I've tried searching and couldn't find any solution for this problem.

This is what I do:

  1. Create a project (without the startup file)
  2. Add a new assembly file (learn.s)
  3. Click Build Target.

Can anybody help?

回答1:

There is no 'FIRST' object in your source code. Your scatter file likely looks something like:

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)   } } 

The _FIRST object that the linker wants to put into the image is the area called RESET. You do not have a RESET region in your code. Add something along the lines of

AREA    RESET, DATA, READONLY 

to your assembly file where you want execution to begin.

Create a project with the startup file and look for the AREA RESET ..... declaration and copy that.

For Cortex it looks like:

                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      

Each of those handlers needs to be declared, but you can just add the stack pointer and reset handler to get started.



回答2:

I Added this answer for newbies,
So, After create new project do same as picture:



回答3:

For ARM LPC the startup assembly file Startup.s is something like this:

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

Just replacing does the trick.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!