侧边栏壁纸
博主头像
thinkTV博主等级

喜爱动漫的二刺螈一枚,摩托车云爱好者(快要有车了)。 懂一点技术的在读生物医学工程研究生( •̀ ω •́ )✧,多多指教。

  • 累计撰写 127 篇文章
  • 累计创建 17 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

UCOSIII的任务创建和删除

thinkTV
2023-07-10 / 0 评论 / 0 点赞 / 158 阅读 / 795 字 / 正在检测是否收录...

任务的创建和删除本质就是调用uC/OS-III的API函数

图片-1688994955877

注意:

  1. 使用OSTaskCreate() 创建任务,任务的任务控制块以及任务栈空间所需的内存,需要由用户手动分配并提供。当任务被创建好后,就会立马处于就绪态 。
  2. 使用OSTaskDel() 删除任务。当不再需要某一任务时,可以使用此函数来删除任务。删除任务并不会删除任务的代码或释放任务栈,仅代表该任务的代码和任务栈都不再由µC/OS-III 内核管理 。

任务创建函数

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,				/* 任务选项共有5个 */		
	OS_ERR* 		p_err				/* 指向接收错误代码变量指针 */		
); 

任务控制块结构体成员介绍

struct os_tcb
{
    	CPU_STK             	*StkPtr; 	/* 任务栈栈顶,必须为TCB的第一个成员 */
	CPU_STK             	*StkLimitPtr;	/* 指向任务栈警戒线指针 */     
    	OS_TCB              	*NextPtr; 	/* 指向任务列表中下一个任务控制块指针 */
    	OS_TCB              	*PrevPtr; 	/* 指向任务列表中上一个任务控制块指针 */
    	OS_TCB              	*TickNextPtr; /* 指向 Tick任务列表中下一个任务控制块指针 */
	OS_TCB              	*TickPrevPtr;	/* 指向 Tick任务列表中上一个任务控制块指针 */ 	
	OS_PRIO            	Prio; 	/* 任务优先级,数值越小,优先级越大 */
	OS_TICK              	TickRemain;		/* 任务延时的剩余时钟节拍数 */ 	
	OS_TICK              	TimeQuanta;   /* 任务时间片 */
OS_TICK              	TimeQuantaCtr;	/* 任务剩余时间片 */
	…
	省略很多条件编译的成员
};
  • 注意:每个任务都有属于自己的任务控制块,类似身份证
  • 任务栈栈顶,在任务切换时与任务的上下文保存、任务恢复息息相关

任务创建函数—参数介绍

图片-1688996502027

图片-1688996533865

任务删除函数

void  OSTaskDel
( 
	OS_TCB* 		p_ tcb,			/* 指向任务控制块指针 */
	OS_ERR* 		p_err			/* 接收错误代码变量指针 */
) 

图片-1688996748900

注意:如果p_ tcb代入的参数为NULL,则代表删除任务自身(当前正在运行的任务)

UCOSIII任务创建流程

图片-1688996838246

创建成功的任务会立刻进入就绪态,由任务调度器调度运行。

注意:

  1. 在调用任何关于UCOSIII函数之前必须先初始化UCOSIII,仅初始化一次即可。调用函数:OSInit( )

  2. 任务在创建之后是不会直接运行的,需开启任务调度器,任务才能得以运行。调用函数: OSStart( )

0

评论区