[fpc-devel] Code generated for the embedded arm port for lpc1768 (armv7m)
Sietse Achterop
s.achterop at rug.nl
Thu Oct 23 20:15:54 CEST 2014
Hello,
I am trying to get the embedded version of fpc for arm to work.
Currently i try it for the lpc1768 from NXP using the lpcxpresso board.
The example compiles, but doesn't run on the target...
I created a simple example and it seems that the code it generates is NOT thumb2 code.
I disassembled the elf-file generated by fpc using "arm-none-eabi-objdump -S"
I also disassembled it using the debugger "arm-none-eabi-gdb"
Here is a fragment of the code from both:
From objdump:
000001c4 <FPC_INITIALIZEUNITS>:
1c4: e92d4070 push {r4, r5, r6, lr}
1c8: ebfffff5 bl 1a4 <SYSTEM_$$_FPC_CPUINIT>
1cc: e59f006c ldr r0, [pc, #108] ; 240 <FPC_INITIALIZEUNITS+0x7c>
1d0: e5904000 ldr r4, [r0]
1d4: e3a05001 mov r5, #1
1d8: e1540005 cmp r4, r5
1dc: ba00000f blt 220 <FPC_INITIALIZEUNITS+0x5c>
From gdb
0x000001c4 <fpc_initializeunits+0>: 70 40 eors r0, r6
0x000001c6 <fpc_initializeunits+2>: 2d e9 f5 ff stmdb sp!, {r0, r2, r4, r5, r6, r7, r8, r9, r10, r11, r12, sp, lr, pc}
=> 0x000001ca <fpc_initializeunits+6>: ff eb 6c 00 ; <UNDEFINED> instruction: 0xebff006c
0x000001ce <fpc_initializeunits+10>: 9f e5 b.n 0xfffffd10
0x000001d0 <fpc_initializeunits+12>: 00 40 ands r0, r0
0x000001d2 <fpc_initializeunits+14>: 90 e5 b.n 0xfffffcf6
0x000001d4 <fpc_initializeunits+16>: 01 50 str r1, [r0, r0]
0x000001d6 <fpc_initializeunits+18>: a0 e3 b.n 0x91a
0x000001d8 <fpc_initializeunits+20>: 05 00 movs r5, r0
0x000001da <fpc_initializeunits+22>: 54 e1 b.n 0x486
0x000001dc <fpc_initializeunits+24>: 0f 00 movs r7, r1
Note how the interpretation of the code is different, as is the length of most instructions.
It looks to me as if the code in the elf-file are (mostly) 32-bit values, while the debugger does interpret thee code as thumb2 (i think).
In the Makefile in rtl/embedded I find:
ifeq ($(SUBARCH),armv7m)
CPU_UNITS=lm3fury lm3tempest stm32f10x_ld stm32f10x_md stm32f10x_hd stm32f10x_xl stm32f10x_conn stm32f10x_cl lpc13xx lpc1768 lm4f120 xmc4500 cortexm3 cortexm4 # thumb2_bare
endif
So that suggest (via the comment) that fpc can do thumb2 code, which it should for cortexm3.
My PC is debian/jessie/64bit: Free Pascal Compiler version 2.6.4+dfsg-3 [2014/07/12] for x86_64
I got the sourcecode for the port from svn as described on the website.
To create the port I do:
make clean buildbase installbase CROSSINSTALL=1 OS_TARGET=embedded CPU_TARGET=arm SUBARCH=armv7m BINUTILSPREFIX=arm-none-eabi-
For the binutils I use the (current) stuff for the lpc1768 from NXP: lpcxpresso_7.4.0_229
To create a program I do:
ppcrossarm -Ch1024 -Cs1024 -Tembedded -Parm -Cparmv7m -XParm-none-eabi- -Wplpc1768 -vu prog.p
Is there anybody that did get this port to work?
Thanks in advance,
Sietse
More information about the fpc-devel
mailing list