STM32_UCOSIII基础

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值