Shop OBEX P1 Docs P2 Docs Learn Events
Sharng variables in another cog — Parallax Forums

Sharng variables in another cog

BTXBTX Posts: 674
edited 2012-05-13 14:03 in Propeller 1
Hi everyone !!
I can't believe it, after so long time using the pchip, Im stucked again with some simple code.
Here's an example of which is my problem now.

Inside the "object code" is the specific question, or, what I can't do now.
I can't explain it easy in English, that's why I post this example to ask you.
Thank you in advance, for your help. !!


This is my main code.
''************************************************
''*  Test for the use of variable in other cog.  *               
''************************************************
''
CON
  _clkmode = xtal1 + pll16x
  _xinfreq = 5_000_000

  TEST_LED        = 19 'demo board pin
  
OBJ
  Control : "Control_Test"
  
VAR
' INPUTS
 byte Input_1      '
 byte Input_2      '

' OUTPUTS
 byte Out_1
 byte Out_2

'Aditional
 byte Variable_1
 byte Variable_2
 
PUB start 

  ' Starts a new cog with these three variables to share.
  Control.Start(@Input_1, @Out_1, @Variable_1)
' Inputs
  Input_1  :=0 
  Input_2  :=0 
' Outputs
  Out_1    :=0
  Out_2    :=0 
' Aditional
  Variable_1  :=0 
  Variable_2  :=0 

  dira[TEST_LED]~~    ' Demo Board LED
  outa[TEST_LED]~
  
  ' Checking the state of the Out_2 output, showing in a LED of the demo board.                        
  repeat
     if Out_2
        outa[TEST_LED]~~
     else 
        outa[TEST_LED]~

And this is Object code:
''************************************
''*  Control Test CODE               *
''************************************
'
CON
  _clkmode = xtal1 + pll16x
  _xinfreq = 5_000_000

VAR
  byte Out_1
  byte Out_2
  
  long  cog
  long  Stack[60]
  
PUB Start(Inputs, Outputs, Aditional) : Success 
   Stop
   Success :=  (Cog := cognew(Control(Inputs, Outputs, Aditional), @Stack) + 1)

   Out_1   :=  byte [Outputs][0]
   Out_2   :=  byte [Outputs][1]

PUB Stop
{{Stop toggling process, if any.}}
  if Cog
    cogstop(Cog~ - 1)
  
PUB Control(Inputs, Outputs, Aditional) 


'This work I know, but I need to control the outputs inside in a PUB or PRI rutine.
' repeat
'       byte [Outputs][1] := 1
'       waitcnt(clkfreq/2 +cnt)
'       byte [Outputs][1] := 0
'       waitcnt(clkfreq/2 +cnt)
 
' How to do work this kind of code??? 
 repeat
       Turn_On
       waitcnt(clkfreq/2 +cnt)
       Turn_Off
       waitcnt(clkfreq/2 +cnt)
     

PUB Turn_On
  'byte [Outputs][1] := 1  ' By this way, shows an error
  Out_2   := 1             ' How to do work this ?
    
PUB Turn_Off
  'byte [Outputs][1] := 0  ' By this way, shows an error
  Out_2   := 0             ' How to do work this ? 

Comments

  • Duane DegnDuane Degn Posts: 10,588
    edited 2012-05-13 09:47
    Make "Out_1" and "Out_2" words to store the addresses received.
    VAR
      word  Out_1, Out_2
    


    In your start method store the address to these word variables.
    Out_1  := Outputs
      Out_2  := Outputs + 1
    


    Whenever you want to store a byte for the other cog to see, use (for example):
    PUB Turn_On
      byte[Out_2] := 1
    
  • BTXBTX Posts: 674
    edited 2012-05-13 10:11
    Thank you so much Duane !! Of course it's working now....

    Let me know if I understood well the problem, basically I used "bytes" instead "words" (not in my example code here, but I've tried some similar code as you do above, without luck using "bytes" :) ....) (I didn't post that code in this question, it's clear)
    I suppose that managing inputs, I shlould do it with words instead bytes too ?

    Thank you again. !!
  • Duane DegnDuane Degn Posts: 10,588
    edited 2012-05-13 11:29
    BTX wrote: »
    I suppose that managing inputs, I should do it with words instead bytes too ?

    Anytime you're storing memory addresses, you'll want to use at least a word sized variable.

    One thing that still trips me up is forgetting to only pass the address of a long, using par, when starting a PASM cog.
  • BTXBTX Posts: 674
    edited 2012-05-13 14:03
    Thank you again Duane.
    My code is full working now !!!.
Sign In or Register to comment.