Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти та науки України
Національний університет “Львівська політехніка”
Кафедра ЕОМ
Лабораторна робота №2
з предмету “ Програмне забезпечення
систем реального часу ”
Виконав:
ст. гр. КІ – 4
Львів – 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);
}
}
Висновок: завдяки цій лабораторній роботі я навчився розробляти найпростіші програми в даній системі, розробляти декілька процесів з одного тіла функції, а також передавати параметри процесів при ініціалізації.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!