fy"> - InOutTask_init () - ініціалізація портів введення/виводу;
Так само в цьому розділі відбувається ініціалізація змінних, що використовуються в задачах;
Це функція розраховує характеристики руху за формулами (1.1), (1.2) на кожному кроці в процесі розгону і заносить їх в масиви mainmass_x і mainmass_y. Вони мають наступну структуру:
uint64_t dt_ms - інтервал часу між імпульсами в мс;
uint64_t dt - інтервал часу між імпульсами в тактах процесора;
V - швидкість.
Також тут відбувається ініціалізація глобальних змінних, якщо це необхідно.
2. Основний цикл, в якому по черзі викликаються функції кожного завдання. Вихід з циклу контролюється спеціальної змінної work.
3. Секція завершення, в якій викликаються функції завершення:
- InOutTask_close () - завершення роботи портів введення/виводу;
- Save () - збереження записів у файлі log.dat;
Для тестування програми створюється файл log.dat, в якому записуються переходи кожного завдання з одного стану в інший і зберігаються моменти часу цих переходів. Тим самим, використовую даний файл, ми зможемо проаналізувати роботу нашої програми, зможемо визначити, наскільки прібліженни реальні характеристики руху (інтервали часу, швидкість, прискорення) до своїх розрахованим значенням.
Кожна функція задачі програмується за певним шаблоном/4 /. Для завдання повинні бути визначені: набір унікальних імен станів і унікальний ідентифікатор завдання. Для кожного стану програмуються три секції:
- секція входу, в якій програмуються дії, що виконуються при вході завдання в стан;
- секція дії, в якому програмується змістовна частина роботи в даному стані; секція переходу, в якій перевіряються умови і виконуються дії, пов'язані з переходом в наступний стан.
6. Налагодження ПО РВ
При запуску програми проводиться читання з файлу. Для перевірки
правильності роботи програми ми дивимося файл Log.dat. Перехід станів відбувається згідно диспетчеру станів.
Малюнок 6.1 - Програма в робочому стані.
Висновок
У ході виконання даної роботи були розглянуті та застосовані при розробці ПЗ РВ основні принципи і методу проектування систем реального часу.
На етапі технічного проектування були виділені і описані завдання майбутньої СРВ у відповідності з конструктивними і функціональними особливостями об'єкта управління, після чого була побудована діаграма завдань, в якій розміщені всі завдання проектованої СРВ і вказані канали зв'язку між ними. Для кожного завдання була докладно розглянута специфіка процесу управління, на підставі якої була побудована структура завдань. Для завдань, що не мають структуру станів, були викладені алгоритми в текстовій формі.
У результаті проведеної роботи були сформульовані конкретні вимоги до кожної з задач для майбутнього проектування з прив'язкою до обчислювальної технології та розробки ПЗ РВ.
Список використаних джерел
1. Керуючі програми для механічних систем: об'єктно-орієнтоване проектування систем реального часу/Д.М. Ослендер, Дж.Р. Ріджлі, Дж.Д. Рінггенберг; Пер. з англ.- М .: БИНОМ. Лабораторія знань, 2004.
2. Операційна система реального часу QNX від теорії до практики/С. Зиль.- СПб .: БХВ-Санкт-Петербург, 2004
. Введення в QNX/Neutrino - 2. Керівництво для розробників додатків реального часу./Р. Кёртен, К. Херборт; Пер. з англ.- СПб .: Петрополіс. Санкт-Петербург, 2001 г.
Програми
А.1 Лістинг коду завдання Main_cicle.
void * work_thread (void * arg)
{i; timed; vardt; * fp;=1; _x [0] .V=0; _x [0] .St=0; _x [0] .dt=0; _x [ 0] .dt_ms=0; _y [0] .V=0; _y [0] .St=0; _y [0] .dt=0; _y [0] .dt_ms=0;=fopen ( log1.dat raquo ;, w ); (mainmass_x [i - 1] .V lt;=Vmax_x) {
//while (i lt; 4) {= (- mainmass_x [i - 1] .V + sqrt (mainmass_x [i - 1] .V * mainmass_x [i - 1].V+2*a_x*Ssh_x))/a_x;_x[i].dt_ms=round(vardt*1000);=vardt*1000;_x[i].dt=SYSPAGE_ENTRY(qtime)-gt;cycles_per_sec * vardt; _x [i] .V=mainmass_x [i - 1] .V + a_x * vardt; _x [i] .St=i * Ssh_x; (fp, dt:% d n , mainmass_x [i ] .dt_ms); (fp, V_x:% f n , mainmass_x [i] .V);=i + 1;
} _ step_x=i - 1; (fp, a_x:% f n , a_x); (fp, Vmaxindexstep:% d n , Vm_step_x); (fp, Vmax_x:% f n , V...