Parameter Usart bei SetSerEnable (xmega)

Compilerfehler wenn der Parameter eine Variable ist

Thomas.AC
Benutzer
Avatar
Geschlecht: keine Angabe
Alter: 44
Beiträge: 308
Dabei seit: 07 / 2013
Betreff:

Parameter Usart bei SetSerEnable (xmega)

 · 
Gepostet: 09.12.2014 - 10:46 Uhr  ·  #1
Hallo,

Sobald ich für den Parameter Usart von SetSerEnable eine Variable verwende, erhalte ich einen Compilerfehler (Siehe Bild im Anhang). Wieso?

Vielen Dank für Antworten.

Gruß
Thomas

Testprogramm:
Code

program test;

{ $W+}

Device = xmega128A1U, VCC = 3.3;

Define_Fuses
    Override_Fuses;
    NoteBook   = A;
    COMport    = USB;
    FuseBits5  = [BODLEVEL1, BODLEVEL2, BODACT0]; // BOD=2.8V if USB variant
    ProgFuses = true;
    ProgEEprom = true;


Import Systick, SerPortC0, SerPortC1;

Define
    OSCtype = extXTAL=8000000, PLLmul=4, prescA=1, prescB=1, prescC=1, faildet;

    SysTick        = 10;
    StackSize      = 256, iData;
    FrameSize      = 256, iData;

    SerPortC0      = 19200;
    RxBufferC0     = 32, iData;
    TxBufferC0     = 32, iData;
    SerCtrlC0      = onSerTxComplete_C0;

    SerPortC1      = 19200;
    RxBufferC1     = 32, iData;
    TxBufferC1     = 32, iData;
    SerCtrlC1      = onSerTxComplete_C1;
    
implementation
{$IDATA}
{-------------------------------------------------------------------------------
Main Program
-------------------------------------------------------------------------------}
var usart : tUSARTenum;
begin
    usart := USARTC0;
    SetSerEnable(USARTC0,true);
    SetSerEnable(usart,true);
end test.
Der an diesem Beitrag angefügte Anhang ist entweder nur im eingeloggten Zustand sichtbar oder die Berechtigung Deiner Benutzergruppe ist nicht ausreichend.
rh
Administrator
Avatar
Geschlecht:
Herkunft: Germany
Alter: 25
Homepage: e-lab.de
Beiträge: 5558
Dabei seit: 03 / 2002
Betreff:

Re: Parameter Usart bei SetSerEnable (xmega)

 · 
Gepostet: 09.12.2014 - 15:03 Uhr  ·  #2
Hallo Thomas,

SetSerEnable erwartet eine Konstante als UART Definition.
Im obigen Fall ist dies eine Variable. Das wird und kann nicht vom Compiler/Treiber
unterstützt werden. Eine genaue ErkLärung dafür würde hier zuweit führen.

rolf
Thomas.AC
Benutzer
Avatar
Geschlecht: keine Angabe
Alter: 44
Beiträge: 308
Dabei seit: 07 / 2013
Betreff:

Re: Parameter Usart bei SetSerEnable (xmega)

 · 
Gepostet: 09.12.2014 - 15:16 Uhr  ·  #3
Danke für deine Antwort,

leider auch nicht mit eigener Konstante von typ tUSARTenum möglich.
Schade, für portablen Code wäre das besser.

Gruß
Thomas.AC

Code

program test;

{ $W+}

Device = xmega128A1U, VCC = 3.3;

Define_Fuses
    Override_Fuses;
    NoteBook   = A;
    COMport    = USB;
    FuseBits5  = [BODLEVEL1, BODLEVEL2, BODACT0]; // BOD=2.8V if USB variant
    ProgFuses = true;
    ProgEEprom = true;


Import Systick, SerPortC0, SerPortC1;

Define
    OSCtype = extXTAL=8000000, PLLmul=4, prescA=1, prescB=1, prescC=1, faildet;

    SysTick        = 10;
    StackSize      = 256, iData;
    FrameSize      = 256, iData;

    SerPortC0      = 19200;
    RxBufferC0     = 32, iData;
    TxBufferC0     = 32, iData;
    SerCtrlC0      = onSerTxComplete_C0;

    SerPortC1      = 19200;
    RxBufferC1     = 32, iData;
    TxBufferC1     = 32, iData;
    SerCtrlC1      = onSerTxComplete_C1;

implementation
{$IDATA}
{-------------------------------------------------------------------------------
Main Program
-------------------------------------------------------------------------------}
const 
  myUsart : tUSARTenum = USARTC0;  // jetzt als Konstante

begin
    SetSerEnable(USARTC0,true);
    SetSerEnable(myUsart,true);  // geht nicht, Compilerfehler
end test.
Merlin
Administrator
Avatar
Geschlecht:
Alter: 25
Beiträge: 1474
Dabei seit: 03 / 2005
Betreff:

Re: Parameter Usart bei SetSerEnable (xmega)

 · 
Gepostet: 09.12.2014 - 22:36 Uhr  ·  #4
Would alias do what you need?

That definitely works!
Thomas.AC
Benutzer
Avatar
Geschlecht: keine Angabe
Alter: 44
Beiträge: 308
Dabei seit: 07 / 2013
Betreff:

Re: Parameter Usart bei SetSerEnable (xmega)

 · 
Gepostet: 17.12.2014 - 12:29 Uhr  ·  #5
yes, alias is generally good for portable code.

I recently used SerPortSelect to dynamically switch between the USARTs.
Now, I need RS485 Support with SetSerEnable and UartEnableRx
But these functions are not handled by SerportSelect, are they?
Thus, I need to change my "code design".

I will check, if alias could help me. if not, I'm going to use Wrapper functions around UartEnableRx and SetSerEnable. The code overhead shouldn't be as much.

Thank you for your replies.

Code

// example for Wrapper function
procedure UartEnableRxWrapper(serport : byte; enable : boolean);
begin
  case serport of
    UsartC0 : UartEnableRxC0(enable);
    |
    UsartC1 : UartEnableRxC1(enable);
    |
    UsartD0 : UartEnableRxD0(enable);
    |
    UsartD1 : UartEnableRxD1(enable);
    |
    UsartE0 : UartEnableRxE0(enable);
    |
    UsartE1 : UartEnableRxE1(enable);
    |
    UsartF0 : UartEnableRxF0(enable);
    |
    UsartF1 : UartEnableRxF1(enable);
    |
  endcase;
end;
rh
Administrator
Avatar
Geschlecht:
Herkunft: Germany
Alter: 25
Homepage: e-lab.de
Beiträge: 5558
Dabei seit: 03 / 2002
Betreff:

Re: Parameter Usart bei SetSerEnable (xmega)

 · 
Gepostet: 17.12.2014 - 14:07 Uhr  ·  #6
Hallo Thomas,

das nächste Update wird auch das unterstützen:
Zitat
const
myUsart : tUSARTenum = USARTC0; // jetzt als Konstante

rolf
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   110   124 · Page-Gen-Time: 0.024092s · Speichernutzung: 2 MB · GZIP: ein · Viewport: SMXL-HiDPI