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.
-------------------------------------------
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;
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;