Re: [fpc-pascal] ARM CMSIS support

2016-01-09 Thread Michael Ring

Chiming in ;-)

There are two more options:

https://github.com/yunkot/pxl

There are units available for higher level access to STM32F4, Teensy and 
some Freescale Devices. Very usable for devices that have >64k of Flash, 
a number of displays and sensors are supported out of the box.


When your board has Arduino compatible headers the code is very portable 
between the different devices.


https://github.com/yunkot/pxl/tree/PXL-cleanups

As there are some limitations with classes and memory usage in 
FreePascal there's a work-in-progress alternative available named MBF 
that uses record helpers.


Syntax and usage is 99% the same as with the PXL Library mentioned above 
but the memory footprint is much lower (typically 6-8k of flash for 
simple apps). Teensy/Freescale code is already there, I have not yet 
committed the STM32 and LPC8xx code as I wanted to commit them when they 
both on same feature level as the existing code. Also more examples will 
come with the new commit.


If you are interested in testing let me know...

Michael

Am 09.01.16 um 00:55 schrieb Jeppe Johansen:

Yes, you understand it correctly :)
The FPC RTL only exposes the hardware, not the firmware stack on top.

It might not be documented well anywhere but the weak linking with set 
defaults basically means you can declare interrupt handlers like this:


procedure MySystickHandler; [public, alias: 'SysTick_interrupt'];
begin
   // Code
end;

For STM32 there's the stm32f103fw file on my site. There's also a 
version on Anton Rieckert's github page which is split up a bit nicer. 
Not sure what the status or compatibility is.
Otherwise I can plug my project of converting the STM32F7 codebase 
here: https://github.com/Laksen/fp-stm32f7xx_hal


If anyone other know of any nice embedded projects/links be sure to 
chime in :)


I know some people have been working with Silicon Labs and Freescale 
codebases too. So there's a lot going on around.


Best Regards,
Jeppe

On 01/08/2016 11:58 PM, Marc Santhoff wrote:

Answering myself here:

On Fr, 2016-01-08 at 23:43 +0100, Marc Santhoff wrote:

On Fr, 2016-01-08 at 23:23 +0100, Jeppe Johansen wrote:
CMSIS is a lot of things. What exact part of it are you asking 
about here?

In that file for example from line 887 on:

http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/rtl/embedded/arm/stm32f407xx.pp?revision=32386&view=markup 



there are lots of 'external'ly declared procedures. Where can I find
them?

Hmm, that's only a list of interrupt procedures. After the declaration
there are some assembler seetings to have default values - OK, now I
think I understand. It's up to the user to let them be set to default or
redefine and implement the IRQ procedure.

FPC's embedded target has a bunch of controller units that are 
pulled in
depending on the -Wp argument. These define exactly what you see in 
the
units in the rtl/embedded/arm directory. In most cases just the 
physical
registers, the interrupt vectors(and sometimes the IRQ levels), and 
some
startup code. The mapping between the files and the controller 
names can

be seen in the huge table in compiler/arm/cpuinfo.pas.

Have seen that, the wiki explains it.

There are no object or source files for other parts of CMSIS, so 
things

like the CMSIS-DSP and all cortex-m intrinsics don't work right now.

The cortexm3 and cortexm4 units that you can include in your uses 
clause

will model some of the missing functionality but very far from all.

Your older implementation of STM32F103 found on your website has
declarations and implementations of the most important parts. The "new
style" sources included in fpc/rtl haven't. Or at least I can't find
them.

No, it hasn't. I have read too many source files today. So there is only
the declaration stuff for accessing the internals of the SoC, timers,
peripherals and the like, OK.

Marc


Floating point support is very untested. Most of it should work, but
there might be some bugs. You can enable it by compiling your RTL and
application with -CfFPv4_S16. If you decide to test it please write on
the bugtracker if you run into problems.

I think I'll have to wait a while, that not the right toy for starting
up. ;)

Thanks a lot!
Marc


Best Regards,
Jeppe

On 01/08/2016 10:58 PM, Marc Santhoff wrote:

Hi,

looking at the embedded source code there has been done a lot of 
work.

I'm interested in trying fpc on Cortex-M3 and M4, mostly from ST.

While trying to get an overview of the sources I found the 
declarations
are pulled into a processor specific file by external 
declarations. But
where does it come from, does the linker pull in the cmsis object 
files

or something?

If so, how? There has to be a pointer to those files I couldn't find
either.

Second question is:
Does the embedded target support hard floting point on STM32F4?

TIA,
Marc


___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/f

Re: [fpc-pascal] ARM CMSIS support

2016-01-09 Thread Marc Santhoff
On Sa, 2016-01-09 at 00:55 +0100, Jeppe Johansen wrote:
> Yes, you understand it correctly :)
> The FPC RTL only exposes the hardware, not the firmware stack on top.
> 
> It might not be documented well anywhere but the weak linking with set 
> defaults basically means you can declare interrupt handlers like this:
> 
> procedure MySystickHandler; [public, alias: 'SysTick_interrupt'];
> begin
> // Code
> end;

I see. And there is no example in your testing code for stmf103fx.pas.

Since this should be documented somewhere:
Is that working for all embedded controller types? It should, the
declarations look pretty much the same.

I'm willing to collect some informations for starters and make a wiki
page out of it, but I'll have to ask a lot of questions first. ;)

On the wiki there is a lot of stuff, but what is missing a bit is a
general getting started page for newbies.

> For STM32 there's the stm32f103fw file on my site. There's also a 
> version on Anton Rieckert's github page which is split up a bit nicer. 
> Not sure what the status or compatibility is.
> Otherwise I can plug my project of converting the STM32F7 codebase here: 
> https://github.com/Laksen/fp-stm32f7xx_hal

My current targets are a f4-discovery board and maybe some simple f103
controllers not choosen yet. Besides that AVR would be nice to have.
When that works maybe I'll be trying some SAM7S64 or S256 boards, too.
In principle all of them would be handled identically, besides their
intergrated peripherals.

So again:
The process of getting started would be the same on every simple
controller? Simple means having no OS, only bare silicon.

What I know is:
- get biunutils
- build cross compiler
But that's all. Mostly simple testing programs are given, but not many
explanations on declaring IRQ-handlers, loading up a binary, etc.

I like the technique of generating linker script and having memory
address specifications and more build in the compiler. When using C and
fiddling with Makefiles, linker scripts, not working code and so on can
be very frustrating. And I like Pacal. ;)

What tools do you use to load the binary up to the embedded target?

Marc


> If anyone other know of any nice embedded projects/links be sure to 
> chime in :)
> 
> I know some people have been working with Silicon Labs and Freescale 
> codebases too. So there's a lot going on around.
> 
> Best Regards,
> Jeppe
> 
> On 01/08/2016 11:58 PM, Marc Santhoff wrote:
> > Answering myself here:
> >
> > On Fr, 2016-01-08 at 23:43 +0100, Marc Santhoff wrote:
> >> On Fr, 2016-01-08 at 23:23 +0100, Jeppe Johansen wrote:
> >>> CMSIS is a lot of things. What exact part of it are you asking about here?
> >> In that file for example from line 887 on:
> >>
> >> http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/rtl/embedded/arm/stm32f407xx.pp?revision=32386&view=markup
> >>
> >> there are lots of 'external'ly declared procedures. Where can I find
> >> them?
> > Hmm, that's only a list of interrupt procedures. After the declaration
> > there are some assembler seetings to have default values - OK, now I
> > think I understand. It's up to the user to let them be set to default or
> > redefine and implement the IRQ procedure.
> >
> >>> FPC's embedded target has a bunch of controller units that are pulled in
> >>> depending on the -Wp argument. These define exactly what you see in the
> >>> units in the rtl/embedded/arm directory. In most cases just the physical
> >>> registers, the interrupt vectors(and sometimes the IRQ levels), and some
> >>> startup code. The mapping between the files and the controller names can
> >>> be seen in the huge table in compiler/arm/cpuinfo.pas.
> >> Have seen that, the wiki explains it.
> >>
> >>> There are no object or source files for other parts of CMSIS, so things
> >>> like the CMSIS-DSP and all cortex-m intrinsics don't work right now.
> >>>
> >>> The cortexm3 and cortexm4 units that you can include in your uses clause
> >>> will model some of the missing functionality but very far from all.
> >> Your older implementation of STM32F103 found on your website has
> >> declarations and implementations of the most important parts. The "new
> >> style" sources included in fpc/rtl haven't. Or at least I can't find
> >> them.
> > No, it hasn't. I have read too many source files today. So there is only
> > the declaration stuff for accessing the internals of the SoC, timers,
> > peripherals and the like, OK.
> >
> > Marc
> >
> >>> Floating point support is very untested. Most of it should work, but
> >>> there might be some bugs. You can enable it by compiling your RTL and
> >>> application with -CfFPv4_S16. If you decide to test it please write on
> >>> the bugtracker if you run into problems.
> >> I think I'll have to wait a while, that not the right toy for starting
> >> up. ;)
> >>
> >> Thanks a lot!
> >> Marc
> >>
> >>> Best Regards,
> >>> Jeppe
> >>>
> >>> On 01/08/2016 10:58 PM, Marc Santhoff wrote:
>  Hi,
> 
>  looking at the embe

[fpc-pascal] Strange file

2016-01-09 Thread Ched

Hello All,

Each time I use fp (text mode ide) under linux or win-xp (3.0 and 2.6.4), there appears a new emtpy file 
in the directory: dummy.$$$ .


Apparently it's safe to remove it even when fp is running. But what's its use ?

Season's greeting, Ched'
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] ARM CMSIS support

2016-01-09 Thread Michael Ring
Currently there is no support for embedded targets in the Lazarus 
Debugger so you will need to load/debug your code with the help of other 
tools.


For the Discovery board the easiest way to deploy binaries and to debug 
is to install openocd:


openocd -f board/stm32f4discovery.cfg

should connect you to the board, you can then use gdb (or cgdb or ddd) 
to upload and debug your code:


arm-none-eabi-gdb $BIN --eval-command="target extended :" 
--eval-command="set gdb_memory_map disable" --eval-command="monitor 
halt" --eval-command="set mem inaccessible-by-default off" 
--eval-command="load"


When you want to get a little more serious with the embedded target I'd 
highly recommend to buy a Segger J-Link Edu for about $50, it has 
support for almost any embedded controller on the market, for openocd 
the selection is a little more limited.


But the main advantage is that it comes with a very good gui based 
debugger, the JLinkDebugger allows you to load CMSIS svd files to 
directly browse all controller registers and it makes the whole 
debugging process a lot more convenient.


By the way, with fpc trunc compiler you can target your board directly:

ppcrossarm  -WpDISCOVERYF407VG (see ppcrossarm -i for other Discovery 
boards)


You should also refrain from using optimizations > -O1 as there are some 
issues with the compiler that make your compiled binary unusable.


Michael

Am 09.01.16 um 13:42 schrieb Marc Santhoff:

On Sa, 2016-01-09 at 00:55 +0100, Jeppe Johansen wrote:

Yes, you understand it correctly :)
The FPC RTL only exposes the hardware, not the firmware stack on top.

It might not be documented well anywhere but the weak linking with set
defaults basically means you can declare interrupt handlers like this:

procedure MySystickHandler; [public, alias: 'SysTick_interrupt'];
begin
 // Code
end;

I see. And there is no example in your testing code for stmf103fx.pas.

Since this should be documented somewhere:
Is that working for all embedded controller types? It should, the
declarations look pretty much the same.

I'm willing to collect some informations for starters and make a wiki
page out of it, but I'll have to ask a lot of questions first. ;)

On the wiki there is a lot of stuff, but what is missing a bit is a
general getting started page for newbies.


For STM32 there's the stm32f103fw file on my site. There's also a
version on Anton Rieckert's github page which is split up a bit nicer.
Not sure what the status or compatibility is.
Otherwise I can plug my project of converting the STM32F7 codebase here:
https://github.com/Laksen/fp-stm32f7xx_hal

My current targets are a f4-discovery board and maybe some simple f103
controllers not choosen yet. Besides that AVR would be nice to have.
When that works maybe I'll be trying some SAM7S64 or S256 boards, too.
In principle all of them would be handled identically, besides their
intergrated peripherals.

So again:
The process of getting started would be the same on every simple
controller? Simple means having no OS, only bare silicon.

What I know is:
- get biunutils
- build cross compiler
But that's all. Mostly simple testing programs are given, but not many
explanations on declaring IRQ-handlers, loading up a binary, etc.

I like the technique of generating linker script and having memory
address specifications and more build in the compiler. When using C and
fiddling with Makefiles, linker scripts, not working code and so on can
be very frustrating. And I like Pacal. ;)

What tools do you use to load the binary up to the embedded target?

Marc



If anyone other know of any nice embedded projects/links be sure to
chime in :)

I know some people have been working with Silicon Labs and Freescale
codebases too. So there's a lot going on around.

Best Regards,
Jeppe

On 01/08/2016 11:58 PM, Marc Santhoff wrote:

Answering myself here:

On Fr, 2016-01-08 at 23:43 +0100, Marc Santhoff wrote:

On Fr, 2016-01-08 at 23:23 +0100, Jeppe Johansen wrote:

CMSIS is a lot of things. What exact part of it are you asking about here?

In that file for example from line 887 on:

http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/rtl/embedded/arm/stm32f407xx.pp?revision=32386&view=markup

there are lots of 'external'ly declared procedures. Where can I find
them?

Hmm, that's only a list of interrupt procedures. After the declaration
there are some assembler seetings to have default values - OK, now I
think I understand. It's up to the user to let them be set to default or
redefine and implement the IRQ procedure.


FPC's embedded target has a bunch of controller units that are pulled in
depending on the -Wp argument. These define exactly what you see in the
units in the rtl/embedded/arm directory. In most cases just the physical
registers, the interrupt vectors(and sometimes the IRQ levels), and some
startup code. The mapping between the files and the controller names can
be seen in the huge table in compiler/arm/cpuinfo.pas.

Have seen that, the wiki

[fpc-pascal] Constructor question

2016-01-09 Thread Bart
Hi,

Is this legal Pascal?

uses
  classes,sysutils;

type
  { TA }
  TA = class
protected
F1: Integer;
F2: Integer;
public
constructor Create; virtual;
  end;
  { TB }
  TB = Class(TA)
constructor Create; override;
  end;

{ TB }
constructor TB.Create;
begin
  writeln('TB.Create');
  F1 := 1;// am I allowed to access F1 before calling
inherited Create?
  F2 := 2;
  inherited Create;
end;
{ TA }
constructor TA.Create;
begin
  writeln('TA.Create: F1 = ',F1,' F2 = ',F2);
end;


var
  A,B: TA;
begin
  A := nil;
  B := nil;
  try
try
  A := TA.Create;
  B := TB.Create;
except
  on E: Exception do writeln(E.ClassName,': ',E.Message)
end;
  finally
if Assigned(A) then A.Free;
if Assigned(B) then B.Free;
  end;
end.


Q: am I allowed to access a property/field of TA in the constructor of
TB before calling inherited Create there?

It compiles and it ouputs:
TA.Create: F1 = 0 F2 = 0
TB.Create
TA.Create: F1 = 1 F2 = 2

This is what I intended, but is it legal, or does it just work by chance?

Bart
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


[fpc-pascal] building arm cross compiler on FreeBSD

2016-01-09 Thread Marc Santhoff
Hi,

I'm stuck while trying to build a cross compiler for ARM on FreeBSD. The
compiler does not know any arm target. FreeBSD is running on some arm
platforms (e.g. beagleboard), but it seems the combination is not
implemented in fpc.

Is that correct?

How can I build a build a cross compiler running on FreeBSD compiling
for ARM?

TIA,
Marc

-- 
Marc Santhoff 

___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] building arm cross compiler on FreeBSD

2016-01-09 Thread Jonas Maebe

On 09/01/16 23:27, Marc Santhoff wrote:

I'm stuck while trying to build a cross compiler for ARM on FreeBSD. The
compiler does not know any arm target.


The compiler always only knows all targets for a single architecture. 
Unless you have a native ARM or a cross-compiler for ARM, it's normal 
that it doesn't know any ARM targets (just like a native ARM or 
cross-compiler for ARM doesn't know any non-ARM targets).



FreeBSD is running on some arm
platforms (e.g. beagleboard), but it seems the combination is not
implemented in fpc.

Is that correct?


Yes.


How can I build a build a cross compiler running on FreeBSD compiling
for ARM?


Try adding OS_TARGET=embedded to your "make all CPU_TARGET=arm" 
invocation in the top level directory (assuming you've set up your 
environment for cross-compiling to embedded).



Jonas
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Constructor question

2016-01-09 Thread Mattias Gaertner
On Sat, 9 Jan 2016 21:46:19 +0100
Bart  wrote:

> Hi,
> 
> Is this legal Pascal?
> 
> uses
>   classes,sysutils;
> 
> type
>   { TA }
>   TA = class
> protected
> F1: Integer;
> F2: Integer;
> public
> constructor Create; virtual;
>   end;
>   { TB }
>   TB = Class(TA)
> constructor Create; override;
>   end;
> 
> { TB }
> constructor TB.Create;
> begin
>   writeln('TB.Create');
>   F1 := 1;// am I allowed to access F1 before calling
> inherited Create?

Yes.

>   F2 := 2;
>   inherited Create;
> end;
> { TA }
> constructor TA.Create;
> begin
>   writeln('TA.Create: F1 = ',F1,' F2 = ',F2);
> end;
> 
> 
> var
>   A,B: TA;
> begin
>   A := nil;
>   B := nil;
>   try
> try
>   A := TA.Create;
>   B := TB.Create;
> except
>   on E: Exception do writeln(E.ClassName,': ',E.Message)
> end;
>   finally
> if Assigned(A) then A.Free;
> if Assigned(B) then B.Free;
>   end;
> end.
> 
> 
> Q: am I allowed to access a property/field of TA in the constructor of
> TB before calling inherited Create there?

Yes.

 
> It compiles and it ouputs:
> TA.Create: F1 = 0 F2 = 0
> TB.Create
> TA.Create: F1 = 1 F2 = 2
> 
> This is what I intended, but is it legal, or does it just work by chance?

It works by design.

Mattias
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] building arm cross compiler on FreeBSD

2016-01-09 Thread Marc Santhoff
On Sa, 2016-01-09 at 23:44 +0100, Jonas Maebe wrote:
> OS_TARGET=embedded

No, doesn'r do. The error message talks about the assemble, maybe it is
the binuitls variant installed?

gmake[3]: Entering directory 
`/usr/p1/home/marc/program/fpc-cross/src/fpc/rtl/embedded'
/usr/local/bin/gmkdir -p 
/usr/p1/home/marc/program/fpc-cross/src/fpc/rtl/units/arm-embedded
/usr/p1/home/marc/program/fpc-cross/src/fpc/compiler/ppcrossarm -Cparmv7m 
@rtl.cfg -Ur -Tembedded -Parm -XParm-embedded- -Xr -Ur -Xs -O2 -n -Fi../inc 
-Fi../arm -FE. 
-FU/usr/p1/home/marc/program/fpc-cross/src/fpc/rtl/units/arm-embedded -darm 
-dRELEASE -XParm-elf- -Us -Sg system.pp 
Assembler messages:
Error: unknown architecture `armv7-m'

Error: unrecognized option -march=armv7-m
system.pp(285) Error: Error while assembling exitcode 1
system.pp(285) Fatal: There were 2 errors compiling module, stopping
Fatal: Compilation aborted

If I try directly:

 > arm-elf-as -march=armv7-m
Assembler messages:
Error: unknown architecture `armv7-m'

 > lpkg|grep arm
arm-elf-binutils-2.17

Which version of binutils is needed or what's going worng otherwise?

Marc

-- 
Marc Santhoff 

___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Constructor question

2016-01-09 Thread Bart
On 1/9/16, Mattias Gaertner  wrote:

>> Q: am I allowed to access a property/field of TA in the constructor of
>> TB before calling inherited Create there?

>> This is what I intended, but is it legal, or does it just work by chance?
>
> It works by design.

Thanks for clarifying.

Bart
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] building arm cross compiler on FreeBSD

2016-01-09 Thread Tomas Hajny
On Sat, January 9, 2016 23:44, Jonas Maebe wrote:
> On 09/01/16 23:27, Marc Santhoff wrote:


Hi Jonas,

>> I'm stuck while trying to build a cross compiler for ARM on FreeBSD. The
>> compiler does not know any arm target.
 .
 .
>> FreeBSD is running on some arm
>> platforms (e.g. beagleboard), but it seems the combination is not
>> implemented in fpc.
 .
 .
>> How can I build a build a cross compiler running on FreeBSD compiling
>> for ARM?
>
> Try adding OS_TARGET=embedded to your "make all CPU_TARGET=arm"
> invocation in the top level directory (assuming you've set up your
> environment for cross-compiling to embedded).

I know next to nothing about target embedded or ARM, but the original
poster seems to have asked for support of FreeBSD on ARM (which is indeed
not available in FPC at the moment as far as I can see, although I would
guess that the existing support for Darwin on ARM together with the
existing support of FreeBSD on i386 and x86_64 might be a good starting
point). Was your suggestion meant just as the first step on the way
towards adding support for this target on ARM (would the ARM
cross-compiler not having even a start for the requested target really
help him in this case?)? Or have I missed something?

Tomas


___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal