Shop OBEX P1 Docs P2 Docs Learn Events
PropBasic & Libraries — Parallax Forums

PropBasic & Libraries

FriedVFriedV Posts: 77
edited 2011-10-12 08:15 in Propeller 1
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

Comments

Sign In or Register to comment.