Syntax:
IndCall AddressCommand Availability:
Available on all microcontrollers.
Explanation:
IndCall provides a basic implementation of function pointers. Address
is the program-memory location of the subroutine to be called.
There are two ways to specify this: either by providing a direct
reference to the subroutine using the @ operator, or by specifying a
word variable that contains the address.
This command is useful for callbacks. For example, a particular subroutine might read bytes from a serial connection, but different actions may need to be taken at different times. A different subroutine could be created for each action, and the subroutine for the appropriate action could then be passed to the serial-connection-reading routine each time it is called.
Note:
Calling subroutines that have parameters using IndCall is not
supported. Errors may occur. If data needs to be passed, use a variable
instead.
Example:
'Flash an LED using an indirect call
#chip 12F683
'Create a word variable, and set it to the memory location of the
'Blink subroutine.
Dim FlashingSub As Word
FlashingSub = @Blink
'Main loop
Do
'Indirect call to subroutine at location FlashingSub
IndCall FlashingSub ' <<< the IndCall instruction
Loop
'LED flashing subroutine
Sub Blink
PulseOut GPIO.0, 500 ms
Wait 500 ms
End SubKey line: IndCall FlashingSub — calls whichever subroutine’s address is currently stored in FlashingSub (here, Blink, set via @Blink above), rather than naming the subroutine directly.
See Also:

