Кладите в очередь в нужном порядке. А привязку ко времени сами
функции-команды делают. Или по таймерам, или по семафорам. Или всё
вместе. Главное, чтобы управляющая программа, которая контролирует
очередь, умела определять отклонения от нормального хода работы и
устранять сбой. Если моменты времени известны и фиксированы, то пусть чтение и вывод производятся вообще без очереди, просто по таймеру и в прерываниях. А код, который работает с данными, вызывается по завершению чтения (например, по флагу готовности данных) и должен успевать обработать до начала вывода, до срабатывания таймера задачи вывода. Другими словами, предложенная мной схема с очередью задач, не предусматривает вытеснения. Задачи должны быть достаточно короткими, чтобы успевали завершиться сами вовремя. В противном случае, нужно использовать ОСРВ и уже в ней строить разные очереди для задач разных приоритетов и длительностей. Тут я уже напрягаюсь, потому, что пишу то, чего сам делать не пробовал. С ОСРВ я ещё сам не работал, поэтому фантазирую.