Práctica de Objetos
método
se inicia en un nuevo Cog también recibe copia de sus direcciones. Cada vez que el
Blink
ciclo
del método
repeat
con
pin := long[pinAddress]
almacena la dirección el operador
rateAddress
Variables Globales vs. Locales : En este programa las variables pinAddress y rateAddressse pasan al
método Start por el objeto padre como parámetros. EL método Start transmite estos valores al método Blink
como parámetros también. Ambos métodos Start y Blink terminan con sus propias variables locales
pinAddress y rateAddress porque las variables locales solo son accesibles por el método que las declara.
Otra práctica común en hacer que el método Start copie parámetros que recibe de variables globales
declaradas en el bloque de objeto VAR. Otros métodos en el objeto pueden leer de y escribir a estas variables
globales según se necesite. Tenga en cuenta que diferentes Cogs pueden ejecutar código en diferentes
métodos. Aun así ambos métodos pueden trabajar con variables globales de objetos. N ejemplo de esta
práctica importante se demuestra en la siguiente practica Dentro del Objeto MonitorPWM en la pagina 167.
Examine el objeto AddressBlinker.spin y ponga atención a las relaciones que acabamos de
discutir.
'' Archivo: AddressBlinker.spin
'' Ejemplo de administración de Cog que ve variables en su objeto padre
VAR
long stack[10]
byte cog
PUB Start(pinAddress, rateAddress) : success
''Inicia un Nuevo proceso en un Cog Nuevo. Regresa True si tiene éxito.
''Parámetros: pinAddress - long dirección de la variable que almacena el pin E/S
''
rateAddress - long dirección de la variable que almacena el tiempo
Stop
success := (cog := cognew(Blink(pinAddress, rateAddress), @stack) + 1)
PUB Stop
''Detiene el proceso blinking, si existe.
if Cog
cogstop(Cog~ - 1)
PRI Blink(pinAddress, rateAddress) | pin, rate, pinOld, rateOld
pin
:=
long[pinAddress]
rate
:=
long[rateAddress]
pinOld
:=
pin
rateOld
:=
rate
repeat
pin := long[pinAddress]
dira[pin]~~
if pin <> pinOld
dira[pinOld]~
!outa[pin]
pinOld := pin
rate := long[rateAddress]
waitcnt(rate/2 + cnt)
El objeto AddressBlinkerControl demuestra una forma de declarar variables asignando sus valores y
pasando sus direcciones a un objeto que lo estará monitoreando, el objeto AddressBlinker en este
Pagina 114 · Kit Educativo de Prácticas Propeller: Fundamentos
verifica los valores almacenados en las variables de su objeto padre
Blink
y
rate := long[rateAddress]
ya no se necesita.
@
'Cog stack space
'Cog ID
. Observe que como
pinAddress
and