New Compiler Extensions

  • 1
  • 2
  • Seite 1 von 2
Merlin
Administrator
Avatar
Geschlecht:
Alter: 25
Beiträge: 1474
Dabei seit: 03 / 2005
Betreff:

New Compiler Extensions

 · 
Gepostet: 26.07.2021 - 14:12 Uhr  ·  #1
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
Avra
Schreiberling
Avatar
Geschlecht:
Herkunft: Belgrade, Serbia
Alter: 54
Homepage: rs.linkedin.com/in…
Beiträge: 653
Dabei seit: 07 / 2002
Betreff:

Re: New Compiler Extensions

 · 
Gepostet: 27.07.2021 - 01:20 Uhr  ·  #2
Zitat
The extension allows record functions and procedures.

You put a smile on my face today. Thanks!
miparo
Schreiberling
Avatar
Geschlecht:
Herkunft: Germany
Alter: 59
Beiträge: 988
Dabei seit: 09 / 2007
Betreff:

Re: New Compiler Extensions

 · 
Gepostet: 27.07.2021 - 12:53 Uhr  ·  #3
Hi Merlin,
A great step :)

Const as parameter has no function so far in AVRco!

miparo
Merlin
Administrator
Avatar
Geschlecht:
Alter: 25
Beiträge: 1474
Dabei seit: 03 / 2005
Betreff:

Re: New Compiler Extensions

 · 
Gepostet: 27.07.2021 - 16:53 Uhr  ·  #4
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.
Der an diesem Beitrag angefügte Anhang ist entweder nur im eingeloggten Zustand sichtbar oder die Berechtigung Deiner Benutzergruppe ist nicht ausreichend.
Avra
Schreiberling
Avatar
Geschlecht:
Herkunft: Belgrade, Serbia
Alter: 54
Homepage: rs.linkedin.com/in…
Beiträge: 653
Dabei seit: 07 / 2002
Betreff:

Re: New Compiler Extensions

 · 
Gepostet: 30.08.2021 - 09:39 Uhr  ·  #5
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.
Merlin
Administrator
Avatar
Geschlecht:
Alter: 25
Beiträge: 1474
Dabei seit: 03 / 2005
Betreff:

Re: New Compiler Extensions

 · 
Gepostet: 30.08.2021 - 14:17 Uhr  ·  #6
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.
Avra
Schreiberling
Avatar
Geschlecht:
Herkunft: Belgrade, Serbia
Alter: 54
Homepage: rs.linkedin.com/in…
Beiträge: 653
Dabei seit: 07 / 2002
Betreff:

Re: New Compiler Extensions

 · 
Gepostet: 31.08.2021 - 11:20 Uhr  ·  #7
Thank you for considering it!
Merlin
Administrator
Avatar
Geschlecht:
Alter: 25
Beiträge: 1474
Dabei seit: 03 / 2005
Betreff:

Re: New Compiler Extensions

 · 
Gepostet: 12.05.2023 - 13:22 Uhr  ·  #8
I hope this weekend, but if not next weekend, to issue the next release. This will be version 6.00.00, so if you download via the PED it will want to do a full install. This is not necessary so I recommend that you download the update manually from the download page.

I will post a new message when the install is there - I just wanted to forewarn users.

Sadly my 'functions and procedures' idea in records produced too many conflicts, but I have introduced a new construct that I call 'skeleton records' that do have this feature plus properties within records, so check them out. I attach a document outlining the changes.

There are several changes in this release so please make sure that you read the release news (attached).

==============================================================

Ich hoffe, dass ich dieses Wochenende, aber wenn nicht nächstes Wochenende, die nächste Version herausgeben kann. Dies wird die Version 6.00.00 sein, wenn Sie also über das PED herunterladen, wird es eine vollständige Installation durchführen wollen. Dies ist nicht notwendig, so dass ich empfehle, das Update manuell von der Download-Seite herunterzuladen.

Ich werde eine neue Nachricht veröffentlichen, wenn die Installation abgeschlossen ist - ich wollte die Benutzer nur vorwarnen.

Leider hat meine Idee mit den "Funktionen und Prozeduren" in Datensätzen zu viele Konflikte verursacht, aber ich habe ein neues Konstrukt eingeführt, das ich "Skelett-Datensätze" nenne und das diese Funktion sowie Eigenschaften innerhalb von Datensätzen bietet, also sehen Sie es sich an. Ich füge ein Dokument bei, in dem die Änderungen beschrieben sind.

Es gibt mehrere Änderungen in dieser Version, also stellen Sie bitte sicher, dass Sie die Release News (im Anhang) lesen.


Regards

Merlin
Der an diesem Beitrag angefügte Anhang ist entweder nur im eingeloggten Zustand sichtbar oder die Berechtigung Deiner Benutzergruppe ist nicht ausreichend.
  • 1
  • 2
  • Seite 1 von 2
Gewählte Zitate für Mehrfachzitierung:   0

Registrierte in diesem Topic

Aktuell kein registrierter in diesem Bereich

Die Statistik zeigt, wer in den letzten 5 Minuten online war. Erneuerung alle 90 Sekunden.
MySQL Queries: 15 · Cache Hits: 14   125   139 · Page-Gen-Time: 0.032929s · Speichernutzung: 2 MB · GZIP: ein · Viewport: SMXL-HiDPI