usoc学习-task2

这个函数主要演示了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");
        }
        
    }
}

 

posted on 2015-12-20 16:21  nasduc  阅读(204)  评论(0编辑  收藏  举报

导航