Hallo zusammen,
ich möchte für Bascom eine Library erstellen, habe aber anscheinend noch einige Verständnisschwierigkeiten. Vielleicht kann mir ja hier jemand helfen. Die Parameterübergabe über den SoftStack ist mir soweit klar, es gibt jedoch beim Compilieren noch Fehlermeldungen.
Einen Ausschnitt aus meiner Library
Zu Begin der Library gibt es einige Definitionen. Die Definitionen, welche sich auf Port-Zugriff beziehen, sollen später außerhalb der Lib im Bascom-Programm festgelegt werden.
In der Lib sind mehrere Routinen, ich habe oben nur zwei aufgelistet, damit es übersichtlich bleibt. Im Moment sind es folgende:
Nun zu meinen Problemen:
Beim Compilieren gibt es noch mehrere Fehler.
Die Routine _ScreenFillRGB kennt zum Beispiel die in ihr aufgerufenen Routinen nicht, auch die .def Definitionen zu Begin der Lib kennt die Routine nicht.
Ich habe mir auch Libs angesehen, die im Lib Verzeichnis von Bascom sind und auch einige Sachen probiert, leider habe ich noch keinen Erfolg gehabt.
Kann mir vielleicht jemand Helfen, meinen "Knoten aufzubekommen".
Gruß,
Dirk
ich möchte für Bascom eine Library erstellen, habe aber anscheinend noch einige Verständnisschwierigkeiten. Vielleicht kann mir ja hier jemand helfen. Die Parameterübergabe über den SoftStack ist mir soweit klar, es gibt jedoch beim Compilieren noch Fehlermeldungen.
Einen Ausschnitt aus meiner Library
Code:
.equ XVCMD_ScreenFillRGB = 0x1B
.equ XV_CNTRLPORT = PORTB
.equ XV_CNTRLCS = PB0
.equ XV_CNTRLPORTPIN = PINB
.equ XV_CNTRLBUSY = PB4
[B][_ScreenFillRGB][/B]
_ScreenFillRGB:
rcall _XV_WaitWhileBusy
cbi XV_CNTRLPORT, XV_CNTRLCS
rcall _XV_Wait5us
ldi r16, XVCMD_ScreenFillRGB
rcall _XV_SendSPI
rcall _XV_WaitWhileNotBusy
ldd xl, y + 0 ; Red
ldd xh, y + 1
ld r16, x
rcall _XV_SendSPI
ldd xl, y + 2 ; Green
ldd xh, y + 3
ld r16, x
rcall _XV_SendSPI
ldd xl, y + 4 ; Blue
ldd xh, y + 5
ld r16, x
rcall _XV_SendSPI
rcall _XV_WaitWhileBusy
sbi XV_CNTRLPORT, XV_CNTRLCS
rcall _XV_Wait5us
ret
[B][END][/B]
[B][_XV_SendSPI][/B]
_XV_SendSPI:
out SPDR, r16
_xv_spisend_loop:
in r16, SPSR
sbrs r16, SPIF ; if SPIF (Bit7) set, then skip
rjmp _xv_spisend_loop
in r16, SPDR
ret
[B][END][/B]
In der Lib sind mehrere Routinen, ich habe oben nur zwei aufgelistet, damit es übersichtlich bleibt. Im Moment sind es folgende:
- _ScreenFillRGB (wird vom Bascom-Programm aufgerufen)
- _XV_SendSPI (wird innerhalb der Lib benötigt und von _ScreenFillRGB aufgerufen)
- _XV_WaitWhileBusy (wird innerhalb der Lib benötigt und von _ScreenFillRGB aufgerufen)
- _XV_WaitWhileNotBusy (wird innerhalb der Lib benötigt und von _ScreenFillRGB aufgerufen)
- _XV_Wait5us (wird innerhalb der Lib benötigt und von _ScreenFillRGB aufgerufen)
Code:
$lib "MeineLibrary.lib"
$external _Screenfillrgb
Declare Sub _Screenfillrgb(Red As Byte , Green As Byte , Blue As Byte)
Beim Compilieren gibt es noch mehrere Fehler.
Die Routine _ScreenFillRGB kennt zum Beispiel die in ihr aufgerufenen Routinen nicht, auch die .def Definitionen zu Begin der Lib kennt die Routine nicht.
Ich habe mir auch Libs angesehen, die im Lib Verzeichnis von Bascom sind und auch einige Sachen probiert, leider habe ich noch keinen Erfolg gehabt.
Kann mir vielleicht jemand Helfen, meinen "Knoten aufzubekommen".
Gruß,
Dirk