UCOS学习笔记(1)—任务创建,挂起,恢复以及删除

UCOS任务创建

USOS任务创建函数:OSTaskCreate

函数参数原型:

void  OSTaskCreate (OS_TCB        *p_tcb,//任务控制块
                    CPU_CHAR      *p_name,//任务名称
                    OS_TASK_PTR    p_task,//任务函数指向
                    void          *p_arg,//数据区(传参)
                    OS_PRIO        prio,//任务优先级
                    CPU_STK       *p_stk_base,//堆栈基地址
                    CPU_STK_SIZE   stk_limit,//栈深
                    CPU_STK_SIZE   stk_size,//栈大小
                    OS_MSG_QTY     q_size,//消息队列长度
                    OS_TICK        time_quanta,//时间片轮状长度
                    void          *p_ext,//用户存储区
                    OS_OPT         opt,//权限,一般为CHK和CLK
                    OS_ERR        *p_err)//错误码

创建任务代码示例:

//优先级
#define START_TASK_PRIO		3
//任务堆栈大小
#define START_STK_SIZE 		128
//任务控制块
OS_TCB StartTaskTCB;
//任务堆栈
CPU_STK START_TASK_STK[START_STK_SIZE];
//任务函数
void start_task(void *p_arg);

int main(void)
{ 
 
	OS_ERR err;
	CPU_SR_ALLOC();
	
	delay_init(168);  //delay函数初始化
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断优先级分组
	uart_init(115200);   //串口初始化
	LED_Init();         //LED初始化
	LCD_Init();			//LCD初始化
		//创建任务
	OSTaskCreate((OS_TCB 	* )&StartTaskTCB,		//任务控制块
				 (CPU_CHAR	* )"start task", 		//名字
                 (OS_TASK_PTR )start_task, 			//任务函数
                 (void		* )0,					//传参
                 (OS_PRIO	  )START_TASK_PRIO,     //优先级
                 (CPU_STK   * )&START_TASK_STK[0],	//堆栈基地址
                 (CPU_STK_SIZE)START_STK_SIZE/10,	//堆栈深度
                 (CPU_STK_SIZE)START_STK_SIZE,		//堆栈大小
                 (OS_MSG_QTY  )0,					//消息队列
                 (OS_TICK	  )0,					//轮转时间调度
                 (void   	* )0,					//用户指定存储区
                 (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //权限
                 (OS_ERR 	* )&err);				//错误码´íÎóʱµÄ·µ»ØÖµ
	OS_CRITICAL_EXIT();	//退出临界区	 
	OSStart(&err);      //启动UCOSIII
}
//任务开始
void start_task(void *p_arg)
{
	u8 i,task1_num=0;
	OS_ERR err;
	p_arg = p_arg;
	 
	POINT_COLOR = RED;
	LCD_ShowString(30,130,110,16,16,"Task Run:000");
	POINT_COLOR = BLUE;
	while(1)
	{
		task1_num++;
		LCD_ShowxNum(110,130,task1_num,3,16,0x80);	
		LED0 = ~LED0;
		OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err); //延时1m
		
	}
}

UCOS任务删除函OSTaskDel

函数参数原型:

void  OSTaskDel (OS_TCB  *p_tcb,//控制块
                 OS_ERR  *p_err)//错误码

删除任务示例:

OS_ERR err;
OSTaskDel((OS_TCB*)0,&err);	//0表示删除自身

UCOS任务挂起函数OSTaskSuspend

函数参数原型

void   OSTaskSuspend (OS_TCB  *p_tcb,//控制块
                      OS_ERR  *p_err)//错误码

和删除函数一样简单,直接传控制块

挂起任务示例:

OS_ERR err;
OSTaskSuspend((OS_TCB*)0,&err);	//0表示挂起自身

注意:任务挂起不是删除,它之前定义的变量的值不会被销毁,比如我定义了一个计数的任务,当它自加到11的时候被挂起了,,但是当我恢复它的时候,它以就是从11开始自加。

UCOS任务恢复函数OSTaskResume

函数参数原型

void  OSTaskResume (OS_TCB  *p_tcb,//控制块
                    OS_ERR  *p_err)

同上面的函数一样使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值