一天学完UCOS III(上)

一、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.时间片轮转(同级任务调度,如何设置每个任务进行的时间)

修改宏定义,使能时间片功能

 

 

 三、系统内部任务

统计任务的初始化方式和时间片调用很像

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值