[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