Guten Morgen,
vielen Dank für die sehr interessanten Analysen und Vorschläge.
Ich habe entschieden, das ich den FPC nicht updaten werde, sondern das Projekt dahingehend ändere das es auf dem 3.0.4 und als Fallback dann evtl. auch
auf älteren FPC Versionen kompiliert und funktioniert.
Als Workaround ist die Lösung von Mathias für mich die einfachste. Denn anstatt
Code: Alles auswählen
type
TioSTAT0 = bitpacked record // ASCI-Channel 0 Status
case byte of
0: (STAT0: byte); // 8Bit Register Data
1: (bitTIE: boolean; // Transmit Interrupt Enable
bitTDRE: boolean; // Transmit Data Register Empty
bitDCD0: boolean; // Data Carrier Detect
bitRIE: boolean; // Receive Interrupt Enable
bitFE: boolean; // Framing Error
bitPE: boolean; // Parity Error
bitOVRN: boolean; // Overrun Error
bitRDRF: boolean); // Receive Data Register Full
end;
var
ioSTAT0: TioSTAT0; // ASCI-Channel 0 Status
..
..
ioSTAT0.bitRDRF := true
oder
if(ioSTAT0.bitTDRE) then begin
muß bei der Vorgeschlagenen Lösung nicht allzuviel angepasst werden:
Code: Alles auswählen
type
TioSTAT0 = bitpacked record // ASCI-Channel 0 Status
case byte of
0: (STAT0: byte); // 8Bit Register Data
1: (bit: bitpacked array [0..7] of boolean); // Boolean Bit Data
end;
var
ioSTAT0: TioSTAT0; // ASCI-Channel 0 Status
const
TIE = 0; // Transmit Interrupt Enable
TDRE = 1; // Transmit Data Register Empty
DCD0 = 2; // Data Carrier Detect
RIE = 3; // Receive Interrupt Enable
FE = 4; // Framing Error
PE = 5; // Parity Error
OVRN = 6; // Overrun Error
RDRF = 7; // Receive Data Register Full
..
..
ioSTAT0.bit[RDRF] := true
oder
if(ioSTAT0.bit[TDRE]) then begin
Da es in dem Projekt mehrere Solcher Bitregister gibt kann ich somit auch für alle einen einzigen Datentyp erstellen und die Bitadressen über weitere
Constanten angeben.
Ich wünsche euch allen schöne Ostern und vielen Dank für die Unterstützung.
Grüße
HobbyProgrammer
Host: Core i7-12700H, NVIDIA RTX3050 6GB, 32GB Ram, 1TB NVME SSD mit KUbuntu 24.04LTS 64bit , VM KUbuntu 22.04 LTS 64bit mit Lazarus 3.6 und Cross-Platform Compiler für Linux 32/64bit und Windows 32/64bit. Wine für erste Tests der Windows Binarys.