You really don't want to have tasks in infinite while loops on any scheduler (well any scheduler that uses a stack per task and allows tasks to sleep). Your tasks need to block somewhere and be woken up by an interrupt or other task when there is work to do.
There is a vague possibility that TKSleep(0) will cause a reschedule - but I've no idea really what that call does.
In any case that will only work if your spinning tasks are the lowest priority ones (and the scheduler hasn't done anything silly like increase the priority to avoid a 'priority inversion' problem).
For small embedded systems it isn't unusual to just call every 'task' in turn. If your code works this way you often don't need to take interrupts from many devices, since the main loop can directly check the device registers often enough. This saves the expence of the register saves required for the interrupt, and any requirement to mask the interrupt through 'critical sections'.
Slightly larger systems (and even quite big systems) will use a very limited number of blockable system threads, using each to process a (dynamic) list of work functions (which must not block waiting external events).