Blocking and non-blocking function calls
To successfully implement cooperative multitasking, each line of code needs to execute extremely fast and not tie up the CPU for any significant amount of time. A slightly more technical way of stating this is to say that all the function calls inside the cooperative multitasking framework need to be non-blocking, as opposed to blocking.
A non-blocking function will always do its best to return immediately, and the time it takes for it to return is going to be predictable and very short. Nothing inside a non-blocking function needs to wait for something else. The blink_task()
function in the last example is a good sample of a non-blocking function. Nothing in it needs to wait, and we can be confident that the function returns virtually immediately.
In contrast, a blocking function will start a process that can take an (unpredictable) amount of time. Examples of this are using the delay()
function or waiting to receive a certain number...