PDA

View Full Version : Solved PropBasic & Libraries



FriedV
10-10-2011, 05:43 PM
Hi,
doesn't PropBasic support nested libraries?
This code works ok, no errors from PropBasic neither from Homespun:
Std.Lib:


' ----------------------------------------------------------------------
' File...... Std.lib
' Author.... fgvissel 10.10.2011
' Library Std, Delay Subs & idx vars
' ================================================== ====================

' ----- External Libs --------------------------------------------------

' ----- Conditional Compilation Symbols --------------------------------

' ----- Constants ------------------------------------------------------

' ----- IO Pins --------------------------------------------------------

' ----- Shared (HUB) Variables (Byte, Word, Long) ----------------------

' ----- User Data (DATA, WDATA, LDATA, FILE) ---------------------------

' ----- TASK Definitions -----------------------------------------------

' ----- Local Variables (LONG only) ------------------------------------
t1 var long 'those are temp vars for temporary use
t2 var long 'mind they are global
t3 var long
t4 var long
t5 var long

' ----- SUB and FUNC Definitions ---------------------------------------
DelayMS SUB 1
DelayUS SUB 1

'{$CODE}
' ----- SUB and FUNC Code ----------------------------------------------
SUB DelayMS
pause __param1
ENDSUB

SUB DelayUS
pauseus __param1
ENDSUB

'{$TASKS}
'------ Task Code ------------------------------------------------------



'================================================= ======================
Main Program:


' ----------------------------------------------------------------------
' File...... DogM162.pbas
' Author.... fgvissel 09.10.2011
' for Propeller with 6,26 MHz X-tal
' Uses only Std.Lib, Dog Subs local
' ================================================== ====================

' ----- Device Settings ------------------------------------------------
DEVICE P8X32A, XTAL1, PLL16X
XIN 6_250_000

' ----- External Libs --------------------------------------------------
'{$ifndef StdLib}
'{$define StdLib}
LOAD "C:\work\propeller\propbasic\library\Std.Lib"
'{$endif}

' ----- Conditional Compilation Symbols --------------------------------

' ----- Constants ------------------------------------------------------

' ----- IO Pins --------------------------------------------------------
D0 Pin 0 'Live signal

RS Pin 20 High '<--> EA DogM16x Pin 39
CSB Pin 21 High '<--> EA DogM16x Pin 38
MOSI Pin 23 Low '<--> EA DogM16x Pin 28
MCLK Pin 22 High '<--> EA DogM16x Pin 29

' ----- Shared (HUB) Variables (Byte, Word, Long) ----------------------

' ----- User Data (DATA, WDATA, LDATA, FILE) ---------------------------

' ----- TASK Definitions -----------------------------------------------

' ----- Local Variables (LONG only) ------------------------------------
delta VAR LONG
target VAR LONG
counter VAR LONG

' ----- SUB and FUNC Definitions ---------------------------------------
Dog_OutChar SUB 1
Dog_OutString SUB 1
Dog_Init_162 SUB

' ================================================== ====================

PROGRAM Start
Start:
Dog_Init_162

Main:
Dog_OutString "0123456789ABCDEF"
low RS 'Command
Dog_OutChar $C0 'set RAM address $40
Dog_OutString "Line 2"

delta = _FREQ /10
target = cnt + delta
do
toggle D0
waitcnt target, delta
loop
END

' ----- SUB and FUNC Code ----------------------------------------------
SUB Dog_OutChar
shiftout MOSI, MCLK, MSBFIRST, __param1
DelayUS 50
ENDSUB

SUB Dog_OutString
t1 = __param1 'hub address of string
t2 = len __STRING(t1)
high RS 'data
t2 = t2 - 1
for t3 = 0 to t2
RDBYTE t1, t4
Dog_OutChar t4
inc t1
next
ENDSUB

SUB Dog_Init_162
DelayMS 75 'Init DOGM-162 LCD for 5V, 8bit SPI operation
low CSB 'Chip select, Sync with Propeller
low RS 'Command mode for LCD
Dog_OutChar $38
Dog_OutChar $39
Dog_OutChar $1C
Dog_OutChar $74
Dog_OutChar $52
Dog_OutChar $69
DelayUS 250
Dog_OutChar $0F
Dog_OutChar $01 'Clear Display
DelayMS 2 'End of Init
ENDSUB


' ----- TASK Code ------------------------------------------------------



' ----------------------------------------------------------------------
But if I build another library for the dog LCD code:

Std.Lib as before,
Dog.Lib:


' ----------------------------------------------------------------------
' File...... Dog.lib
' Author.... fgvissel 10.10.2011
' Library Dog, Driver for EA_DogM16x LCD
' Uses Std.Lib
' ================================================== ====================

' ----- External Libs --------------------------------------------------
'{$ifndef StdLib}
'{$define StdLib}
LOAD "C:\work\propeller\propbasic\library\Std.Lib"
'{$endif}

' ----- Conditional Compilation Symbols --------------------------------

' ----- Constants ------------------------------------------------------

' ----- IO Pins --------------------------------------------------------
RS Pin 20 High '<--> EA DogM16x Pin 39
CSB Pin 21 High '<--> EA DogM16x Pin 38
MOSI Pin 23 Low '<--> EA DogM16x Pin 28
MCLK Pin 22 High '<--> EA DogM16x Pin 29

' ----- Shared (HUB) Variables (Byte, Word, Long) ----------------------

' ----- User Data (DATA, WDATA, LDATA, FILE) ---------------------------

' ----- TASK Definitions -----------------------------------------------

' ----- Local Variables (LONG only) ------------------------------------

' ----- SUB and FUNC Definitions ---------------------------------------
Dog_OutChar SUB 1
Dog_OutString SUB 1
Dog_Init_162 SUB

'{$CODE}
' ----- SUB and FUNC Code ----------------------------------------------
SUB Dog_OutChar
shiftout MOSI, MCLK, MSBFIRST, __param1
DelayUS 50
ENDSUB

SUB Dog_OutString
t1 = __param1 'hub address of string
t2 = len __STRING(t1)
high RS 'data
t2 = t2 - 1
for t3 = 0 to t2
RDBYTE t1, t4
Dog_OutChar t4
inc t1
next
ENDSUB

SUB Dog_Init_162
DelayMS 75 'Init DOGM-162 LCD for 5V, 8bit SPI operation
low CSB 'Chip select, Sync with Propeller
low RS 'Command mode for LCD
Dog_OutChar $38
Dog_OutChar $39
Dog_OutChar $1C
Dog_OutChar $74
Dog_OutChar $52
Dog_OutChar $69
DelayUS 250
Dog_OutChar $0F
Dog_OutChar $01 'Clear Display
DelayMS 2 'End of Init
ENDSUB

'{$TASKS}
'------ Task Code ------------------------------------------------------



'================================================= ======================
Main Program:


' ----------------------------------------------------------------------
' File...... DogM162.pbas
' Author.... fgvissel 09.10.2011
' for Propeller with 6,26 MHz X-tal
' Uses Dog.Lib
' ================================================== ====================

' ----- Device Settings ------------------------------------------------
DEVICE P8X32A, XTAL1, PLL16X
XIN 6_250_000

' ----- External Libs --------------------------------------------------
'{$ifndef DogLib}
'{$define DogLib}
LOAD "C:\work\propeller\propbasic\library\Dog.Lib"
'{$endif}

' ----- Conditional Compilation Symbols --------------------------------

' ----- Constants ------------------------------------------------------

' ----- IO Pins --------------------------------------------------------
D0 Pin 0 'Live signal

' ----- Shared (HUB) Variables (Byte, Word, Long) ----------------------

' ----- User Data (DATA, WDATA, LDATA, FILE) ---------------------------

' ----- TASK Definitions -----------------------------------------------

' ----- Local Variables (LONG only) ------------------------------------
delta VAR LONG
target VAR LONG
counter VAR LONG

' ----- SUB and FUNC Definitions ---------------------------------------

' ================================================== ====================

PROGRAM Start
Start:
Dog_Init_162

Main:
Dog_OutString "0123456789ABCDEF"
low RS 'Command
Dog_OutChar $C0 'set RAM address $40
Dog_OutString "Line 2"

delta = _FREQ /10
target = cnt + delta
do
toggle D0
waitcnt target, delta
loop
END

' ----- SUB and FUNC Code ----------------------------------------------

' ----- TASK Code ------------------------------------------------------

' ----------------------------------------------------------------------

PropBasic compiles ok, but homespun complains:
---------- HomeSpun To RAM ----------
Homespun Spin Compiler 0.31d
parsing C:\Work\Propeller\PropBasic\Programs\DogM162.spin
Error: C:\Work\Propeller\PropBasic\Programs\DogM162.spin (106, 19): Unexpected mov
mov __temp1,MOSI ' shiftout MOSI, MCLK, MSBFIRST, __param1
^
Where is my error?
Thanks, Friedrich

FriedV
10-11-2011, 07:25 AM
@Bean
I just looked at the spin file and the dog.lib subroutines are there twice.
If I delete the first set all is well. I have attached all the test files.
85830
Cheers, Fried

FriedV
10-12-2011, 04:15 PM
LOAD cannot be nested.