closed

Loginbox

Please enter your username and password into the following fields to log in.


  • Username:
  • Password:
  •  
  • Auto log in on every visit.


  •  

SerOutSLIPD0 -> var or Symbol expected



Lschreyer offline
Benutzer
Avatar
Gender: n/a
Location: n/a 
Age:
Posts: 499
Registered: 02 / 2007
Private message
Subject: SerOutSLIPD0 -> var or Symbol expected  -  Posted: 21.06.2020 - 12:48   -  
Ich versuche auf einem Xmega256A3U über den Serport D0 den Befehl
SerOutSLIPD0(@Command, Sizeof(Command));
zu verwenden, bekomme aber einen Compilerfehler.
(var or Symbol expected)


Ich habe folgendes definiert:

Code

Device = xmega256a3U, VCC = 3.3;
Import SysTick, ADC_A, SerportD0, BeepPort, crcstream;

Define
  OSCtype     = int32MHz,
                   PLLmul = 7,
                   prescB = 1,
                   prescC = 1,
                   overdrive;

  SysTick        = 10;             {msec}
  StackSize     = $0840, iData;
  FrameSize    = $0440, iData;

  SerPortD0      = 9600, Stop1, timeout;    {Baud, StopBits|Parity}
  TxBufferD0    = 49, iData;
  RxBufferD0    = 49, iData;



Anmerkung: Auf einem ATMega128 lief das problemlos über Serport1

Was mache ich falsch?
DANKE SCHON EINMAL IM VORAUS FÜR DIE HILFE!
go down go up
rh offline
Administrator
Avatar
Gender: male
Location: GERMANY  Germany
Age:
Posts: 5504
Registered: 03 / 2002
Homepage Private message
Subject: Re: SerOutSLIPD0 -> var or Symbol expected  -  Posted: 21.06.2020 - 15:44   -  
Hallo
wie ist das command definiert ??
rolf
Cars don't buy cars -- Autos kaufen keine Autos.
Henry Ford
go down go up
Lschreyer offline
Benutzer
Avatar
Gender: n/a
Location: n/a 
Age:
Posts: 499
Registered: 02 / 2007
Private message
Subject: Re: SerOutSLIPD0 -> var or Symbol expected  -  Posted: 21.06.2020 - 19:02   -  
type
COMMANDTYPE = Record
Com : Char;
Adr1, Adr2 : Byte;
Data : word;
CRC : word;
end;

var
Command: Commandtype;

Wie gesagt, auf einem ATMega läuft es problemlos.
DANKE SCHON EINMAL IM VORAUS FÜR DIE HILFE!
go down go up
Lschreyer offline
Benutzer
Avatar
Gender: n/a
Location: n/a 
Age:
Posts: 499
Registered: 02 / 2007
Private message
Subject: Re: SerOutSLIPD0 -> var or Symbol expected  -  Posted: 22.06.2020 - 17:54   -  
Für mich sieht das so aus als würde er die Function an sich nicht als gültig anerkennen.
ich komme da leider nicht weiter, muss eine ältere Software von Atmega auf Xmega umsetzen.
DANKE SCHON EINMAL IM VORAUS FÜR DIE HILFE!
go down go up
rh offline
Administrator
Avatar
Gender: male
Location: GERMANY  Germany
Age:
Posts: 5504
Registered: 03 / 2002
Homepage Private message
Subject: Re: SerOutSLIPD0 -> var or Symbol expected  -  Posted: 22.06.2020 - 18:24   -  
Er meckert das @Name an.
Wie weiter oben steht brauche ich ein ganz
Kleines Testprogramm das den Fehler zeigt.
Irgendwelche schnippsel helfen nicht weiter !
rolf
Cars don't buy cars -- Autos kaufen keine Autos.
Henry Ford
go down go up
Lschreyer offline
Benutzer
Avatar
Gender: n/a
Location: n/a 
Age:
Posts: 499
Registered: 02 / 2007
Private message
Subject: Re: SerOutSLIPD0 -> var or Symbol expected  -  Posted: 23.06.2020 - 08:18   -  
Wenn es weiter hilft..
Es liegt nicht an den Parametern, der Compiler lehnt den Befehl SeroutSlipD0 (und auch C0, C1, D1 usw.) ab.
Wie gesagt, auf Atmega128 läuft es auf Xmega nicht.


Code

program test;

Device = xmega256a3U, VCC = 3.3;


define_fuses
  Override_Fuses;
  NoteBook   = A;
  Supply     = 3.3, 300;
  COMport    = USB;
  Progmode   = PDI;
  Fusebits5  = [BODACT1, EESAVE, BODLEVEL1, BODLEVEL0];

Import SysTick, SerportD0, BeepPort;

From System Import Float;


Define
  OSCtype        = int32MHz,
                   PLLmul = 4,
                   prescB = 1,
                   prescC = 1;

  SysTick        = 10;             {msec}
  StackSize      = $0840, iData;
  FrameSize      = $0440, iData;

  SerPortD0      = 9600, Stop1, timeout;    {Baud, StopBits|Parity}
  TxBufferD0     = 49, iData;
  RxBufferD0     = 49, iData;

  BeepPort       = PortR, 0;


Implementation

{$IDATA}


type
  COMMANDTYPE    = Record
                     Com            : Char;  //Command
                     Adr1, Adr2     : Byte;  // Adress
                     Data           : word;  // DAta
                     CRC            : word;
                   end;

Var Command: Commandtype;


function SendCommand(FCOM: char; Fadr: byte; Fdata: word): boolean;
var
  Xcrc: word;
  c   : char;
  Command: Commandtype;
begin
  Command.com:=  FCOM;
  Command.adr1:= Fadr;
  Command.adr2:= 50;
  Command.data:= Fdata;

  SerOutSlipD0(@Command, Sizeof(Command));
  return(true);
end;


begin
  Enableints($87);
  loop
     Sendcommand('C', 255, 0);
  endloop;
end Test.
DANKE SCHON EINMAL IM VORAUS FÜR DIE HILFE!
This post has been edited 2-times. Last edit: 23.06.2020 - 08:23 by Lschreyer.
go down go up
Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 55
Posts: 1656
Registered: 03 / 2003
Private message
Subject: Re: SerOutSLIPD0 -> var or Symbol expected  -  Posted: 23.06.2020 - 17:20   -  
Kannst du mal ein Hardcopy vom PED32 mit dem Fehler posten?

Code

Var
  txptr : Pointer;

txptr:=@Command;
SeroutslipD0(txptr, Sizeof(Command));

mal probiert? Evtl. sogar das Sizeof vorher berechnen.

Ja ich kenne die Fehlermeldung, aber die hatte ich schon aus verschiedensten Gründen.

Harry
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
go down go up
rh offline
Administrator
Avatar
Gender: male
Location: GERMANY  Germany
Age:
Posts: 5504
Registered: 03 / 2002
Homepage Private message
Subject: Re: SerOutSLIPD0 -> var or Symbol expected  -  Posted: 23.06.2020 - 21:45   -  
Hallo Louis,

ich empfehle mal wieder das AVRco Manual zu lesen.
Fur den XMega hat sich da einiges getan !!!!!!!!!
Code

program XMega_SLIP;

Device = XMega128A1, VCC=3.3;
{ $BOOTRST $20000}         {Reset Jump to $20000}

Import SysTick, BeepPort, SLIPportC0, SLIPportC1, SLIPportD0, SLIPportD1;

From System Import ;

Define
  // The XMegas don't provide any Oscillator fuses.
  // So the application must setup the desired values
  // possible OSC types: extXTAL, extClock, ext32kHz, int32Khz, int2MHz, int32MHz

  //>> CPU=32MHz, PeripherX4=32MHz, PeripherX2=32MHz
  OSCtype        = int32MHz, PLLmul=4, prescB=1, prescC=1;
  SysTick        = 10;             {msec}
  StackSize      = $0032, iData;
  FrameSize      = $0064, iData;
  
  BeepPort       = PortA, 0;

  SLIPportC0      = 19200;
  SLIPportCtrlC0  = PortA, 0, positive;    // optional RS485 driver control
  SLIPportC1      = 19200;
  SLIPportCtrlC1  = PortA, 1, positive;    // optional RS485 driver control

  SLIPportD0      = 19200, Master;         // onBoard local network
  SLIPportD1      = 19200, Slave;          // onBoard local network

Implementation

{$IDATA}
{--------------------------------------------------------------}
{ Type Declarations }
type

{--------------------------------------------------------------}
{ Const Declarations }
const

{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA}
var
  RxBuff         : array[0..31] of byte;
  TxBuff         : array[0..31] of byte;
  TxResultC0     : tSLIPstate;
  RxResultC1     : tSLIPstate;
  bc             : boolean;            // used to switch to broadcast

{--------------------------------------------------------------}
{ functions }

{--------------------------------------------------------------}
{ Main Program }
{$IDATA}
begin
  // fill the Tx buffer with some data
  TxBuff[0]:= $10;
  TxBuff[1]:= $C0;
  TxBuff[2]:= $11;
  TxBuff[3]:= $DC;
  TxBuff[4]:= $12;
  TxBuff[5]:= $DB;
  TxBuff[6]:= $13;
  TxBuff[7]:= $DD;
  TxBuff[8]:= $14;

  SLIPsetTxAddrC0(01);                 // for the address mode
  SLIPsetRxAddrC1(01);

  SLIPsetModeC0([slpAddr, slpHsk, slpChkS]);    // combine several modes
  SLIPsetModeC1([slpAddr, slpHsk, slpChkS]);
  SLIPsetTimeOutC0(10);                         // timeout used for handshake
  SLIPsetTimeOutC1(10);                         // and frame failures

  SLIPsetRxBufferC1(@RxBuff, sizeOf(RxBuff));
  SLIPsetTxBufferC0(@TxBuff, 9);
  
  // enable receive on portC1
  SLIPresumeRxC1;
  EnableInts($87);
  loop
    // here we switch between broadcast and unique address
    if bc then
      SLIPsetTxAddrC0($FF);
    else
      SLIPsetTxAddrC0(01);
    endif;
//    bc:= not(bc);

    repeat
    until SLIPstartTxC0;
    // transmit a frame
    repeat
      TxResultC0:= SLIPgetTxStateC0;
    until TxResultC0 <> SLIPbusy;
    if TxResultC0 <> SLIPready then
      BeepOut(800, 10);
    endif;

    // receive a frame
    repeat
      RxResultC1:= SLIPgetRxStateC1;
    until RxResultC1 <> SLIPbusy;
    // process the received data or the error
    // ....
    // ....
    if RxResultC1 = SLIPready then
      if SLIPwasBC_C1 then
        BeepOut(800, 2);
      else
        BeepClick;
      endif;
    else
      BeepOut(800, 10);
    endif;
    repeat
    until SLIPresumeRxC1;
  endloop;
end XMega_SLIP.



rolf
Cars don't buy cars -- Autos kaufen keine Autos.
Henry Ford
go down go up
Lschreyer offline
Benutzer
Avatar
Gender: n/a
Location: n/a 
Age:
Posts: 499
Registered: 02 / 2007
Private message
Subject: Re: SerOutSLIPD0 -> var or Symbol expected  -  Posted: 24.06.2020 - 11:03   -  
Ich habe das Manual gelesen, sonst hätte ich nicht gefragt.

Auf Seite 80 steht da einiges, u. a. steht die gefragte Procedure SerOutSLIPD0 dort aufgelistet, bei der Beschreibung für Serportn / SerportXn für Xmega
Da steht aber nichts davon dass das nur läuft wenn man dafür den SlipPort-Treiber nimmt. Das wäre auch doof, da ich den Serport-Treiber benötige, da hier Kommunikation sowohl über Slip als auch "roh" laufen muss, was beim Slipport-Treiber nicht geht, da geht nur Slip.

Unter der Beschreibung für die Uarts steht da u. a. aufgelistet:

Code

Das AVRco System stellt eine SLIP Implementation zur Verfügung und zwar für die seriellen Schnittstellen
1..4 soweit in der CPU vorhanden. Dazu sind jeweils eine Sende Funktion und eine Empfangs Funktion
vorhanden.
Procedure SerOutSLIP(src : pointer; count : word); // UART1
Procedure SerOutSLIP1(src : pointer; count : word); // UART1
Procedure SerOutSLIP2(src : pointer; count : word); // UART2
Procedure SerOutSLIP3(src : pointer; count : word); // UART3
Procedure SerOutSLIP4(src : pointer; count : word); // UART4
XMega
Procedure SerOutSLIPC0(src : pointer; count : word); // UARTC0
Procedure SerOutSLIPC1(src : pointer; count : word); // UARTC1
Procedure SerOutSLIPD0(src : pointer; count : word); // UARTD0
Procedure SerOutSLIPD1(src : pointer; count : word); // UARTD1
Procedure SerOutSLIPE0(src : pointer; count : word); // UARTE0
Procedure SerOutSLIPE1(src : pointer; count : word); // UARTE1
Procedure SerOutSLIPF0(src : pointer; count : word); // UARTF0
Procedure SerOutSLIPF1(src : pointer; count : word); // UARTF1



Also entweder bin ich zu doof um das zu verstehen, oder aber die Doku ist falsch.

Wie gesagt, bei Import von SerportD0 kann ich auf dem Atmega die Funktion verwenden, auf dem Xmega geht es nicht.
Dann sollte die Doku geändert werden und die Sektion mit der Funktionsauflistung von Seite 80 entfernt werden, denn offenbar gehört dass dann in den SLIP-Teil der Doku der Profiversion.
DANKE SCHON EINMAL IM VORAUS FÜR DIE HILFE!
go down go up
Lschreyer offline
Benutzer
Avatar
Gender: n/a
Location: n/a 
Age:
Posts: 499
Registered: 02 / 2007
Private message
Subject: Re: SerOutSLIPD0 -> var or Symbol expected  -  Posted: 26.06.2020 - 08:41   -  
Ich habe die Funktion jetzt selbst umgesetzt. Im Prinzip ist das das Selbe wie SeroutBlock nur dass vor und nach dem Block dann ein 192 gesendet wird. Damit kann man dann erkennen ob der Block startet und wo er endet.
DANKE SCHON EINMAL IM VORAUS FÜR DIE HILFE!
go down go up
 


Registered users in this topic
Currently no registered users in this section

Delete cookies of this forum  •  FAQ / Help  •  Team page  •  Imprint   |  Local time: 11.07.2020 - 22:15