Pinxy direkt?

Antworten
Benutzeravatar
Maik81SE
Beiträge: 308
Registriert: Fr 30. Sep 2011, 14:07
OS, Lazarus, FPC: Debian 12 (L 3.0.0.3 FPC 3.2.2); Windows 10 (L 3.99.0.0 FPC 3.2.0)
CPU-Target: x86-64; arm; avr
Wohnort: Lübeck
Kontaktdaten:

Pinxy direkt?

Beitrag von Maik81SE »

Moin...

einige von euch, welche unter C ihre AVRs geschrieben haben werden es ja bestimmt kenne, das man bei einem µC auch den das PortPin direkt aufrufen kann

Code: Alles auswählen

#ifdef __AVR_ATmega16__

    #define RS_74ACT175_Pin       PINA7

#elif defined (__ AVR_ATmega128__)

    #define RS_74ACT175_Pin       PING0

#endif
gern würde ich dies unter FreePascal weiter nutzen wollen, aber wenn ich mir die entsprechenden Units der einzelnen AVRs anschaue ist diese möglichkeit nicht da nicht gegeben,
WÜrdet ihr es dahingehend als Sinnvoll erachten dies in den Entsprechenden Units nachzutragen? wenn ja wo macht es eher sinn?
Bei den Variablen oder bei den Constanten?

Das dies allerdings am ende mehr Code bedeutet, der verarbeitet werden muß, liegt auf der hand, würde aber für den ein oder anderen bestimmt einiges erleichtern.

klar kann man mit einer Teile wie

Code: Alles auswählen

    TXPin          = (1 shl 3);
arbeiten, aber was spricht aus dagegen, wenn man zB bei einem Attinyx5 sagt.

Code: Alles auswählen

    TXPin          = (1 shl PinB3);
Was mir auch etwas ungünstig aufgefallen ist, zumindest für meinen Geschmack, das viele Register zusammengefast wurden, aber damit kann ich leben, wenn ich die Register iwan mal im Schlaf benennen kann... :mrgreen:

Code: Alles auswählen

label.caption:= 'gnublin.no-ip.info'
Debian 12 (L 3.0.0.3 FPC 3.2.2);
windows 10 (L 3.99.0.0 FPC 3.2.0)

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Pinxy direkt?

Beitrag von PascalDragon »

Maik81SE hat geschrieben:
Mo 25. Jan 2021, 16:09
WÜrdet ihr es dahingehend als Sinnvoll erachten dies in den Entsprechenden Units nachzutragen? wenn ja wo macht es eher sinn?
Bei den Variablen oder bei den Constanten?
Wo genau kommen diese Bezeichner her? Die Microcontrollerunits werden meist maschinell erstellt, wenn es also keine maschinenlesbare Quelle dafür gibt, dann sehe ich schwarz, da die Änderungen bei jeder Neugenerierung (was zugegeben sehr selten vorkommt) verloren gehen würden.
Maik81SE hat geschrieben:
Mo 25. Jan 2021, 16:09
Was mir auch etwas ungünstig aufgefallen ist, zumindest für meinen Geschmack, das viele Register zusammengefast wurden, aber damit kann ich leben, wenn ich die Register iwan mal im Schlaf benennen kann... :mrgreen:
Das ist eben wie es in den Quelldateien der Chiphersteller hinterlegt ist.
FPC Compiler Entwickler

Benutzeravatar
kupferstecher
Beiträge: 418
Registriert: Do 17. Nov 2016, 11:52

Re: Pinxy direkt?

Beitrag von kupferstecher »

Maik81SE hat geschrieben:
Mo 25. Jan 2021, 16:09
gern würde ich dies unter FreePascal weiter nutzen wollen, aber wenn ich mir die entsprechenden Units der einzelnen AVRs anschaue ist diese möglichkeit nicht da nicht gegeben,
Würdet ihr es dahingehend als Sinnvoll erachten dies in den Entsprechenden Units nachzutragen?
Mir kommt das Konzept nicht so sinnvoll vor.
PINA7 enthält ja nur den Wert 7. Der PortA ist aber im Namen enthalten, besser wäre wohl eine Konstante PortPin7. Aber brauchts das?

Ich mach das eher mit eigenen aussagekräftigen Konstanten. Die Schiebeoperation könnte man auch schon in der Konstante vornehmen.

Code: Alles auswählen

var
  StatusLEDPort: byte absolute PortA;
const
  StatusLEDPin = 7;

implementation
  StatusLEDPort:= StatusLEDPort or (1 shl StatusLEDPin); //LED=on 


Und am Besten noch durch eine Funktion kapseln:

Code: Alles auswählen

Procedure StatusLEDOn;
begin
  StatusLEDPort:= StatusLEDPort or (1 shl StatusLEDPin); //LED=on
end;
Das kommt einem zwar etwas aufwendig vor, aber die tatsächlichen Hardwarezugriffe sind ja oft nur ein sehr kleiner Teil vom gesamten Code und sollten gerade dann sauber gekapselt sein, wenn von mehreren Stellen im Code aus auf eine Peripherie zugegriffen wird.

Benutzeravatar
Maik81SE
Beiträge: 308
Registriert: Fr 30. Sep 2011, 14:07
OS, Lazarus, FPC: Debian 12 (L 3.0.0.3 FPC 3.2.2); Windows 10 (L 3.99.0.0 FPC 3.2.0)
CPU-Target: x86-64; arm; avr
Wohnort: Lübeck
Kontaktdaten:

Re: Pinxy direkt?

Beitrag von Maik81SE »

kupferstecher hat geschrieben:
Di 26. Jan 2021, 12:10

Code: Alles auswählen

var
  StatusLEDPort: byte absolute PortA;
const
  StatusLEDPin = 7;
Also ist diese Variante auch nach deinen Empfindung sinnvoller.
Man ist ja Flexibel und kann sich zum Glück anpassen :mrgreen:

vielleicht such ich mir auch 'ne mgl dies als Functionsvariable zu verwenden, da kann ich diese gleich lernen zu verinnerlichen.
PascalDragon hat geschrieben:
Di 26. Jan 2021, 09:43
Das ist eben wie es in den Quelldateien der Chiphersteller hinterlegt ist.
dann unterscheiden sich aber die QUelldaten der Chiphersteller eindeutig von den Datenblättern.

Schaue dir mal bitte das Register USIWM an...
Laut Datenblatt trennen die dies in USIWM0 und USIWM1 aber in der Unit ATtiny85 wird es folgt definiert.

Code: Alles auswählen

  USIWM = 4; // USI Wire Mode Bits

Code: Alles auswählen

label.caption:= 'gnublin.no-ip.info'
Debian 12 (L 3.0.0.3 FPC 3.2.2);
windows 10 (L 3.99.0.0 FPC 3.2.0)

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Pinxy direkt?

Beitrag von PascalDragon »

Maik81SE hat geschrieben:
Mi 27. Jan 2021, 05:05
PascalDragon hat geschrieben:
Di 26. Jan 2021, 09:43
Das ist eben wie es in den Quelldateien der Chiphersteller hinterlegt ist.
dann unterscheiden sich aber die QUelldaten der Chiphersteller eindeutig von den Datenblättern.

Schaue dir mal bitte das Register USIWM an...
Laut Datenblatt trennen die dies in USIWM0 und USIWM1 aber in der Unit ATtiny85 wird es folgt definiert.

Code: Alles auswählen

  USIWM = 4; // USI Wire Mode Bits
In der Datei von Microchip für den ATTiny85 ist das wie folgt deklariert:

Code: Alles auswählen

        <register caption="USI Control Register" name="USICR" offset="0x2D" size="1">
          <bitfield caption="Start Condition Interrupt Enable" mask="0x80" name="USISIE"/>
          <bitfield caption="Counter Overflow Interrupt Enable" mask="0x40" name="USIOIE"/>
          <bitfield caption="USI Wire Mode Bits" mask="0x30" name="USIWM" values="COMM_USI_OP"/>
          <bitfield caption="USI Clock Source Select Bits" mask="0x0C" name="USICS"/>
          <bitfield caption="Clock Strobe" mask="0x02" name="USICLK"/>
          <bitfield caption="Toggle Clock Port Pin" mask="0x01" name="USITC"/>
        </register>
Es ist also tatsächlich ein einziges Bitfeld mit einer Breite von 2 Bit (im Datasheet wird es ja auch als ein Eintrag behandelt, auch wenn es die Bits USIWM0 und USIWM1 gibt). Vielleicht könnte man allerdings den Generator so anpassen, dass auch die Masken als Konstanten mit angelegt werden, so wüsste man zumindest, dass es kein 1-Bit Feld ist...

Zusätzlich könnten wohl auch die values ausgegeben werden, die sind in dem Fall (COMM_USI_OP) nämlich wie folgt:

Code: Alles auswählen

      <value-group caption="" name="COMM_USI_OP">
        <value caption="Normal Operation" name="VAL_0x00" value="0x00"/>
        <value caption="Three-Wire Mode" name="VAL_0x01" value="0x01"/>
        <value caption="Two-Wire Mode" name="VAL_0x02" value="0x02"/>
        <value caption="Two-Wire Mode Held Low" name="VAL_0x03" value="0x03"/>
      </value-group>
FPC Compiler Entwickler

Benutzeravatar
Maik81SE
Beiträge: 308
Registriert: Fr 30. Sep 2011, 14:07
OS, Lazarus, FPC: Debian 12 (L 3.0.0.3 FPC 3.2.2); Windows 10 (L 3.99.0.0 FPC 3.2.0)
CPU-Target: x86-64; arm; avr
Wohnort: Lübeck
Kontaktdaten:

Re: Pinxy direkt?

Beitrag von Maik81SE »

Hmmm, das erstaunt mich zugegeben jetzt aber echt, aber da man ja die Infos auch iwie ranbekommt, kann man problemlos damit arbeiten.

Wundert mich dennoch, das die files vom Microchip sich mit den Datenblättern unterscheiden.
Aber kenne ich ja nicht anders aus meinem Job als Schaltschrankbauer...
Da gobt es auch oft mal unstimmigkeiten zw Theorie und Praxis der Hersteller.
Die besten beispiele hatte ich heute wieder bei Kombonenten von Beckhoff :mrgreen: :mrgreen:

Code: Alles auswählen

label.caption:= 'gnublin.no-ip.info'
Debian 12 (L 3.0.0.3 FPC 3.2.2);
windows 10 (L 3.99.0.0 FPC 3.2.0)

Antworten