Shop OBEX P1 Docs P2 Docs Learn Events
propBASIC 'TASK ... ENDTASK' — Parallax Forums

propBASIC 'TASK ... ENDTASK'

RsadeikaRsadeika Posts: 3,837
edited 2010-05-17 21:48 in Propeller 1
"* SUBs and FUNCs are not shared between cogs." Does anybody have any ideas of how to get around this problem. I would like to declare a FUNC in the main cog, but be able to use it, or call it in different TASKs. I would like to create one 'serin', 'serout' function, and be able to use it, or call it, in multiple TASKs. It looks like a lot of duplicate code being used if you have to declare a new 'serin/serout' FUNC in the different TASKs. Any code snippets for achieving this would be appreciated.

Thanks

Ray

Comments

  • BeanBean Posts: 8,129
    edited 2010-05-15 21:54
    Ray,
    You can't do that. TASKs are in a different cog. One cog cannot "see" the code in a different cog.
    Just create the same subroutine for the TASK that needs it.

    Bean

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Use BASIC on the Propeller with the speed of assembly language.
    PropBASIC thread http://forums.parallax.com/showthread.php?p=867134

    March 2010 Nuts and Volts article·http://www.parallax.com/Portals/0/Downloads/docs/cols/nv/prop/col/nvp5.pdf
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    There are two rules in life:
    · 1) Never divulge all information
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    If you choose not to decide, you still have made a choice. [noparse][[/noparse]RUSH - Freewill]
  • JonnyMacJonnyMac Posts: 9,208
    edited 2010-05-15 23:11
    This is where the LOAD command is used; if you have a subroutine or function that is handy, save a copy to a separate file and load it as needed in the cogs that need the functionality.

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    Jon McPhalen
    Hollywood, CA
  • RsadeikaRsadeika Posts: 3,837
    edited 2010-05-16 09:45
    I am still not sure how the 'load' command is to be used. Does it insert the code at the place where 'load xxxx' is placed in the program? If that is the case, then the duplication of code still exits through out the total program. JonnyMac had mentioned that 'serin' creates a lot of assembly code, so if you use that in a couple of different spots ... I guess maybe I will have to consider a 'TASK' for 'serin/serout', and try to make it so other cogs can get access to that 'TASK' via hub variables, so I guess this 'TASK' will constantly be in a 'do ... loop', or something along those lines. I wonder if that would work?

    Ray
  • BeanBean Posts: 8,129
    edited 2010-05-16 11:12
    Ray,
    Yes, LOAD just inserts the code.

    You COULD use a seperate task for SERIN and SEROUT, but I think you are making it more complecated than it needs to be. The amount of code generated by SERIN or SEROUT is not that much. If you use it alot, put it in a subroutine. If you use SERIN or SEROUT in multiple cogs, just put the subroutine in each of them.

    Now putting SERIN in a seperate task will have the advantage of not missing any incoming characters.

    And I do have one program that puts SEROUT in a seperate cog because it needs to acquire data in real-time and it cannot afford to wait for SEROUT to finish sending the data string.

    Bean

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Use BASIC on the Propeller with the speed of assembly language.
    PropBASIC thread http://forums.parallax.com/showthread.php?p=867134

    March 2010 Nuts and Volts article·http://www.parallax.com/Portals/0/Downloads/docs/cols/nv/prop/col/nvp5.pdf
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    There are two rules in life:
    · 1) Never divulge all information
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    If you choose not to decide, you still have made a choice. [noparse][[/noparse]RUSH - Freewill]
  • RsadeikaRsadeika Posts: 3,837
    edited 2010-05-16 11:41
    Which demo program is that? I thought I glanced at all of them, but I did not notice what you had described.

    Ray
  • JonnyMacJonnyMac Posts: 9,208
    edited 2010-05-16 12:28
    In my N&V column on PropBASIC I show how to put SERIN into a TASK so that it is only compiled once and you end up with buffering.

    www.parallax.com/Portals/0/Downloads/docs/cols/nv/prop/col/nvp5.pdf

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    Jon McPhalen
    Hollywood, CA
  • RsadeikaRsadeika Posts: 3,837
    edited 2010-05-17 19:46
    Below is a 'TASK' snippet, the problem that I am having is, when 'message' gets displayed on the terminal, I get "+is the place!". The·'message' string is getting shorted,·did I miss something with the usage of data strings?

    Ray

    '==============
    TASK BlueT LMM
    message data "This is the place!",13
    rxResult var long
    do
    serin 5, T57600, rxResult
    if rxResult = 13 then exit
    loop
    serout 6, T57600, message
    pause 1000
    do
    serin 5, T57600, rxResult
    if rxResult = "a" then
    high 0
    high 3
    endif
    if rxResult = "b" then
    low 0
    low 3
    endif
    loop

    ENDTASK
  • JonnyMacJonnyMac Posts: 9,208
    edited 2010-05-17 20:39
    Perhaps it has something to do with your device; BlueTooth?

    BTW, that's a very small task and there is no reason to make it LMM -- keep it in one cog and run it full speed.

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    Jon McPhalen
    Hollywood, CA
  • RsadeikaRsadeika Posts: 3,837
    edited 2010-05-17 20:56
    I guess I will have find your SUB for doing strings one byte at a time, and see if there is an improvement. This TASK is going to grow into a UI of sorts, so I want to see at what point it all starts to bog down. The main cog is also making use of LMM, even though it is quite small in code lines. As for the BlueTooth, I was having the same problem with the bst terminal, and PST. I thought it would go away with BlueTooth.

    Ray
  • BeanBean Posts: 8,129
    edited 2010-05-17 21:02
    Ray,
    · Try making the SEROUT pin high (idle) well before you try sending data.
    · Also you need to put a zero at the end of the string. This is only done for you with in-line strings.


    TASK BlueT
     
    message data "This is the place!",13, 0 ' I added the zero to the end
     
    rxResult var long
     
    high 6  ' I added this line
     
    do
      serin 5, T57600, rxResult
    loop until rxResult = 13
     
    serout 6, T57600, message
    pause 1000
     
    do
      serin 5, T57600, rxResult
      if rxResult = "a" then
        high 0
        high 3
      endif
      if rxResult = "b" then
        low 0
        low 3
      endif
    loop
    
    ENDTASK
    
    


    Bean

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Use BASIC on the Propeller with the speed of assembly language.
    PropBASIC thread http://forums.parallax.com/showthread.php?p=867134

    March 2010 Nuts and Volts article·http://www.parallax.com/Portals/0/Downloads/docs/cols/nv/prop/col/nvp5.pdf
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    There are two rules in life:
    · 1) Never divulge all information
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    If you choose not to decide, you still have made a choice. [noparse][[/noparse]RUSH - Freewill]

    Post Edited (Bean) : 5/17/2010 9:09:04 PM GMT
  • RsadeikaRsadeika Posts: 3,837
    edited 2010-05-17 21:25
    Just tried your suggestions, and it works, thanks. I tried the string with a terminating zero, and without the terminating zero, both worked. So, to be on the safe side what problems would I run into if I did not use the terminating zero? Since I anticipate having a lot of string data, is there a better solution for handling the string data? I am going to be testing string input, and do a particular response, so there will be a lot of string data to deal with.


    Ray
  • BeanBean Posts: 8,129
    edited 2010-05-17 21:48
    Ray, If you don't have the zero, the SEROUT command will just keep sending characters until is happens to run across a zero in memory.

    Bean

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Use BASIC on the Propeller with the speed of assembly language.
    PropBASIC thread http://forums.parallax.com/showthread.php?p=867134

    March 2010 Nuts and Volts article·http://www.parallax.com/Portals/0/Downloads/docs/cols/nv/prop/col/nvp5.pdf
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    There are two rules in life:
    · 1) Never divulge all information
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    If you choose not to decide, you still have made a choice. [noparse][[/noparse]RUSH - Freewill]
Sign In or Register to comment.