Ой, я ошибся с генераторами, что ж вы меня не предупредили?
Описанный мною способ реализации с глобальными переменными не thread-safe.
Подумав, я пришёл к выводу, что можно применять такие способы реализации:
В любом случае просто пересылать все локальные переменные функции в функцию, а так же адрес или номер метки, где был последний yield. Но этот способ, вероятно, будет медленным.
В случае если таргет не имеет потоков (большинство bare metal микроконтроллеров), тот тут можно локальные переменные сделать глобальными, если функция не рекурсивная.
В случае елси таргет имеет потоки и в компиляторе включена соответствующая оптимизация для генераторов, то нужно функцию обернуть, создать на ней поток и чтобы она останавливалась после каждого yield (с помощью мьютексов, например) а результат клала по некоторому адресу.
Но на самом деле я незнаю зачем в laisi генераторы. Увидел yield в питоне, понравилось.