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)
同上面的函数一样使用。