一、UCOS系统中的一些概念
1.UCOS任务状态
2.任务控制块(OS_TCB):保存任务信息结构体
3.任务堆栈(CPU_STK):创建任务时传把任务堆栈的参树传入
4.任务优先级:高优先级任务可以抢占低优先级任务
当任务都运行while循环,高优先级任务可以打断或终止低优先级任务
5.任务调度:讲解任务调度/切换的机制,不需要特别去了解
二、任务API函数(写程序需要用到)
1.一个完整的UCOS系统任务创建(in-init-out)(基本上都是结构体指针、函数指针)
需要初始化地方(优先级、堆栈大小、定义控制块ID、初始化任务堆栈)
任务函数的编写
//task1
void task1_task(void *p_arg)
{
u8 task1_num=0;
OS_ERR err;
CPU_SR_ALLOC();
p_arg = p_arg;
POINT_COLOR = BLACK;
OS_CRITICAL_ENTER();
LCD_DrawRectangle(5,110,115,314); //»Ò»¸ö¾ØÐÎ
LCD_DrawLine(5,130,115,130); //»Ïß
POINT_COLOR = BLUE;
LCD_ShowString(6,111,110,16,16,"Task1 Run:000");
OS_CRITICAL_EXIT();
while(1)
{
task1_num++; //ÈÎÎñÖ´1ÐдÎÊý¼Ó1 ×¢Òâtask1_num1¼Óµ½255µÄʱºò»áÇåÁ㣡£¡
LED0= ~LED0;
printf("ÈÎÎñ1ÒѾִÐУº%d´Î\r\n",task1_num);
if(task1_num==5)
{
OSTaskDel((OS_TCB*)&Task2_TaskTCB,&err); //ÈÎÎñ1Ö´ÐÐ5´Ëºóɾ³ýµôÈÎÎñ2
printf("ÈÎÎñ1ɾ³ýÁËÈÎÎñ2!\r\n");
}
LCD_Fill(6,131,114,313,lcd_discolor[task1_num%14]); //Ìî³äÇøÓò
LCD_ShowxNum(86,111,task1_num,3,16,0x80); //ÏÔʾÈÎÎñÖ´ÐдÎÊý
OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err); //ÑÓʱ1s
}
}
2.任务的挂起(两个函数,挂起低优先级任务)
3.时间片轮转(同级任务调度,如何设置每个任务进行的时间)
修改宏定义,使能时间片功能
三、系统内部任务
统计任务的初始化方式和时间片调用很像