OSA : OS_Task_Create

OS_Task_Create (priority, TaskName)

Нельзя вызывать из прерывания

Инициализируем конкретную задачу. Этот сервис ищет в памяти свободный дескриптор задачи и записывает в него адрес создаваемой задачи, приоритет и флаги состояния. Изначально задача считается готовой к выполнению. Как только эта задача станет самой приоритетной из готовых, она получит управление.

При ипользовании CCS: компилятор должен быть проинформирован о том, что функция TaskName будет вызвана планировщиком через указатель, поэтому в функции main нужно вызывать сервис OS_Task_Define.

При использовании mikroC PRO: все фунции-задачи должны быть описаны директивой #pragma fncall, напрмер:

#pragma fncall main MyTask
void MyTask (void)
{
    …

Разрешен вызов:

Только не из прерывания

Параметры функции:

priority Приоритет. Может быть от 0 (высший) до 7 (низший)
TaskName Имя функции, которая будет использоваться как задача.

Возвращаемое значение:

FSR (FSR0) Указывает на дескриптор задачи. Обычно в нем нет необходимости, но если будет нужно изменять приоритет этой задачи из другой, то можно пользоваться этим указателем.

Пример вызова:

void Task1 (void)
{
    for (;;) OS_Yield();
}
 
void Task2 (void)
{
    for (;;) OS_Yield();
}
 
void main (void)
{
    OS_Init();
    OS_Task_Create (1, Task1);    // Создаем задачу Task1 с приоритетом 1
    OS_Task_Create (5, Task2);    // Создаем задачу Task1 с приоритетом 5
    /*...*/
}

Old style name

OS_CreateTask

См. также