|
请教各位:
练习多任务。任务TaskStart创建了3个任务,代码相同,都是Task。Task中的局部变量x和y的值是如何保护的呢?看运行结果,x和y像是任务的私有数据,因为没有被其他任务破坏。
代码附后,谢谢!
#include "includes.h"
#define TASK_STK_SIZE 512
#define TASK1_PRIO 0
#define TASK2_PRIO 2
#define TASK3_PRIO 4
#define TASK4_PRIO 6
OS_STK Task1Stk[TASK_STK_SIZE];
OS_STK Task2Stk[TASK_STK_SIZE];
OS_STK Task3Stk[TASK_STK_SIZE];
OS_STK Task4Stk[TASK_STK_SIZE];
INT16S key;
struct demodata
{
char chrDsp;
INT8U xStart;
INT8U xEnd;
INT8U dlySec;
} arg[] = { { '1', 0, 15, 2 },
{ '2', 20, 35, 4 },
{ '3', 40, 55, 1 },
{ '4', 60, 75, 3 }
};
void TaskStart(void *pdata);
void Task(void *pdata);
void main(void)
{
OSInit();
PC_DOSSaveReturn();
PC_VectSet(uCOS, OSCtxSw);
OSTaskCreate(TaskStart, &arg[0], &Task1Stk[TASK_STK_SIZE - 1], TASK1_PRIO);
OSStart();
}
void TaskStart(void *pdata)
{
struct demodata *p = (struct demodata *)pdata;
INT8U x = p->xStart, y = 0;
OS_ENTER_CRITICAL();
PC_VectSet(0x08, OSTickISR);
PC_SetTickRate(OS_TICKS_PER_SEC);
OS_EXIT_CRITICAL();
OSStatInit();
OSTaskCreate(Task, &arg[1], &Task2Stk[TASK_STK_SIZE - 1], TASK2_PRIO);
OSTaskCreate(Task, &arg[2], &Task3Stk[TASK_STK_SIZE - 1], TASK3_PRIO);
OSTaskCreate(Task, &arg[3], &Task4Stk[TASK_STK_SIZE - 1], TASK4_PRIO);
for (;;)
{
if (x == p->xEnd)
{
x = p->xStart;
y += 2;
}
PC_DispChar(x, y, p->chrDsp, DISP_BGND_BLACK + DISP_FGND_WHITE);
x++;
if (PC_GetKey(&key) == TRUE)
if (key == 0x1B)
PC_DOSReturn();
OSTimeDlyHMSM(0, 0, p->dlySec, 0);
}
}
void Task(void *pdata)
{
struct demodata *p = (struct demodata *)pdata;
INT8U x = p->xStart, y = 0;
for (;;)
{
if (x == p->xEnd)
{
x = p->xStart;
y += 2;
}
PC_DispChar(x, y, p->chrDsp, DISP_BGND_BLACK + DISP_FGND_WHITE);
x++;
OSTimeDlyHMSM(0, 0, p->dlySec, 0);
}
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|