On 6/1/19 3:37 PM, Dimitrios Chr. Ioannidis via fpc-pascal wrote:
Hi,
I started to write a driver (
https://github.com/dioannidis/fp_ethernet_enc28j60.git ) for this chip
( ENC28J60 Ethernet Controller ) first for the AVR platform, ( heavily
inspired from the UIPEthernet library (
https://github.com/UIPEthernet/UIPEthernet.git )) and I want to ask
the community, of course, is there anyone that already done it ?
My goal is to made the free pascal users able to use a very low cost
solution Arduino Nano / UNO development board with a ENC28J60 module
for a little IoT ( and not only ) fun, learning e.t.c. ...
I managed to configure the chip and the driver receives packets (
broadcast packets configured to allow only ARP ).
Now, because I'm not embedded developer I'm thinking that I would
need help / advices to take some decisions so here I am.
First and more important, in the new FPC version, will the AVR
platform review / resolve the following issues :
"AVR - incorrect stack error checking"
(https://bugs.freepascal.org/view.php?id=35332)
It should work now. Looking into whether it will make sense to just use
up all the space of non-data as suggested in the related issue.
"AVR - Assembler routines for 8, 16 & 32 bit unsigned div (code
contribution)" ( https://bugs.freepascal.org/view.php?id=32103 )
Fixed as well.
"AVR - invalid address used when evaluating a variable in gdb" (
https://bugs.freepascal.org/view.php?id=33914 )
Looking into this.
"AVR - Incorrect SPI clock rate bit constant names in some
microcontroller units" ( https://bugs.freepascal.org/view.php?id=32339 )
and add support for theavrxmega3 subarch, atmega 3208, 3209, 4808,
4809 ( from Christo Crause's repository
https://github.com/ccrause/freepascal.git ) ?
Except from Laksen's ethernet stack (
https://github.com/Laksen/fp-ethernet.git ) is there other, more
lightweight, ethernet stack library written in Object Pascal ?
Not sure, but I doubt it. But how much more lightweight do you need it
to be? ;)
As I'm not a compiler guy, isthe "volatile" intrinsic supported in
AVR platform ( I didn't find it in intrinsics unit ) ?
It's supported, but it does not do anything at all. At least not now,
and I don't think that will change. All global variable or pointer
accesses are considered volatile to my knowledge.
But volatile in FPC does not guarantee any atomic access. So this would
need to be by you. If what you need is just atomic access, then simple
functions like these generate optimal code:
procedure AtomicWnrite(var value: word; new_value: word); inline;
var
b: Byte;
begin
b:=avr_save;
value:=new_value;
avr_restore(b);
end;
function AtomicRead(var value: word): word; inline;
var
b: Byte;
begin
b:=avr_save;
AtomicRead:=value;
avr_restore(b);
end;
In FPC embedded world/platforms, is the Object approach more SRAM
hungry ( my tests are inconclusive ) from the procedure / function
approach ?
What's more embedded "friendly" ?
If used sensibly they should be more or less equal in size, but you will
see some extra overhead with objects. Mostly due to needing passing the
pointer to the object as an argument. But you also gain some level of
abstraction. So it's a tradeoff.
this :
interface
type
TUART = Object
private
FBaudRate: DWord;
function Divider: Integer;
public
procedure Init(const ABaudRate: DWord = 57600);
procedure SendChar(c: char);
function ReadChar: char;
procedure SendString(s: ShortString);
procedure SendStringLn(s: ShortString = '');
end;
or this :
interface
var
FBaudRate: DWord;
function Divider: Integer;
procedure Init(const ABaudRate: DWord = 57600);
procedure SendChar(c: char);
function ReadChar: char;
procedure SendString(s: ShortString);
procedure SendStringLn(s: ShortString = '');
And of course anyone who wants to help is welcome .
regards,
--
Dimitrios Chr. Ioannidis
_______________________________________________
fpc-pascal maillist - fpc-pas...@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel