首页 > 其他 > 详细

usoc学习-task2

时间:2015-12-20 17:10:08      阅读:234      评论:0      收藏:0      [点我收藏+]

这个函数主要演示了task的删除,以及优先级的切换。

可以看到优先级高的task1先运行。优先级切换后,task2的优先级高了,运行顺序反了。

然后task1发起task2的删除。task2调用了删除函数后,会马上停止。task剩余的代码也得不到执行。

技术分享

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "includes.h"

void task1(void *pdata);
#define TASK1_PRIO                  10
#define TASK1_STK_SIZE 64

void task2(void *pdata);
#define TASK2_PRIO                  11
#define TASK2_STK_SIZE 64

OS_STK TASK1[TASK1_STK_SIZE];
OS_STK TASK2[TASK2_STK_SIZE];


int main(void)
{
    delay_init(168);          //³õʼ»¯ÑÓʱº¯Êý
    LED_Init();                //³õʼ»¯LED¶Ë¿Ú 
    uart_init(115200);
    OSInit();
    OSTaskCreate(task1,(void *)0,(OS_STK *)&TASK1[TASK1_STK_SIZE-1],TASK1_PRIO);
    OSTaskCreate(task2,(void *)0,(OS_STK *)&TASK2[TASK2_STK_SIZE-1],TASK2_PRIO);
    delay_ms(10000);
    printf("os start\r\n");
    OSStart();
    
    //OSTaskChangePrio(11,9);
}

void task1(void *pdata)
{ OS_CPU_SR cpu_sr=0;
    int a=0;
    while(1)
    {  
        printf("task1,a is %d\r\n",a);
        delay_ms(300);
         a++;
        if(a==5)
        {
            OSTaskChangePrio(10,12);
            printf("change prio,now task2 comes first\r\n");
        }
        if(a==10)
        {
            while(OSTaskDelReq(11)!= OS_ERR_TASK_NOT_EXIST) \\等待task2被删除,直到他不存在
            {delay_ms(1);
            }
            
        }
 
        
        
    }
}




void task2(void *pdata)
{ OS_CPU_SR cpu_sr=0;
    int b=0;
    while(1)
    {
        printf("task2, b is %d\r\n",b);
        delay_ms(300);
        b++;
    if(OSTaskDelReq(OS_PRIO_SELF)==OS_ERR_TASK_DEL_REQ)
        {
            OSTaskDel(OS_PRIO_SELF);
            printf("task2 is deleted\r\n");
        }
        
    }
}

 

usoc学习-task2

原文:http://www.cnblogs.com/nasduc/p/5061138.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!