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 如有转载,请注明来自原作者