ATmega328 Classen

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.

ATmega328 Classen

Beitragvon Mathias » 2. Dez 2017, 18:43 ATmega328 Classen

Bei folgendem Mini-Code, bleibt der Programmablauf bei Create hängen.
Man sieht es, weil die LED an BP5 nicht an geht.
Code: Alles auswählen
type
  TMyClass = class
  end;
var
  MyClass: TMyClass;
begin
  MyClass := TMyClass.Create;
  DDRB := 1 shl BP5;
  PORTB := 1 shl BP5;


Soll ich da einen Bugreport schreiben ?
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3855
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Timm Thaler » 2. Dez 2017, 23:31 Re: ATmega328 Classen

Du möchtest keine Klassen auf dem AVR verwenden.

Man kann das machen, aber es bringt im Code überhaupt nichts und bläht das Hexfile unnötig auf.
Timm Thaler
 
Beiträge: 575
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.64 FPC3.0.4, Raspbian Stretch Laz1.62 FPC3.0.2 | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon Mathias » 3. Dez 2017, 16:51 Re: ATmega328 Classen

Du möchtest keine Klassen auf dem AVR verwenden.
Schlussendlich nicht, obwohl auch Arduino mit Classen arbeitet.
Das ich eine Classe verwenden wollte, ich hatte eine Classe für eine LCD-Anzeige, welche I²C auf dem PC verwendete, da musste ich nur eine kleine Änderung für den ATmega328 machen. Mit Object anstelle von Classe geht es. On es Sinn macht, auch auf das Object zu verzichten, kann ich noch nicht sagen. Besonders dann, wen man mehrere LCD-Anzeigen in Betrieb nehmen will. In dem Object hat es mehrere Variablen, welche den Zustand der Anzeige und die I²C Adresse speichert.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3855
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon kupferstecher » 3. Dez 2017, 20:16 Re: ATmega328 Classen

Dynamische Klassen (class) dürften nicht funktionieren, das setzt ja eine dynamische Speicherverwaltung voraus. Bei Create wird der Speicher angefordert, ich kann mir aber irgendwie nicht vorstellen, dass ein Speichermanager implementiert ist.

Statische Objekte (object) funktionieren aber. Ich verwende das auch sehr gern, macht den Code oft lesbarer. Auf dem Desktop ist object eher ungewöhnlich, obwohl die Nutzung eigentlich komfortabler ist als bei Klassen, solange man eben die Instanzen zum Zeitpunkt des Programmierens schon zuweisen kann. Create gibts entsprechend nicht, der Speicher wird bei der Variablendeklaration reserviert (im Beispiel nach "var").

Z.B.
Code: Alles auswählen
 
Type TUART = object
  Procedure Init(UARTChannel: Byte);
  Procedure Send(AValue: Byte);
  Procedure Send(AValue: UInt32);
end;
 
var
  UART1, UART2: TUART;
 
begin
  UART1.Init(1);
  UART2.Init(2);
 
  UART1.Send(123);
end;
kupferstecher
 
Beiträge: 124
Registriert: 17. Nov 2016, 11:52

Beitragvon Mathias » 3. Dez 2017, 20:22 Re: ATmega328 Classen

Dynamische Klassen (class) dürften nicht funktionieren, das setzt ja eine dynamische Speicherverwaltung voraus.

Das wird wohl auch der Grund sein, wieso das eine dynamische Array nicht geht.

Auf dem Desktop ist object eher ungewöhnlich, obwohl die Nutzung eigentlich komfortabler ist als bei Klassen, solange man eben die Instanzen zum Zeitpunkt des Programmierens schon zuweisen kann.
Da muss ich zustimmen, ein Object ist vergleichbar mit den Classen von C++, man kann es statisch und dynamisch verwenden,
Eine Pascal-Classe funktioniert nur dynamisch.
C++ kennt nur Classen und keine Objecte.
Das ist eines der wenigen Vorteile, die C++ gegenüber Pascal hat.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3855
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon kupferstecher » 3. Dez 2017, 21:09 Re: ATmega328 Classen

Mathias hat geschrieben:
Dynamische Klassen (class) dürften nicht funktionieren, das setzt ja eine dynamische Speicherverwaltung voraus.

Das ist eines der wenigen Vorteile, die C++ gegenüber Pascal hat.

Wo siehst du einen Vorteil?
C++ kenn ich nicht, aber es scheint, dass man dynamische Instanzen immer mit Pointern verwalten muss (eher hässlich).
kupferstecher
 
Beiträge: 124
Registriert: 17. Nov 2016, 11:52

Beitragvon Mathias » 3. Dez 2017, 22:28 Re: ATmega328 Classen

C++ kenn ich nicht, aber es scheint, dass man dynamische Instanzen immer mit Pointern verwalten muss (eher hässlich).

Das ist aber bei Objecten von Pascal auch der Fall. Hier einen Ausschnitt aus Turbo-Vison von TP:
Code: Alles auswählen
var
  Window: PMeinFenster;
  Dialog: PMeinDialog;
begin
  Window := New(PMeinFenster, Init(R, 'Das erste Fenster von Koala',  wnNoNumber));
  DeskTop^.Insert(Window);

Hier braucht es auch ^ .
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3855
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

• Themenende •

Zurück zu Sonstiges



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron
porpoises-institution
accuracy-worried