ASM Error: SYSTEM.Char2Str nicht mehr unterstützt ??

  • 1
  • 2
  • Page 1 of 2
spy
 
Avatar
 
Subject:

ASM Error: SYSTEM.Char2Str nicht mehr unterstützt ??

 · 
Posted: 24.01.2012 - 16:44  ·  #1
Hallo,

ich bin relativ neu in der Microcontroller Programmierung und habe ein AVR-Projekt aus der Computerzeitschrift ct' nachgebaut. Genauer den Midi Keyboard Controller "MIDIVice", entwickelt von Carsten Meyer. Das ganze funktioniert recht gut ... Ich würde nun gerne den Source-Code meinen Ansprüche anpassen, habe es aber noch nicht geschafft, den Code erfolgreich zu kompilieren

Ich bekomme folgenden Fehler:
internal assembler error 6408
und AVRco zeigt auf die Assembler-Zeile
RCALL SYSTEM.Char2Str

Der Autor hat das Projekt ebenfalls mit AVRco entwickelt. Wenn ich das richtig sehe, muss es damals in seiner Entwicklungsumgebung die System-Routine Char2Str gegeben haben (das Projekt ist von 2004).

Weiss jemand ob diese Routine während der Weiterentwicklung von AVRco rausgefallen ist, und kann mir jemand helfen, diese selbst zu implementieren ? Leider bin ich noch nicht so fit in Assembler um zu verstehen was dort genau passieren soll.

Im folgenden die komplette Implementierung der Prozedur.

Schon mal vielen Dank ich Voraus, Daniel.

-------------------------------------------
Code

procedure ROMStr16Out(myAdr : pointer);
{Kurze, schnelle Ausgabe eines 16 Zeichen langen Strings
 aus ROM über Adresspointer. Addiert 1 zum Pointer wg. Pascal-Längenbyte,
 bricht bei 0-Byte ab (C-String-kompatibel)}
begin
  asm;
    LDD       _ACCCLO, Y+000h
    LDI       _ACCA,1
    ADD       _ACCCLO,_ACCA     ;Pascal-Längenbyte übergehen (+1)
    CLR       _ACCA
    LDD       _ACCCHI, Y+001h
    ADC       _ACCCHI,_ACCA

    PUSH      _FRAMEPTR
    PUSH      _FPTRHI
    LDI       _ACCA, 1 SHLB _DEVICE
    OR        Flags, _ACCA
    LDI       _ACCB, SYSTEM.LCDOut_M SHRB 1
    LDI       _ACCA, SYSTEM.LCDOut_M SHRB 9
    ST        -Y, _ACCA
    ST        -Y, _ACCB
    LDI       _ACCBHI, 16
StrConst2Str:
    LPM       _ACCA, Z+
    TST       _ACCA
    BREQ      ROMStr16OutEnd    ;wenn 0-Byte, abbrechen
    RCALL     SYSTEM.Char2Str
    DEC       _ACCBHI
    BRNE      StrConst2Str
ROMStr16OutEnd:
    POP       _FPTRHI
    POP       _FRAMEPTR
  endasm;
end;
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: ASM Error: SYSTEM.Char2Str nicht mehr unterstützt ??

 · 
Posted: 24.01.2012 - 17:55  ·  #2
Hallo Daniel,
Char2Str ist eine System interne Funktion die normalerweise nicht direkt von der Applikation aus aufgerufen werden kann.
Im vorliegenden Fall wird dies mit Tricks erreicht. Das zu erklären würde hier zu weit führen.

rolf
spy
 
Avatar
 
Subject:

Re: ASM Error: SYSTEM.Char2Str nicht mehr unterstützt ??

 · 
Posted: 24.01.2012 - 18:29  ·  #3
Hallo Rolf

Danke für die schnelle Antwort. Das hilft mir nur jetzt nicht weiter.
Wie löse ich das Problem und schaffe es den Code komplett zu kompilieren ?

Ich nutze die aktuelleste AVRco Mega8 Version

Wenn ich auf "Make Project" klicke startet der Assemblierungs Vorgang ;) dann ...

1. öffnet sich ein Fenster "Error" mit dem Inhalt: internal assembler error 6408

2. zeigt mirARVco im resultierenden Assembler Code auf folgende Stelle
Code

...
                        .LINE     711
                        TST       _ACCA
                        .LINE     712
                        BREQ      ROMStr16OutEnd    ;wenn 0-Byte, abbrechen
                        .LINE     713
============>          RCALL     SYSTEM.Char2Str
                        .LINE     714
                        DEC       _ACCBHI
                        .LINE     715
                        BRNE      StrConst2Str



3. Ein Fenster "Error" : Make: 1 error found; geht auf, und

4. Die Fehlerconsole sagt mir: Error: parameter error


Funktioniert der von dir erwähnte Trick bei mir nicht ? ... Ich habe bis jetzt keine Ahnung wie ich weiter kommen soll und bitte um Tipps.

Liebe Grüße, Daniel
Merlin
Administrator
Avatar
Gender:
Age: 24
Posts: 1408
Registered: 03 / 2005
Subject:

Re: ASM Error: SYSTEM.Char2Str nicht mehr unterstützt ??

 · 
Posted: 24.01.2012 - 19:34  ·  #4
Hi Daniel.

Change RCALL top CALL.

Regards

Merlin.
spy
 
Avatar
 
Subject:

Re: ASM Error: SYSTEM.Char2Str nicht mehr unterstützt ??

 · 
Posted: 24.01.2012 - 20:00  ·  #5
Thanks Merlin,

i appreciate your help ! but the error remains the same ;( ...

Can AVRco access the assembler code of SYSTEM ?
When i search through the resulting "MIDIVise.asm" there is no definition of SYSTEM.Char2Str.

Do i have to include the necessary definitions myself, or can i inlcude a procedure that needs SYSTEM.Char2Str to force AVRco to include the related assembler code.

I'm totally new to Pascal, assembly and AVRco. I'm only experienced in C,C++ and the build process on Linux machines using GCC/GNU Make and so on..

regards,
Daniel

@Rolf: Ich verstehe, wenn du keine Aufsätze schreiben kannst/willst, wenns im Rahmen des möglichen ist, wäre es aber nett wenn du das ganze kurz und knapp umreißen könntest. Ich bin hier zwar Newby aber ich habe im Allgemein bisschen Ahnung vom Programmieren, vielleicht helfen mir ja ein paar Stichworte um zu verstehen, wass der Kern ist.

@Merlin: If you need more information, ask me. I'll do my best and i'm keen on learning new things
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: ASM Error: SYSTEM.Char2Str nicht mehr unterstützt ??

 · 
Posted: 24.01.2012 - 20:36  ·  #6
Hallo Daniel,

Char2Str wird von diversen string operationen benutzt. Falls solche nicht in der App Source vorhanden sind, dann ist diese System Funktion auch nicht vorhanden. Mal im ASM Listing danach suchen.

Ein Import kann auch erzwungen werden z.B. mit "StringXY:= charABC;" oder ähnlich.

rolf
spy
 
Avatar
 
Subject:

Re: ASM Error: SYSTEM.Char2Str nicht mehr unterstützt ??

 · 
Posted: 24.01.2012 - 21:16  ·  #7
Super !

Danke Rolf, das hat den Trick gemacht ...
ich habe einen String als auch ein Char zu Begin als var deklariert
Code

var sforce : string[5] = 'test'+char(0);
var cforce : char = char(0);

in meiner Initialisierung Funktion als erstes Statement dann dem string das ensprechende char zugewiesen:
Code

sforce := cforce;


Nun kein Assembler Error mehr, ich frage mich nur ob es da ein schöneres Workarround gibt ??

Gibt es eine möglichkeit Char2Str über die Imports reinzubekommen ? Derzeit habe ich:
Code

Import SysTick, SerPort, ADCPort, TWImaster, I2Cexpand, LCDmultiPort;


Weiss man in welcher Datei/Include/Unit Char2Str zu finden ist ?

[EDIT]: Im ASM-Listing ist SYSTEM.Char2Str trotzdem NICHT zu finden !!!


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

Re: ASM Error: SYSTEM.Char2Str nicht mehr unterstützt ??

 · 
Posted: 24.01.2012 - 21:49  ·  #8
Hallo Daniel,

Char2Str ist eine System Funktion die sich im Code-Generator befindet, nicht in einem File, Include, Unit etc.
Und sie ist vorhanden wenn string Operationen in der Pascal Source vorhanden sind. Auszug aus dem ASM File:
Code
SYSTEM.Char2Str:
                        PUSH      _ACCCLO
                        PUSH      _ACCCHI

rolf
  • 1
  • 2
  • Page 1 of 2
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: 14   136   150 · Page-Gen-Time: 0.024658s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI