COGNEW
– Referencia de Lenguaje Spin
código Spin (Sintaxis 1)
Para correr un método spin en otro cog la instrucción
sus parámetros y un apuntador a un espacio de pila. Por ejemplo:
VAR
long SqStack[6]
PUB Main | X
X := 2
cognew(Square(@X), @SqStack) 'Inicia square cog
<check X here>
PUB Square(XAddr)
repeat
long[XAddr] *= long[XAddr] 'Valor cuadrado almacenado
waitcnt(2_000_000 + cnt)
Este ejemplo muestra dos métodos,
infinitamente, entonces
XAddr
el valor de
, lo eleva al cuadrado y almacena el resultado de regreso en
millones de ciclos antes de hacerlo nuevamente. Hay mas explicaciones pero el resultado es
X
que
inicia como 2, y el segundo cog que corre
65536 y finalmente a 0 (sobre flujo de 32 bits), todo esto independientemente de que el
primer cog puede estar verificando el valor de
Main
El método
declara una variable local,
COGNEW
un nuevo cog usando
COGNEW
Square(@X)
parámetro de
,
este caso pasamos la dirección de la variable
la dirección del espacio de pila reservado para el nuevo cog. Cuando un cog inicia para correr
código spin necesita espacio de pila donde almacenar datos. Este ejemplo solo requiere 6
longs de pila para la operación (ver La Necesidad de Espacio de Pila, para mayor
información).
COGNEW
Después de ejecutar
Main
y el segundo se inicia en el método
código del mismo objeto spin están corriendo independientemente. La línea "
here>
" puede reemplazarse con código que usa el valor de
Pagina 82 · Manual Propeller v1.1
'Espacio de pila para Square cog
'Inicia X
'Ciclo aqui y checa X
'Cuadrado del valor en XAddr
'Repite el siguiente infinito
'Espera 2 millones de ciclos
Main
Square
y
Main
monitorea el resultado en
X
X
, que se active en 2 en su primer línea.
, para correr el método
, es el método Spin a correr y se requiere el parámetro; en
X
. El segundo parámetro de
, hay dos cogs corriendo, el primero aun corriendo en el método
Square
COGNEW
necesita el nombre del método,
Main
.
inicia un cog que corre
X
Square
.
, que lo corre otro cog toma
Square
, continuamente activa
o desarrollando otras tareas.
Square
en un cog separado. El primer
. Aun con el hecho de que están usando
X
de alguna forma.
Square
XAddr
, espera 2
X
a 4, 16, 256,
Main
inicia
COGNEW
@SqStack
,
, es
<check X