Type Missmatch! record expected Warum?

  • 1
  • 2
  • Seite 2 von 2
pvs-deck
PowerUser
Avatar
Geschlecht:
Alter: 54
Beiträge: 1344
Dabei seit: 02 / 2009
Betreff:

Re: Type Missmatch! record expected Warum?

 · 
Gepostet: 16.07.2014 - 15:15 Uhr  ·  #9
Zitat geschrieben von rh

@all,
typecasting of records to arrays and vice versa is not supported.
But with most cases a CopyBlock does the same.
We use a similar technique with an overlay, as Avra suggested, in our
programmers with the USB rx and tx buffers.

rolf


Hallo Rolf,
Code
var 
  RxBuf       : tBuf64, align2;  // USB incomming Buffer 
  TxBuf       : tBuf64, align2;  // USB outgoing Buffer 
  ONL[@RxBuf] : TPVSStatus;      // Online Statusblock; <<< use overlay 


Wenn ich das jetzt aber richtig verstehe, nutze ich hier nichts weiter als einen Pointer auf dem RxBuf, oder?

Dann spare ich mir zwar das Typcast, aber habe für ONL keinen eigenen Speicherbereich mehr, somit wäre das gesicherte Telegramm vom ONL beim nächsten Empfang von RxBuf wieder überschrieben :(

Aber wenn ich dieses Overlay nur nutze zum TypeCast, sollte es ganz gut gehen:

Code
var 
  RxBuf       : tBuf64, align2;  // USB incomming Buffer 
  TxBuf       : tBuf64, align2;  // USB outgoing Buffer 
  ONLRx[@RxBuf] : TPVSStatus;   // Online Statusblock; <<< use overlay 
  ONL : TPVSStatus;      // Online Statusblock;  

......
// Bei der Zuweisung kann man dann ganz einfach wie folgt arbeiten
ONL := ONLRx; // Sichere Empfangsdaten


Dadurch das ONLRx den selben Speicher nutzt wie RxBuf, kostet das auch nicht zusätzlich Speicher ;)

OK, ist eine Möglichkeit.
Ich Danke euch für die Infos :)

Gruss
Thorsten (PVS-Deck)
Harald_K
 
Avatar
 
Betreff:

Re: Type Missmatch! record expected Warum?

 · 
Gepostet: 16.07.2014 - 17:29 Uhr  ·  #10
joi, das tuts .. sieht auch eleganter aus wie blockcopy.

allerdings nutzt die Zuweisung auch nur die Routine system.blockcopyc ...

intressanterweise gibts auch in der Codegenerierung nen Unterschied zwischen
- Blockcopy mit Adressoperator @
- Blockcopy mit Funktion addr()
- Zuweisung
für das Laden der Parameter vor dem Aufruf von copyblock.

Zuweisung ist das schnellste, das mit addr braucht paar Takte mehr, das mit @ noch paar Takte mehr. Macht aber kaum was aus, besonders bei größeren Blöcken.
rh
Administrator
Avatar
Geschlecht:
Herkunft: Germany
Alter: 25
Homepage: e-lab.de
Beiträge: 5558
Dabei seit: 03 / 2002
Betreff:

Re: Type Missmatch! record expected Warum?

 · 
Gepostet: 16.07.2014 - 20:23 Uhr  ·  #11
Hallo Thorsten,

bez. dem USB rx-Buffer. Der wird erst wieder vom USB überschrieben nachdem der USB
wieder freigegeben wurde. Normalerweise muss man ja erstmal diesen Buffer verarbeiten
bevor man den nächsten empfängt. Also wird der Buffer nicht automatisch überschrieben
sondern erst nach einem USB_RxSetBuf.

rolf
  • 1
  • 2
  • Seite 2 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   65   79 · Page-Gen-Time: 0.031171s · Speichernutzung: 2 MB · GZIP: ein · Viewport: SMXL-HiDPI