Parameter Usart bei SetSerEnable (xmega)

Compilerfehler wenn der Parameter eine Variable ist

Thomas.AC
Benutzer
Avatar
Gender: n/a
Age: 43
Posts: 308
Registered: 07 / 2013
Subject:

Parameter Usart bei SetSerEnable (xmega)

 · 
Posted: 09.12.2014 - 10:46  ·  #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.
Attachments
set ser enable compiler fehler
Filename: SetSerEnable.png
Filesize: 35.42 KB
Title: set ser enable compiler fehler
Download counter: 94
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Parameter Usart bei SetSerEnable (xmega)

 · 
Posted: 09.12.2014 - 15:03  ·  #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
Gender: n/a
Age: 43
Posts: 308
Registered: 07 / 2013
Subject:

Re: Parameter Usart bei SetSerEnable (xmega)

 · 
Posted: 09.12.2014 - 15:16  ·  #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
Gender:
Age: 24
Posts: 1409
Registered: 03 / 2005
Subject:

Re: Parameter Usart bei SetSerEnable (xmega)

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

That definitely works!
Thomas.AC
Benutzer
Avatar
Gender: n/a
Age: 43
Posts: 308
Registered: 07 / 2013
Subject:

Re: Parameter Usart bei SetSerEnable (xmega)

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

Re: Parameter Usart bei SetSerEnable (xmega)

 · 
Posted: 17.12.2014 - 14:07  ·  #6
Hallo Thomas,

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

rolf
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: 15   111   126 · Page-Gen-Time: 0.025936s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI