Розробка операційної системи реального часу для цифрового сигнального процесора MicroDSP-RTOS

Контрольная работа - Компьютеры, программирование

Другие контрольные работы по предмету Компьютеры, программирование

ого розміру. Для роботи необхідно заздалегідь створити пул, вказавши кількість буферів в ньому і їх розмір (зрозуміло, сумарний розмір не повинен перевищувати кількість вільної динамічної памяті), після чого системними викликами можна виділяти буфера і повертати їх назад в пул, позначаючи їх, тим самим, як вільні. При такій функціональності дефрагментувати память немає необхідності, оскільки робота ведеться тільки з буферами однакового розміру.

 

1.5 Використання процедур обробки переривань

 

Із присутніх у процесорі ліній переривання одна зайнята самою операційною системою (переривання таймера для реалізації багатозадачності). У своїй програмі розробник може реалізовувати обробку інших переривань, але при цьому необхідно мати на увазі деякі особливості системи.

У першу чергу, це можливість забороняти переривання на деякий час. Це буває необхідно в разі, коли програмі потрібно винятковий доступ до даних, і ніяке стороннє втручання неприпустимо. Наприклад, в більшості системних функцій RTOS на початку коду переривання забороняються, а в кінці дозволяються. Це зроблено для того, щоб в процесі зміни внутрішніх системних даних не могло статися перемикання завдання, що призвело б до помилок. Проте цією можливістю не слід зловживати, і вкрай бажано, щоб переривання не були заборонені протягом тривалого часу, оскільки це істотно знижує час реакції системи на зовнішні події.

Важливим моментом є також те, що всередині процедур обробки переривань неможливий виклик функцій очікування. При спробі викликати таку функцію буде повернуто код помилки. Здійснення ж сигналів та повідомлень, а також звільнення семафорів всередині обробників переривань допустимо, хоча і вимагає деяких додаткових дій, а саме: на початку процедури обробки необхідно зберегти контекст поточного завдання шляхом виклику відповідної системної функції, а в кінці замість звичайної інструкції повернення з переривання (RETI) потрібно виконати виклик системної функції повернення, яка присутня у RTOS API. Це все потрібно для того, щоб забезпечити коректну обробку переривання. У звичайній ситуації виклик функції відправлення повідомлення може викликати переключення на більш пріоритетну задачу. У разі ж обробки переривання така поведінка неприпустимо, і тому замість негайного перемикання функція відправлення повідомлення просто виставляє прапор перемикання. Після того, як обробка переривання буде завершена, можна виконувати перемикання завдань, що і робить системна функція повернення з переривання, якщо виявляє, що прапор виставлений (саме для цього на початку потрібно зберегти контекст завдання).

 

 

2. Підтримка MicroDSP-RTOS в MetaDSP

 

Система MicroDSP-RTOS розроблялася для створення проектів в інтегрованому середовищі крос-розробки MetaDSP, в якій були додані нові можливості, що полегшують створення й налагодження RTOS-проектів. У першу чергу це система RTOS Illuminator, що дозволяє переглядати і змінювати стан завдань у процесі виконання програми. Також були додані два нових типи профілюванням і новий тип проекту, що містить базовий шаблон для RTOS-проекту. Розглянемо ці нововведення докладніше.

 

2.1 RTOS Illuminator

 

Цей інструмент являє собою вбудовану утиліту для спостереження за станом процесів і управління ними ззовні. Візуально RTOS Illuminator є приєднується вікном у середовищі MetaDSP, в якому на декількох вкладках відображує стан підключених на даний момент задач.

 

Рис.2. Вид вікна RTOS Illuminator, управління завданнями

 

Вона дозволяє переглядати поточний стан процесів: імя процесу (імя підключається функції, поле Name), пріоритет (поле Priority), поточний статус процесу (Status). Якщо завдання припинена або перебуває у стані очікування, для неї відображається значення таймауту (Delay), а для задач, які чекають настання деякого події, додатково вказується, яка саме ця подія (Event). Для виконуваної в даний момент завдання також зазначаються кількість тактів, що минув з моменту останнього перемикання на це завдання (Resumed Cycles), та поточний адресу виконання (Run Address). Для неактивних завдань у поле Run Address виводиться адреса програмної памяті, з якого буде продовжено виконання завдання. Подвійним клацанням миші по цьому полю можна перейти до того місця вихідного коду, яке відповідає вказаною адресою, тобто по суті, до тієї точки виконання, в якій завдання була перервана.

Крім цього в цій вкладці можна змінювати стан завдань, а саме:

  1. відключити завдання (команда Disconnect Task в системному меню);
  2. перевести задачу з режиму очікування, блокування або призупиненого стану в режим готовності (команда Make Task Ready);
  3. змінити пріоритет завдання (редагуванням значення в полі Priority);
  4. змінити значення таймауту (при виставленні таймауту в 0 завдання, що перебуває в стані припиненому буде переведена в режим готовності, а для задач, які чекають настання якого-небудь події значення 0 означатиме нескінченний час очікування);

Зліва від імені кожного завдання присутній прапорець, включивши який, можна встановити точку зупину, спрацьовує в момент перемикання RTOS на це завдання. Ця функція значно розширює можливості налагодження багатопоточних додатків.

На Рис.3 показана вкладка Events.

 

Рис.3. Вид вікна RTOS Illuminator, управління обєктами синхронізації

 

На цій вкладці відображаються всі обєкти межзадачного взаємодії і синхронізації, створені програмою. Для кожного обєкта виводяться його адреса (у полі Name),