[BUG REPORT] Scheduler interruptible

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

[BUG REPORT] Scheduler interruptible

 · 
Posted: 03.12.2014 - 15:55  ·  #1
Hallo Fachleute,

vielleicht bin ich auf einen Bug gestoßen. Ich möchte bei Scheduler die Funktion interruptible verwenden, aber dann kommt es zu dem Bug. Die Beschreibung des Bugs habe ich als Kommentar im code unten in der Main_Proc eingefügt.

Betrifft AVRco Version 5.04.91 mit XMEGA128A1U

Gruß

Code

program interruptible;

{ $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;

Import SysTick;

From System Import processes;

Define
    OSCtype        = extXTAL=8000000, PLLmul=4, prescA=1, prescB=1, prescC=1, faildet;
    SysTick        = 10;
    StackSize      = 256, iData;
    FrameSize      = 256, iData;
    Scheduler      = iData, interruptible;


Implementation
{$IDATA}

{-------------------------------------------------------------------------------
process
-------------------------------------------------------------------------------}
process process1(32, 32 : iData);
begin
    sleep(self,100);
end;


{-------------------------------------------------------------------------------
Main Program
-------------------------------------------------------------------------------}
begin

  Debug_Break; // Bugbeschreibung: Der Debugger stoppt hier immer wieder,
               // obwohl eine Endlosschleife implementiert ist.
               // Wenn man im define für den Scheduler interruptible entfernt,
               // läuft das Programm richtig und der Debugger stoppt hier nur
               // beim erstmaligen "run simulation" (Taste F9 im Debugger).

  Start_Processes($87); // EnableInts($87);

  loop         // Endlosschleiße für Main_Proc
  endloop;

end interruptible.
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: [BUG REPORT] Scheduler interruptible

 · 
Posted: 03.12.2014 - 17:10  ·  #2
Hallo Thomas,

das
Code
Define Scheduler = iData, interruptible;

macht beim XMega keinen Sinn und wird nicht unterstützt.
Die Interrupt Latenz Zeit bewegt sich beim XMega im usec Bereich...
Der AVRco gibt hier in Zukunft eine Fehlermeldung aus.

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

Re: [BUG REPORT] Scheduler interruptible

 · 
Posted: 03.12.2014 - 17:21  ·  #3
danke sehr für die schnelle Antwort
Thomas.AC
Benutzer
Avatar
Gender: n/a
Age: 43
Posts: 308
Registered: 07 / 2013
Subject:

Re: [BUG REPORT] Scheduler interruptible

 · 
Posted: 04.12.2014 - 09:41  ·  #4
Hallo Rolf und schlaue Leser,

Ich habe zwei Fragen

1.

Ich möchte mit dem Serport Treiber Datenpakete hoher Baudrate Empfangen und gleichzeitig Multitasking verwenden. Im Compilerhandbuch (Deutsch, Seite 167) steht, dass der Scheduler bis zu 500µs brauchen kann. Deshalb möchte ich, dass der Scheduler interruptible ist, damit der Serport Treiber rechtzeitig zum Zuge kommt. Bei hohen Baudraten bleibt da ja nicht so viel Zeit. (Beispiel: 100 kBaud, Startbit, Stoppbit, 8bit Daten -> Byteempfang alle 100µs). Sollte ich dann in diesem Fall besser auf Superloop oder timerwheel Implementierungen zurückgreifen. (Mit Superloop und Timerwheel meine ich das, was man findet, wenn man es im Internet recherchiert.)

2.

Ist die Interruptlatenz beim XMEGA mit 32 MHz größer als beim ATmega mit 16 MHz?

Im Datenblatt des Xmegas steht was von
Interrupt Response time : 3 cycles Minimum + x cycles (for ongoing multiple cycles instructions)
jump to the Interrupt handler : 3 cycles

Nehme ich z.B. x = 5 cycles für den RET Befehl an, so komme ich auf lediglich 11 cycles (0.34µs@32MHz) bis zum Einsprung in die ISR. Daher nehme ich an, dass sich Rolf mit der Aussage "Die Interrupt Latenz Zeit bewegt sich beim XMega im usec Bereich..." auf die gesamte Interruptzeit inklusive Registersicherung und Rücksprung bezieht. @Rolf: Korrigiere mich, wenn ich mich irre.

--- Punkt 2 Ende ---

Vielleicht kann mir jemand außer Rolf und Rolf meine Fragen beantworten. :-)

Gruß
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: [BUG REPORT] Scheduler interruptible

 · 
Posted: 04.12.2014 - 13:07  ·  #5
Hallo Thomas,

alle 100usec ein Byte, mit Doppelbufferung im UART sind das 200usec Zeit zum abholen.
Wie Du schon gerechnet hast ist die Interrupt Latenzzeit beim 32MHz ZMega <1usec.
Bei Multitasking kommt da noch Registersicherung und Prozess Verwaltung dazu.
Das sind wenige 10 usec. Also sollte es da keinerlei Datenverluste geben.

Diese erwähnten 500usec beziehen sich auch die Anfänge des AVRs mit 2..4MHz Takt.

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

Re: [BUG REPORT] Scheduler interruptible

 · 
Posted: 04.12.2014 - 15:07  ·  #6
Die Antwort gefällt mir. Für den ganz schnellen Datentransfer wäre da ja noch der DMA.
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: 14 · Cache Hits: 14   111   125 · Page-Gen-Time: 0.021167s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI