Simple dispatcher for an embedded system
.... have as many as 20 events lined-up, and it works as per requirement
  Any thoughts where I could improve on this?


Stress test

The queue approach is non-deterministic and would benefit in knowing how much extra CPU is left.

Presently the processor is ample and the cumulative task list is low.  There is spare CPU power.  Yet let us stress test this design to find out how close and how code handles falling behind.

Add code to detect when Dispatcher() is starving.  Did every task get serviced at least once every 0.1s say?

Append a do-nothing task that consumes a x% of CPU time, call it Administratium.    Did the queue ever fail to add because it was full?  What was the maximum queue usage?  Was task latency too great?

Armed with this adjustable idle task, preliminary testing can gauge the degree of margin in the design.