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:
- Create a project (without the startup file)
- Add a new assembly file (learn.s)
- Click
Build Target
.
Can anybody help?
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.
I Added this answer for newbies,
So, After create new project do same as picture:
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.