There are some restriction you must be aware of when using MultiTrack, particularly if you are advanced enough to be using subroutines and/or the processor registers. These restrictions come about because the amount of RAM available in SPLat processors is limited, and in implementing MultiTrack we had to make certain design decision to preserve RAM. Therefore there is just one subroutine return stack and one set of main registers (data stack, I, R, floating point registers, "legacy" timers 0-7) shared across all tasks.
In practice these restrictions are not very onerous. The reality is that in the majority of applications that SPLat is intended for (controlling machines and other "apparatus") there are other capabilities that are much more important, such as the simplicity of real-world interactions brought about by instructions like WaitOn.
You can call subroutines (GoSub or any of its relatives) inside a MultiTrack task, but you cannot yield from inside a subroutine. That means the subroutine must run to completion and Return, and may not contain any of the yielding instructions like YieldTask, Pause, WaitOn, WaitOffT etc. The SPLat/PC simulator will raise an error if it detects a violation, and the actual board will suffer a fatal runtime error.
Because there is only one set of registers, you should never rely on a register remaining unchanged when a task Yields and then gets run again later. It is impossible to make SPLat/PC or the controller itself able to detect violations of this rule, so you must simply take care in your program design.