Shop OBEX P1 Docs P2 Docs Learn Events
PropBasic, Viewport and Spin interoperabilty? — Parallax Forums

PropBasic, Viewport and Spin interoperabilty?

pmrobertpmrobert Posts: 677
edited 2011-11-02 15:18 in Propeller 1
PropBasic and Viewport play together quite nicely, thanks to the authors! I'm trying to add a Spin based ADC driver into some working PropBasic code via the Spin dispatcher technique outlined in the main PropBasic thread. the problem I'm encountering is that while the code compiles it will not successfully load - Viewport gives the error dialog stating "Failed to configure on COM2". If I comment out the Spin dispatch code all is well. I'm obviously missing something very basic. Attached is the non-working PB code with the Spin dispatch code active, the generated code and the driver referenced in the dispatcher.
Attachment not found.
Max1270_Ray.spin

Comments

  • HannoHanno Posts: 1,130
    edited 2011-11-02 14:12
    Hi pmrobert!
    Thanks :)
    I wasn't able to compile because I'm missing some files: "wheelsignal", "decoder" and "inj_1"
    However, I think I've found the problem- you call
    Coginit(1,@__Init, @__DATASTART) in your "spinstart" method. Cog 0 runs the main spin program. Before calling your SpinStart method, PropBasic starts the conduit object- which then runs in Cog 1. You then overwrite that cog with your method- so ViewPort isn't able to connect!
    Let me know how you go- either change to the "cognew" call or load into a different cog.
    Hanno
  • pmrobertpmrobert Posts: 677
    edited 2011-11-02 14:31
    I figured I was stomping on conduit somehow - I've already tried cognew and coginit with other specified cog IDs, no change. The missing files will be generated by PropBasic when you compile vptest.pbas. They are .spin files generated for each task present in vptest.pbas. I tried killing all references to Viewport to no avail, there's still a bunch of VP specific code generated by PB. I also tried loading to RAM/EEPROM without VP support from VP's Run command (Shift-F3 & F4) and a reference to VPWatch is still generated:
    PUB __Program | __VarsPtr                                    'PROGRAM MAIN
      __VarsPtr := 0                                            
      wheelsignal_COG:=wheelsignal.Init(@__DataStart, @VP_Watch)
      decoder_COG:=decoder.Init(@__DataStart, @VP_Watch)        
      inj_1_COG:=inj_1.Init(@__DataStart, @VP_Watch)            
      CogInit(0, @__Init, __VarsPtr)
    
    Here's a version that will compile due to the spin dispatch being commented out:
    vptest.pbas
  • HannoHanno Posts: 1,130
    edited 2011-11-02 15:03
    Hi,
    I got it!
    In order to use ViewPort, the Conduit object must be running in a cog. If you don't start it, overwrite it, or conflict with the pins it uses (30,31)- then ViewPort won't be able to communicate with the Propeller.

    You're not starting it!

    The vptest.spin has 2 spin methods- "__Program" and "SpinStart". Since "SpinStart" is first, it will execute- but it never calls "__Program"- so vp_config never gets called.
    Fixing the vptest.spin is easy, either move the "__Program" method to the top, or call "__Program" from "SpinStart".

    I haven't been able to move things around in the "pbas" file to get the PropBasic compiler to do the right thing. Ideally, the PropBasic compiler should ensure that user code is always placed below PropBasic intialization code...
    Hanno
  • pmrobertpmrobert Posts: 677
    edited 2011-11-02 15:18
    Hanno, thanks so much! It now compiles and seems to work correctly after I manually moved "SpinStart" below "__Program" in the generated .spin file. I'll fool with various approaches in the .pbas file to see if the compiler can place things in the correct order. Hopefully Bean will see this thread and clarify as to the best way to make this work with PB. Again, thank you!

    -Mike
Sign In or Register to comment.