[fpc-devel] STM32F407 fun
Michael Ring
mail at michael-ring.org
Sat Mar 19 12:36:21 CET 2016
Are you sure about RAM? I checked in cpuinfo, it is set to 128MB, this
matches what is written in the user manual, (Page 70)
http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/DM00037051.pdf
or are the last 16k for some special use? Could not find a hint while
quickly searching through the manual.
Michael
Am 19.03.16 um 04:47 schrieb Andrew Haines:
> Hi,
>
> I've been trying to get a very simple program to run on my discovery
> board that I've had for a while(STM32F407VG). Using st-util with gdb I
> managed to make some progress.
>
> I've been using the code in fpc for STM32F429 since it's pretty
> similar. My first problem was that the stackpointer was too high. The
> STM32F407VG has 64kb less memory than the STM32F429. I added a define
> in compiler/arm/cpuinfo.pas with the correct info and had it use the
> STM32F429 unit. That fixed my first problem.
>
> The next/current problem is in CommonInit in system.
> SynchronizeTimeoutEvent:=RtlEventCreate;
>
> RtlEventCreate has:
> result:=currenttm.rtleventcreate();
> This produces the assembly:
> 0x8007e08 <SYSTEM_$$_RTLEVENTCREATE$$PRTLEVENT> push {lr}
> (gdb) i registers pc
> pc 0x8007e0a 0x8007e0a
> <SYSTEM_$$_RTLEVENTCREATE$$PRTLEVENT+2>
>
> 0x8007e0a <SYSTEM_$$_RTLEVENTCREATE$$PRTLEVENT+2> ldr r0, [pc,
> #8] ; (0x8007e14 <SYSTEM_$$_RTLEVENTCREATE$$PRTLEVENT+12>)
> (gdb) i registers r0
> r0 0x20001dc0 536878528 // the address 1dc0 seems
> reasonable. Location of currenttm+rtleventcreate?
>
> 0x8007e0c <SYSTEM_$$_RTLEVENTCREATE$$PRTLEVENT+4> ldr r0, [r0, #0]
> (gdb) i registers r0
> r0 0x0 0
>
> 0x8007e0e <SYSTEM_$$_RTLEVENTCREATE$$PRTLEVENT+6> blx r0
>
> For the last instruction r0 is nil. This causes the default interrupt
> handler to be called which loops forever.
>
> backtrace is:
> (gdb) bt
> #0 0x08007e0e in SYSTEM_$$_RTLEVENTCREATE$$PRTLEVENT ()
> #1 0x0800ce5e in CLASSES_$$_COMMONINIT ()
> #2 0x08012886 in CLASSES_$$_init ()
> #3 0x08007a5c in fpc_initializeunits ()
> #4 0x08000294 in main () at blinky.lpr:48
>
> I compiled the crosscompiler with:
> make clean buildbase CROSSINSTALL=1 CROSSOPT="-XParm-none-eabi-"
> OS_TARGET=embedded CPU_TARGET=arm SUBARCH=armv7em
>
> the program is compiled with
> -Oparmv7em
> -WpSTM32F407VG
>
> I'm guessing there is some define I have to use and everything will
> start working :)
>
> Where do I go from here?
>
> Thanks in advance,
>
> Andrew Haines
>
>
> _______________________________________________
> fpc-devel maillist - fpc-devel at lists.freepascal.org
> http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
More information about the fpc-devel
mailing list