对于UCOSII部分知识的区别和补充
UCOSIII任务函数通常是一个无限循环,当然了,也可以是一个只执行一次的任务。任务的参数是一个void类型的,这么做的目的是可以可以传递不同类型的数据甚至是函数。
UCOSIII中的任务函数模板:
void xxx_task(void *p_arg)
{
while(1)
{
//任务处理过程
}
}
在使用UCOIII的情况下这个函数不能有用户自行调用,任务函数何时执行执行,何时停止完全有操作系统来控制
操作系统初始化
1.初始化各种内核对象和全局变量…
void OSInit(OS_ERR *p_err); //参数:p_err,返回错误码 ; 返回值:无
OS_SemInit(p_err); //相关的部分函数
OS_TaskInit(p_err);
OS_IntQTaskInit(p_err);
OS_IdleTaskInit(p_err);
OS_TickTaskInit(p_err);
2.启动操作系统,创建任务后调用
void OSStart(OS_ERR *p_err); //参数:p_err,返回错误码
UCOSIII的任务
UCOSIII任务一共有5种状态:休眠态;就绪态;运行态;等待态;中断服务态。类似于UCOSII
1.创建任务
void OSTaskCreate(OS_TCB *p_tcb, //p_tcb,类似于线程id,控制任务
CPU_CHAR *p_name, //p_name,任务的名字,自定义
OS_TASK_PTR p_task, //p_task,类似于线程函数,任务函数
void *p_arg, //p_arg,类似于线程参数传递,任务参数传递
OS_PRIO prio, //prio,任务的优先级
CPU_STK *p_stk_base, //p_stk_base,任务栈的基址,提供一个数组基址
CPU_STK_SIZE stk_limit, //stk_limit,腾出10%的栈空间给到堆栈检测函数使用,反过来说,当前任务只能使用90%栈空间
CPU_STK_SIZE stk_size, //stk_size,任务栈的大小,以字(32bit)为单位
OS_MSG_QTY q_size, //q_size,任务内消息队列的大小,若不使用,写0
OS_TICK time_quanta, //time_quanta,与其它任务处在同一个优先级,内核允许一个任务运行一定的时间(又叫时间片),然后轮到下一个任务,即所谓的互相“礼让”执行。默认为0,时间片由内核决定。
void *p_ext, //p_ext,提供额外存储空间用于存储浮点运算单元寄存器,若不提供,写NULL
OS_OPT opt