Алгоритм многозадачности в KMotion/KFlop

KMotion/KFlop использует простой метод вытесняющий многозадачности (несколько программ или «потоков», выполняющихся одновременно). Каждый поток состоит из области памяти, в которую может быть загружена программа, стека CPU для этой программы и ограничения времени непрерывной работы CPU данного потока. Пользовательские программы (Threads) чередуются с прерываниями "Servo", а так же выполняются циклически друг за другом.


Две программы, которые когда-либо должны выполняться одновременно, должны быть назначены различным потокам. Система KFLOP работает все время в Thread #0. Поэтому Thread #0 не может использоваться дляпользовательских программ. Обычно программа Init.c назначается потоку #1 и выполняется бесконечно. Если другие "UserButtons" (или MCodes) запускают программы на C, которые что-то делают и завершают (опция Exec / Wait), они могут быть назначены для использования Thread #2. Если ваши программы работают в течение более длительное времени и пересекаются, тогда они должны быть назначены разным потокам от #2 до #7.

При нажатии кнопки стоп или при вызове функции "E-stop" будут остановлены все потоки кроме #7. Это удобно при необходимости контроля за чем-либо после срабатывания "E-stop".
 

В приведенном выше примере показана диаграмма при активности двух пользовательских потоков (#1 и #2, поток #0 - всегда используется системой).

 

Функция C WaitNextTimeSlice () может использоваться для ожидания следующего переключения на данный поток. Это может гарантировать, что пользовательская программа будет выполняться в течении нескольких микросекунд без прерывания и с очень стабильной скоростью.

 

Период между выполнением каждого пользовательского потока зависит от количества активных потоков пользователя:

 

Period = (# User Threads + 1) * TIMEBASE