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"); } } }