[BUG REPORT] Append stört Serport

  • 1
  • 2
  • 3
  • Page 2 of 3
Thomas.AC
Benutzer
Avatar
Gender: n/a
Age: 43
Posts: 308
Registered: 07 / 2013
Subject:

Re: [BUG REPORT] Append stört Serport

 · 
Posted: 10.12.2015 - 17:04  ·  #9
kann es nicht sein, dass stringInsert lesend auf die Adressen $16 bis $16+25 zugreift und somit auch das UDR Register liest?
25 ist die Länge des Zielstrings.

Edit 1:
Wenn das jetzt genau zu dem Zeitpunkt passiert, wenn die UART Hardware Die Daten vom Shiftregister in das UDR Register schreiben will, kommt es zum Fehler.

Edit 2:
Ja, so ist es. Kann man im Simulator nachvollziehen, dass das Z-Register den Wert $2C bekommt.
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: [BUG REPORT] Append stört Serport

 · 
Posted: 10.12.2015 - 18:08  ·  #10
wow,
poste mal die ASM Zeilen wo das passiert, wenns geht

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

Re: [BUG REPORT] Append stört Serport

 · 
Posted: 10.12.2015 - 18:42  ·  #11
Im nachfolgendem Programmauszug bei SYSTEM._L0046.
Achtung: Es ist ein anderes Programm. Die Sprungmarken sind anders.


ASM CODE:
Code

SYSTEM._StrIns:
                        MOV       _ACCFLO, _ACCFHI
                        ANDI      _ACCFLO, 3
                        TST       _ACCFLO
                        BREQ      SYSTEM._L0024
                        LSR       _ACCFLO
                        BRNE      SYSTEM._L0026
SYSTEM._L0026:
                        LPM       _ACCAHI, Z+
                        RJMP      SYSTEM._L0025
SYSTEM._L0024:
                        LD        _ACCAHI, Z+
SYSTEM._L0025:
                        TST       _ACCAHI
                        BREQ      SYSTEM._L0033
                        MOV       _ACCFLO, _ACCFHI
                        ANDI      _ACCFLO, 10h
                        BREQ      SYSTEM._L0028
SYSTEM._L0028:
                        LD        _ACCALO, X
SYSTEM._L0030:
                        CP        _ACCB, _ACCA
                        BRCC      SYSTEM._L0032
SYSTEM._L0033:
                        RET
SYSTEM._L0032:
                        MOV       _ACCDLO, _ACCB
                        SUB       _ACCDLO, _ACCA
                        MOV       _ACCDHI, _ACCDLO
                        SUB       _ACCDLO, _ACCAHI
                        BRCS      SYSTEM._L0038
                        CP        _ACCALO, _ACCA
                        BRCC      SYSTEM._L0035
                        MOV       _ACCELO, _ACCAHI
                        ADD       _ACCELO, _ACCALO
                        CP        _ACCB, _ACCELO
                        BRCS      SYSTEM._L0034
                        MOV       _ACCB, _ACCELO
SYSTEM._L0034:
                        RJMP      SYSTEM._L0038
SYSTEM._L0035:
                        PUSH      _ACCBLO
                        PUSH      _ACCBHI
                        PUSH      _ACCCLO
                        PUSH      _ACCCHI
                        MOV       _ACCDHI, _ACCALO
                        SUB       _ACCDHI, _ACCA
                        CP        _ACCDHI, _ACCDLO
                        BRCC      SYSTEM._L0036
                        MOV       _ACCDLO, _ACCDHI
SYSTEM._L0036:
                        CLR       _ACCDHI
                        ADD       _ACCBLO, _ACCA
                        ADC       _ACCBHI, _ACCDHI
                        ADD       _ACCBLO, _ACCDLO
                        ADC       _ACCBHI, _ACCDHI
                        ADIW      _ACCBLO, 1
                        MOVW      _ACCCLO, _ACCBLO
                        ADD       _ACCCLO, _ACCAHI
                        ADC       _ACCCHI, _ACCDHI
                        MOV       _ACCDHI, _ACCDLO
                        INC       _ACCDHI
                        MOV       _ACCFLO, _ACCFHI
                        ANDI      _ACCFLO, 10h
                        BREQ      SYSTEM._L0037
SYSTEM._L0037:
                        LD        _ACCGLO, -X
                        ST        -Z, _ACCGLO
                        DEC       _ACCDHI
                        BRNE     SYSTEM._L0037
SYSTEM._L0031:
                        POP       _ACCCHI
                        POP       _ACCCLO
                        POP       _ACCBHI
                        POP       _ACCBLO
                        MOV       _ACCB, _ACCA
                        ADD       _ACCB, _ACCAHI
                        ADD       _ACCB, _ACCDLO
                        BRNE     SYSTEM._L0042
SYSTEM._L0038:
                        ADD       _ACCAHI, _ACCDLO
                        INC       _ACCAHI
SYSTEM._L0042:
                        MOV       _ACCFLO, _ACCFHI
                        ANDI      _ACCFLO, 10h
                        BREQ      SYSTEM._L0045
SYSTEM._L0045:
                        ST        X, _ACCB
SYSTEM._L0044:
                        CLR       _ACCALO
                        ADD       _ACCBLO, _ACCA
                        ADC       _ACCBHI, _ACCALO
SYSTEM._L0043:
                        MOV       _ACCFLO, _ACCFHI
                        ANDI      _ACCFLO, 3
                        TST       _ACCFLO
                        BREQ      SYSTEM._L0046
                        LSR       _ACCFLO
                        BRNE      SYSTEM._L0048
SYSTEM._L0048:
                        LPM       _ACCGLO, Z+
                        RJMP      SYSTEM._L0047
SYSTEM._L0046:
                        LD        _ACCGLO, Z+
SYSTEM._L0047:
                        MOV       _ACCFLO, _ACCFHI
                        ANDI      _ACCFLO, 10h
                        BREQ      SYSTEM._L0049
SYSTEM._L0049:
                        ST        X+, _ACCGLO
SYSTEM._L0050:
                        DEC       _ACCAHI
                        BRNE     SYSTEM._L0043
SYSTEM._L0041:
                        RET

SYSTEM.DefIntErr:
                        RETI


PASCAL CODE dazu:
Code

program isrtable;

{$NOSHADOW}
{ $WG}                     {global Warnings off}

Device = mega32, VCC=5;
{ $BOOTRST $03800}         {Reset Jump to $03800}

Define_Fuses
//  Override_Fuses;
  NoteBook   = A;
  COMport    = USB;
  LockBits0 = [];
  FuseBits0  = [];
  FuseBits1  = [SPIEN, JTAGEN, OCDEN];

Import SysTick, SerPort;

From System Import ;


Define
  ProcClock      = 16000000;       {Hertz}
  SysTick        = 10;             {msec}
  StackSize      = $0064, iData;
  FrameSize      = $0064, iData;
  SerPort        = 19200, Stop2;    {Baud, StopBits|Parity}
  RxBuffer       = 8, iData;
  TxBuffer       = 8, iData;

Implementation

{$IDATA}

{--------------------------------------------------------------}
{ Type Declarations }

type


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

{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA}


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



{--------------------------------------------------------------}
{ Main Program }
{$IDATA}

var txt : string[25];
var c : char;

begin
  c := '3';
  txt := '';
  append(c, txt);

  EnableInts;
  loop
    mdelay(1);

  endloop;
end isrtable.


Gott sei Dank, kann ich wieder gut schlafen. Wie ein 👼

off topic:
Was ist ein Pseudo Register/IO "Scratch...". ?
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: [BUG REPORT] Append stört Serport

 · 
Posted: 10.12.2015 - 19:06  ·  #12
Hallo Thomas,

"Scratch..." gibts nur beim XMega. Mal in ein ASM Listing reinschauen.
Ist nur AVRco intern.
Gut schlafen? Der Bug ist deshalb nicht weg.
Entweder ich verbiete da die Verwendung von chars oder ich baue einen
Hilfsstring in den Compiler ein, sowas wie:

_HelpStr : string[1];

Da gibt es dann allerdings MultiTasking Probs wenn zwei Prozesse Append
oder Insert mit char machen.

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

Re: [BUG REPORT] Append stört Serport

 · 
Posted: 10.12.2015 - 19:31  ·  #13
Hallo Rolf,

ich habe schon viel über den Bug gegrübelt und bin jetzt froh das der Klemmer durchleuchtet ist.
Deswegen kann ich jetzt gut schlafen.

char zu verbieten wäre okay, hätte natürlich den Nachteil, dsas alte Programme nicht mehr übersetzbar wären. StringInsert zu optimieren wäre da eleganter.
Mann müsste doch nur Sorge tragen, das nicht mehr Zeichen gelesen werden als anhand der Längeninformation vorhanden sind, oder?
Dann wäre die Ausführungszeit sogar schneller.

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

Re: [BUG REPORT] Append stört Serport

 · 
Posted: 10.12.2015 - 20:35  ·  #14
Hallo Thomas,

ich habe jetzt ein work-around für die chars in Append, Insert
und StrReplace gefunden. Sollte tun.

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

Re: [BUG REPORT] Append stört Serport

 · 
Posted: 10.12.2015 - 22:28  ·  #15
Hallo Rolf,
Super Einsatz. Und das noch um diese Uhrzeit. Kompliment und Anerkennung! Wenn man dich erst einmal ins Boot bekommen hat, bist du nicht mehr zu stoppen. Das finde ich gut. Danke.
Werde Deinen Patch morgen testen.

Wünsche gute Nacht :-)
Gunter
Administrator
Avatar
Gender:
Location: Frankfurt Main / Germany
Posts: 1697
Registered: 02 / 2003
Subject:

Re: [BUG REPORT] Append stört Serport

 · 
Posted: 10.12.2015 - 23:21  ·  #16
Hi Thomas,

genau das ist es, was wir von keinem Billig-Hersteller bekommen.
Hier kümmert sich der "OberDruide" persönlich um die Probleme der Kunden und
man wird nicht alleine gelassen. Alleine das rechtfertigt schon den Preis für das
(Nischenprodukt) "Pascal Compiler".

Just my 2 Cent
Gunter
  • 1
  • 2
  • 3
  • Page 2 of 3
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   141   155 · Page-Gen-Time: 0.035011s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI