Type Missmatch! record expected Warum?

  • 1
  • 2
  • Page 2 of 2
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: Type Missmatch! record expected Warum?

 · 
Posted: 16.07.2014 - 15:15  ·  #9
Quote by 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
 
Subject:

Re: Type Missmatch! record expected Warum?

 · 
Posted: 16.07.2014 - 17:29  ·  #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
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Type Missmatch! record expected Warum?

 · 
Posted: 16.07.2014 - 20:23  ·  #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
  • Page 2 of 2
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   65   79 · Page-Gen-Time: 0.028003s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI