closed

Loginbox

Please enter your username and password into the following fields to log in.


  • Username:
  • Password:
  •  
  • Auto log in on every visit.


  •  

New Compiler Extensions



Merlin offline
Administrator
Avatar
Gender: male
Location: UNITED KINGDOM 
Age:
Posts: 1022
Registered: 03 / 2005
Private message
Subject: New Compiler Extensions  -  Posted: 26.07.2021 - 14:12   -  
Firstly I must apologize. I am still having problems with the autodownloader.

I am trying to resolve the issue with Gunter and Rolf.

I have started to implement my first extension to the compiler. It is attached for those who want to try it.

It is my first extension so there are bound to be issues, so any feedback is appreciated.

The extension allows record functions and procedures. This example shows how it it intended to work.

Code
Unit FIFO;

{
  Implements a FIFO buffer, such as used by Serial comms
}

interface
// global part

{ $W+}                  // enable/disable warnings for this unit

uses ;

{--------------------------------------------------------------}
{ Const Declarations }
const

{$IDATA}
{--------------------------------------------------------------}
{ Type Declarations }
type
  tFIFOBuff = record
    Buff : pointer to byte;
    Size : byte;
    addPtr : byte;
    rmvPtr : byte;
    function AddByte( const pByte : byte ) : boolean;
    function RemoveByte( var pByte : byte ) : boolean;
    procedure AssignBuffer( const pBuff : pointer to byte; const pSize : byte );
    function Full : boolean;
    function Empty : boolean;
  end;
  


{--------------------------------------------------------------}
{ Var Declarations }
var

{--------------------------------------------------------------}
{ functions }

implementation
// local part

{--------------------------------------------------------------}
{ Type Declarations }
type

{--------------------------------------------------------------}
{ Const Declarations }
const

{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA}
var

{--------------------------------------------------------------}
{ functions }

function NextByte( const iVal : byte; pLimit : byte  ): byte;
var
  Result : byte;
begin
  Result := iVal + 1;
  if Result = pLimit then
    Result := 0;
  endif;
  return( Result );
end;

function tFIFOBuff.AddByte( const pByte : byte ) : boolean;
var
  iNewPtr : byte;
  iPtr : pointer to byte;
begin
  if Size = 0 then // not initialized
    return( FALSE );
  else
    iNewPtr := NextByte( addPtr, Size );
    if iNewPtr = rmvPtr then
      return( FALSE ); // buffer full
    else
      iPtr :=buff+word(addPtr);
      iPtr^ := pByte;
      addPtr := iNewPtr;
    endif;
  endif;
end;

function tFIFOBuff.RemoveByte( var pByte : byte ) : boolean;
var
  iPtr : pointer to byte;
begin
  if Size = 0 then // not initialized
    return( FALSE );
  else
    if rmvPtr = addPtr then   // empty
      return( FALSE ); // buffer full
    else
      iPtr := buff+word(addPtr);
      pByte := iPtr^;
      rmvPtr := NextByte( rmvPtr, Size );
    endif;
  endif;
end;

function tFIFOBuff.Full : boolean;
var
  iNewPtr : byte;
begin
  if Size = 0 then // not initialized
    return( TRUE );
  else
    iNewPtr := NextByte( addPtr, Size );
    return( iNewPtr = rmvPtr );
  endif;
end;

function tFIFOBuff.Empty : boolean;
begin
  return( rmvPtr = addPtr );
end;

procedure tFIFOBuff.AssignBuffer( const pBuff : pointer to byte; const pSize : byte );
begin
  Buff := pBuff;
  Size := pSize;
  addPtr := 0;
  rmvPtr := 0;
end;

procedure Test;
const
  cSize : byte = 10;
var
  iBuff : array[ 0..cSize - 1] of byte;
  jBuff[ @iBuff ] : byte;
  iFIFO : tFIFOBuff;
  iVal : byte;
begin
  iFIFO.AssignBuffer( @jBuff, cSize );
  iFIFO.AddByte( 7 );
  iFIFO.RemoveByte( iVal );
end;


initialization
// at StartUp

// finalization          // optional
// at System_ShutDown
end FIFO.


Regards
Merlin.

:magic:

Software is a black art.
go down go up
Avra hidden
Schreiberling
Avatar
Gender: male
Location: SERBIA  Belgrade, Serbia
Age: 50
Posts: 636
Registered: 07 / 2002
Homepage Private message
Subject: Re: New Compiler Extensions  -  Posted: 27.07.2021 - 01:20   -  
Quote
The extension allows record functions and procedures.

You put a smile on my face today. Thanks!
go down go up
miparo offline
Schreiberling
Avatar
Gender: male
Location: GERMANY  Germany
Age: 100
Posts: 759
Registered: 09 / 2007
Private message
Subject: Re: New Compiler Extensions  -  Posted: 27.07.2021 - 12:53   -  
Hi Merlin,
A great step :)

Const as parameter has no function so far in AVRco!

miparo
Kein Support per PN! | No support via PM!
go down go up
Merlin offline
Administrator
Avatar
Gender: male
Location: UNITED KINGDOM 
Age:
Posts: 1022
Registered: 03 / 2005
Private message
Subject: Re: New Compiler Extensions  -  Posted: 27.07.2021 - 16:53   -  
Thanks guys.

I found a couple of issues - fixed here.

Thanks for tip miparo - I'll add it to my to do list. ;-)

There is also a small change to interrupts in UPDI devices.
You must be logged in or your permissions are to low to see this Attachment(s).
Merlin.

:magic:

Software is a black art.
go down go up
Avra hidden
Schreiberling
Avatar
Gender: male
Location: SERBIA  Belgrade, Serbia
Age: 50
Posts: 636
Registered: 07 / 2002
Homepage Private message
Subject: Re: New Compiler Extensions  -  Posted: 30.08.2021 - 09:39   -  
Thinking about potential compiler extensions, implementing type helpers would benefit a lot since we would be allowed to contribute in a way not possible earlier. Type helpers improve code readability and maintainability. Just take a look at https://bitbucket.org/avra/bithelpers and you will get the idea.
This post has been edited 4-times. Last edit: 30.08.2021 - 10:00 by Avra.
go down go up
Merlin offline
Administrator
Avatar
Gender: male
Location: UNITED KINGDOM 
Age:
Posts: 1022
Registered: 03 / 2005
Private message
Subject: Re: New Compiler Extensions  -  Posted: 30.08.2021 - 14:17   -  
I am familiar with helpers, Avra. It is a good idea, but a little advanced for me to implement at the moment. I will try to implement in the future, though when I am more familiar with the compiler source.
Merlin.

:magic:

Software is a black art.
go down go up
Avra hidden
Schreiberling
Avatar
Gender: male
Location: SERBIA  Belgrade, Serbia
Age: 50
Posts: 636
Registered: 07 / 2002
Homepage Private message
Subject: Re: New Compiler Extensions  -  Posted: 31.08.2021 - 11:20   -  
Thank you for considering it!
go down go up
 


Registered users in this topic
Currently no registered users in this section

Delete cookies of this forum  •  FAQ / Help  •  Team page  •  Imprint   |  Local time: 21.09.2021 - 01:15