Propeller Manual

Table Of Contents
PUB – Spin Language Reference
Parameters and Local Variables
Parameters and local variables are all longs (four bytes). In fact, parameters are really just
variables that are initialized to the corresponding values specified by the caller of the method.
Local variables, however, are not initialized; they contain random data whenever the method
is called.
All parameters are passed into a method by value, not by reference, so any changes to the
parameters themselves are not reflected outside of the method. For example, if we called
MoveMotor using a variable called Pos for the first parameter, it may look something like this:
Pos := 250
MoveMotor(Pos, 100)
When the MoveMotor method is executed, it receives the value of Pos in its Position
parameter, and the value 100 in its
Speed parameter. Inside the MoveMotor method, it can
change
Position and Speed at any time, but the value of Pos (the caller’s variable) remains at
250.
If a variable must be altered by a routine, the caller must pass the variable by reference;
meaning it must pass the address of the variable instead of the value of the variable, and the
routine must treat that parameter as the address of a memory location in which to operate on.
The address of a variable, or other register-based symbol, can be retrieved by using the
Symbol Address operator, ‘
@’. For example,
Pos := 250
MoveMotor(@Pos, 100)
The caller passed the address of Pos for the first parameter to MoveMotor. What MoveMotor
receives in its
Position parameter is the address of the caller’s Pos variable. The address is
just a number, like any other, so the
MoveMotor method must be designed to treat it as an
address, rather than a value. The
MoveMotor method then must use something like:
PosIndex := LONG[Position]
...to retrieve the value of the caller’s Pos variable, and something like:
LONG[Position] := <some expression>
...to modify the caller’s Pos variable, if necessary.
Passing a value by reference with the Symbol Address operator is commonly used when
providing a string variable to a method. Since string variables are really just byte arrays,
Page 184 · Propeller Manual v1.1