Механизм, который вы предлагаете, вряд ли будет поддерживаться ОСРВ, поскольку он будет недетерминированным по своему поведению.Например, такой механизм RTOS не будет знать о распределении ресурсов для инициализации в рамках задачи и о том, будет ли безопасно просто «перезапустить», или о том, как выполнить очистку, если это не так.
Более того, RTOSвытесняет на уровне машинных команд, а не между логическими функциональными «шагами» - нет определения того, где он находится в процессе.
Любой такой механизм должен быть встроен в реализацию задачи на уровне приложения, а не в ОСРВ.уровень для того, чтобы процесс был управляемым и детерминированным.Например, у вас может быть такая структура, как:
for(;;)
{
step1() ;
if( restart() )
{
clean_up() ;
continue ;
}
step2() ;
if( restart() )
{
clean_up() ;
continue ;
}
step3() ;
}
Где неисправность запрашивает перезапуск, и запрос опрашивается через restart()
в определенных точках задачи, где перезапускдействителен или безопасен.clean_up()
выполняет любое необходимое управление ресурсами, а continue
вызывает переход к началу цикла задач (в более сложной ситуации может использоваться goto
, но это, вероятно, уже плохая идея - донхуже не будет!).
По сути, дело в том, что вы должны закодировать задачу для надлежащей обработки неисправности, а ОСРВ не может «знать», что уместно.
Пока нетуниверсальный механизм RTOS для того, что вы предлагаете, возможно, возможно реализовать платформу для поддержки требуемого поведения, но это потребовало бы, чтобы вы записали все свои задачи в определенный шаблон, диктуемый такой платформой - реализуя комплексное решение, которое обрабатывает ресурсыочистка простым способом, однако, нетривиальна.
QNX Neutrino имеет "High Availability Framework" , например, который поддерживает перезапуск процесса и автоматическую очистку.Это пример того, что можно сделать, но это, конечно, специфично для этой ОСРВ.Если это поведение имеет решающее значение для вашего приложения, то вам необходимо соответствующим образом выбрать ОСРВ, а не полагаться на «традиционные» механизмы, доступные для любой ОСРВ.