DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

Створення різних процесів із одного тіла функції. Передача параметру процесу при ініціалізації

Оригінальна назва роботи

Створення різних процесів із одного тіла функції. Передача параметрів процесу при ініціалізації

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут комп’ютерних наук та інформаційних технологій
Факультет:
КН
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2011
Тип роботи:
Лабораторна робота
Предмет:
АМО
Група:
КН-31
Коротко про документ

Про що ця робота

У роботі розроблено програму зі створення кількох завдань із використанням ідентичного коду процесу в середовищі uC/OS-II. Здійснено передачу параметрів ініціалізації за допомогою структур для кожного окремого процесу.

У роботі розглядаються

  • Програмовані системи реального часу
  • Операційна система uC/OS-II
  • Багатозадачність
  • Створення процесів
  • Передача параметрів задач
  • Системні таймери
  • Мова програмування C

Зміст і розділи

  1. Мета роботи
  2. Теоретична частина
  3. Хід роботи
  4. Висновок
Для кого:Студенти технічних спеціальностей вищих навчальних закладів, які вивчають операційні системи реального часу та програмування мікроконтролерів.
Викладачі:Не вказано

Ключові поняття

процесзадачаuC/OS-IIініціалізаціяструктуравказівникінкрементуваннябагатозадачністьфункція

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти та науки України Національний університет “Львівська політехніка” Кафедра ЕОМ Лабораторна робота №2 з диципліни: «Програмовані системи реального чаму» на тему: «Створення різних процесів із одного тіла функції. Передача параметрів процесу при ініціалізації» Мета роботи: розробити програму, в якій створюються три різних задачі, використовуючи ідентичний код самого процесу. Кожен із процесів повинен виводити лічильник, значення якого інкрементується через заданий інтервал часу. Задачі передаються три параметри: координати рядку, в якому виводиться лічильник, значення інкременту і період затримки в тіках системного таймеру, через які повинен лічильних інкрементуватися. Теоретична частина В системі UCOS-II функція процесу являє собою функцію, яка не повертає значення і в якості параметру отримує нетипізований вказівник: void Task (void *par); Саме вказівник par використовується для передачі задачі параметрів. Для передачі задачі параметрів необхідно створити структуру, полями якої будуть необхідні для задачі параметри і передати при створенні задачі вказівник на неї. Оскільки при створенні задачі за допомогою функції OSTaskCreate копіюється лише сам вказівник, а не структура із параметрами, то для кожної задачі доцільно мати окрему структуру, адреса якої передається при створенні процесу (задачі). Хід роботи #include "..\test\includes.h" #include <conio.h> #include <stdio.h> #define TASK_STK_SIZE 512/* Size of each task's stacks (# of WORDs)*/ #define N_TASKS 3 /* Number of identical tasks */ OS_STK TaskStk[N_TASKS][TASK_STK_SIZE]; /* Tasks stacks */ OS_STK TaskStartStk[TASK_STK_SIZE]; //char TaskData[N_TASKS]; /* Parameters to pass to each task*/ //OS_EVENT *RandomSem; struct Data{ int X; int Y; int Inc; int Delay; }; struct Data TaskData[N_TASKS];//={{10,10,1,5},{20,20,1,5},{30,30,1,5}}; void Task(void *p_arg); /* Function prototypes of tasks*/ void TaskStart(void *p_arg);/*Function prototypes of Startup task*/ static void TaskStartCreateTasks(void); void main (void) { int i; clrscr(); for(i=0;i<N_TASKS;i++) { printf("Process #%d: x = ",i+1); scanf("%d",&TaskData[i].X); printf("Process #%d: y = ",i+1); scanf("%d",&TaskData[i].Y); printf("Process #%d: inc = ",i+1); scanf("%d",&TaskData[i].Inc); printf("Process #%d: delay = ",i+1); scanf("%d",&TaskData[i].Delay); } clrscr(); PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK);/*Clear the screen */ OSInit(); /* Initialize uC/OS-II */ PC_DOSSaveReturn(); /* Save environment to return to DOS */ PC_VectSet(uCOS, OSCtxSw);/* Install uC/OS-II's context switch vector */ //RandomSem = OSSemCreate(1);/* Random number semaphore */ OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 0); OSStart(); /* Start multitasking */ } void TaskStart (void *parg) { #if OS_CRITICAL_METHOD == 3/* Allocate storage for CPU status register */ OS_CPU_SR cpu_sr; #endif char s[100]; INT16S key; parg = parg; /* Prevent compiler warning */ //TaskStartDispInit(); /* Initialize the display */ OS_ENTER_CRITICAL(); PC_VectSet(0x08, OSTickISR); /* Install uC/OS-II's clock tick ISR */ PC_SetTickRate(OS_TICKS_PER_SEC); /* Reprogram tick rate */ OS_EXIT_CRITICAL(); OSStatInit(); /* Initialize uC/OS-II's statistics */ TaskStartCreateTasks(); /* Create all the application tasks */ for (;;) { // TaskStartDisp(); /* Update the display */ if (PC_GetKey(&key) == TRUE) {/* See if key has been pressed */ if (key == 0x1B) { /* Yes, see if it's the ESCAPE key */ PC_DOSReturn(); /* Return to DOS */ } } OSCtxSwCtr = 0; /* Clear context switch counter */ OSTimeDlyHMSM(0, 0, 1, 0); /* Wait one second */ } } static void TaskStartCreateTasks (void) { INT8U i; for (i = 0; i < N_TASKS; i++) { /* Create N_TASKS identical tasks*/ OSTaskCreate(Task, (void *)&TaskData[i], &TaskStk[i][TASK_STK_SIZE - 1], i + 1); } } void Task (void *parg) { INT8U x; INT8U y; INT8U err; static int counter=0; struct Data *p=(struct Data*)parg; for (;;) { gotoxy(p->X,p->Y); printf("%d",counter+=p->Inc); OSTimeDly(p->Delay); /* Delay clock tick */ } } Висновок: завдяки цій лабораторній роботі я навчився розробляти найпростіші програми в даній системі, розробляти декілька процесів з одного тіла функції, а також передавати параметри процесів при ініціалізації.
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!