TI-RTOS(RTOS内核)概述 》 任务

参考文献:
file:///D:/CCS/CC1310/simplelink_cc13x0_sdk_2_20_00_38/docs/ti154stack/html/tirtos/tasks.html

任务

一、基本概念

1.定义

TI-RTOS任务(概念上)等同于在单个C程序中并行执行函数的独立线程。

2.执行状态

(1)Running
任务正在执行中
(2)Ready
任务就绪
(3)Blocked
任务被阻塞(暂停执行)
(4)Terminated
任务结束
(5)Inactive
任务处于非活动状态列表

3.特点

①有且仅有一个任务总是在运行,即使它是一个空闲任务。
②当前任务可以被其他优先级更高且就绪的任务阻塞,需调用特定的任务模块函数。当前任务还可以自行终止。
③处理器会选择优先级最高而且就绪的任务去执行。

4.优先级概念

(1)数字编号表示
数字越小,优先级越高。
(2)任务清单
任务根据优先级排好序形成任务清单。执行顺序:高优先级->低优先级。
tips:优先级相同则看出现的次序。
(3)抢占优先级
一个就绪的更高优先级任务会抢占当前的任务,则当前任务被重新安排。

二、任务初始化

1.模板

#include 
#include 
#include 

#define TASK_STACK_SIZE 512

/* Task's stack */
uint8_t appTaskStack[TASK_STACK_SIZE];

/* Task object (to be constructed) */
Task_Struct task0;

/* Task function */
/* 可以将taskFunction类比成单个C程序中的main()函数。先初始化,再执行操作。 */
void taskFunction(UArg arg0, UArg arg1)
{
    /* Local variables. Variables here go onto task stack!! */

    /* Run one-time code when task starts */

    while (1) /* Run loop forever (unless terminated) */
    {
        /*
         * Block on a signal or for a duration. Examples:
         *  ``Sempahore_pend()``
         *  ``Event_pend()``
         *  ``Task_sleep()``
         *
         * "Process data"
         */
    }
}

int main() {

    Task_Params taskParams;					//定义存放任务属性的结构体

    // Configure task
    Task_Params_init(&taskParams);			//使用默认属性配置
    taskParams.stack = appTaskStack;			//配置栈的地址(指向栈空间appTaskStack[TASK_STACK_SIZE])
    taskParams.stackSize = TASK_STACK_SIZE;	//配置栈的大小
    taskParams.priority = TASK_PRIORITY;		//配置任务的优先级

    Task_construct(&task0, taskFunction, &taskParams, NULL);		//创建任务,将任务与taskFunction函数关联起来

    BIOS_start();
}

2.流程分析

①配置任务的属性
②创建任务
③BIOS_start()
④执行任务

3.注意事项

①任务的创建要在main()函数中完成,并且在TI-RTOS内核的调度程序被BIOS_start()调用之前。
②TI建议将现有应用程序任务用于特定于应用程序的处理。向应用程序项目添加其他任务时,必须在TI-RTOS配置文件(.cfg)中定义的TI-RTOS优先级范围内为任务的优先级分配优先级。可以减少任务优先级的数量,以便在TI-RTOS配置文件中节省额外的RAM(.cfg):
③任务的最小栈空间的预定义内存不小于512字节。另外请根据需要,分配一个足够大的栈空间以确保能处理子例程的调用和其他优先级更高的就绪任务的抢占。

你可能感兴趣的:(TI-RTOS(RTOS内核)概述 》 任务)