Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти та науки України
Національний університет “Львівська політехніка”
Кафедра ЕОМ
Лабораторна робота №2
з предмету “ Програмне забезпечення
систем реального часу ”
Львів – 2005
Мета роботи: розробити програму в якій створюються 3 різних задачі, використовуючи ідентичний код самого процесу. Кожен із процесів повинен виводити лічильник, значення якого інкрементується через заданий інтервал часу. Задачі передаються 3 параметри: координати рядку, в якому виводиться лічильник, значення інкременту і період затримки в тіках системного таймеру, через які повинен лічильних інкрементуватися.
Теоретична частина
В системі UCOS-II функція процесу являє собою функцію, яка не повертає значення і в якості параметру отримує нетипізований вказівник:
void Task (void *par);
Саме вказівник par використовується для передачі задачі параметрів. Для передачі задачі параметрів необхідно створити структуру, полями якої будуть необхідні для задачі параметри і передати при створенні задачі вказівник на неї. Оскільки при створенні задачі за допомогою функції OSTaskCreate копіюється лише сам вказівник, а не структура із параметрами, то для кожної задачі доцільно мати окрему структуру, адреса якої передається при створенні процесу (задачі).
Хід роботи
Кількість завдань N_TASKS = 3;
Потрібно модифікувати функцію main():
void main (void)
{
int i;
clrscr();
for(i=0;i<N_TASKS;i++)
{
printf("\t process #%d:\t",i+1);
printf("\nx:\t");
scanf("%d",&TaskData[i].x);
printf("\ny:\t");
scanf("%d",&TaskData[i].y);
printf("\nvalue:\t");
scanf("%d",&TaskData[i].increment);
printf("\ndelay:\t",i+1);
scanf("%d",&TaskData[i].delay);
}
clrscr();
PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK);
OSInit();
PC_DOSSaveReturn();
PC_VectSet(uCOS, OSCtxSw);
OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 0);
OSStart();
}
Наша функція Task():
void Task (void *parg)
{
INT8U x;
INT8U y;
INT8U err;
static int myCounter=0;
struct param *strP=(struct myStruct*)parg;
while(1)
{
gotoxy(strP->x,str->y);
printf("%d",counter+=strP->increment);
OSTimeDly(strP->delay);
}
}
Висновок: завдяки цій лабораторній роботі я навчився розробляти найпростіші програми в даній системі, розробляти декілька процесів з одного тіла функції, а також передавати параметри процесів при ініціалізації.