uC/OS-II中的任务创建
任务说明
本次试验拟定安排在第二章讲解进程控制之后进行,需要了解µC/OS-II的任务控制块结构及作用,任务堆栈的定义及作用,以及使用µC/OS-II提供的系统调用来创建任务。
要求
根据示例程序编写创建具有两个不同优先级别任务的程序,两个任务分别是MyTask和YouTask。MyTask优先级为1,每隔3秒钟打印一次学号;YouTask优先级为2,每隔1秒打印一次姓名全拼。示例如下:

代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
   | #include "includes.h" #define  TASK_STK_SIZE   512             OS_STK   MyTaskStk[TASK_STK_SIZE];        OS_STK   YouTaskStk[TASK_STK_SIZE]; INT16S   key;                    INT8U    x=0,y=0;                void MyTask(void * data); void YouTask(void * data); void  main (void) {     char* s_M="你的学号";                   char* s_N="你的姓名";     OSInit();                        PC_DOSSaveReturn();                  PC_VectSet(uCOS, OSCtxSw);               OSTaskCreate(MyTask,                     s_M,                       &MyTaskStk[TASK_STK_SIZE - 1],         1);                  OSTaskCreate(YouTask,                     s_N,                       &YouTaskStk[TASK_STK_SIZE - 1],         2);                  OSStart();                   } void  MyTask (void *pdata) { #if OS_CRITICAL_METHOD == 3     OS_CPU_SR  cpu_sr; #endif     pdata = pdata;      OS_ENTER_CRITICAL();     PC_VectSet(0x08, OSTickISR);         PC_SetTickRate(OS_TICKS_PER_SEC);        OS_EXIT_CRITICAL();     OSStatInit();                for (;;)      {                 y += 1;         PC_DispStr(x,y,pdata,DISP_BGND_BLACK+DISP_FGND_YELLOW);                    if (PC_GetKey(&key) == TRUE) {                    if (key == 0x1B) {                PC_DOSReturn();                    }         }         OSTimeDlyHMSM(0, 0, 3, 0);       } }
  void  YouTask (void *pdata) { #if OS_CRITICAL_METHOD == 3     OS_CPU_SR  cpu_sr; #endif     pdata = pdata;      OS_ENTER_CRITICAL();     PC_VectSet(0x08, OSTickISR);         PC_SetTickRate(OS_TICKS_PER_SEC);        OS_EXIT_CRITICAL();     OSStatInit();                for (;;)      {                                                     y += 1;         PC_DispStr(x,y,pdata,DISP_BGND_BLACK+DISP_FGND_GREEN);                       if (PC_GetKey(&key) == TRUE) {                    if (key == 0x1B) {                PC_DOSReturn();                    }         }         OSTimeDlyHMSM(0, 0, 1, 0);       } }
   | 
 
这东西vsc里还一直给报错,只能揣测着给模板的人的内心写,看了20多分钟(笑
看起来写的没问题
版权声明: 此文章遵循 CC BY-NC-SA 4.0 如有转载,请注明来自原作者