Специфікація BTRON3 (Український переклад) | Розділ 5: Ядро операційної системи (Kernel)
Повернутися до змісту розділу Ядра
Попередня сторінка: 1.8 Менеджер пристроїв (Повернутися)
Наступна сторінка: 1.10 Системне управління (Перейти)
Підсистема керування часом та таймерами забезпечує:
- Відлік та підтримку системного часу астрономічного календаря
STIME (секунди з 1 січня 1985 року, 00:00:00 GMT).
- Конфігурування часових поясів (
TIMEZONE) та корекцію літнього часу (Daylight Saving Time, DST).
- Перетворення системного часу в календарні дати (
DATE_TIM) та зворотну конвертацію.
- Тайм-аути та затримки виконання задач (
dly_tsk).
- Створення та обробку апаратних і циклічних таймерів-алармів (
def_alm, req_alm, can_alm).
Локальний астрономічний час обчислюється за формулою:
Локальний_час = Системний_час - adjust + (dst_flg ? dst_adj * 60 : 0)
□ Специфікація часового поясу (TIMEZONE)
typedef struct {
W adjust; /* Різниця із системним часом GMT у секундах (-43200..+43200) */
W dst_flg; /* 0 = без DST, != 0 = увімкнено літній час */
W dst_adj; /* Величина корекції DST у хвилинах (наприклад, 60 хв) */
} TIMEZONE;
□ Календарна дата та час (DATE_TIM)
typedef struct {
W d_year; /* Рік як зсув від 1900 (наприклад, 126 відповідає 2026 року) */
W d_month; /* Місяць (1..12; 0 = спецрежим з використанням d_days) */
W d_day; /* День місяця (1..31) */
W d_hour; /* Година (0..23) */
W d_min; /* Хвилина (0..59) */
W d_sec; /* Секунда (0..59) */
W d_week; /* Номер тижня у році (1..54) */
W d_wday; /* День тижня (0..6; 0 = неділя) */
W d_days; /* Порядковий день від початку року (1..366) */
} DATE_TIM;
□ Визначення таймера-аларма (T_DALM)
typedef struct {
VP exinf; /* Додаткова інформація розширення (Extended Information) */
ATR almatr; /* Атрибути аларму (TA_ASM, TA_HLNG, TA_CYC, TA_ABS) */
FP almhdr; /* Адреса функції обробника аларму (Alarm Handler) */
} T_DALM;
□ Запит спрацьовування аларма (T_RALM)
typedef struct {
STIME almtime; /* Час першого спрацьовування (абсолютний або відносний) */
UW cyctime; /* Циклічний інтервал у мілісекундах (0 = одноразовий) */
} T_RALM;
| get_tim |
| Get System Time |
| Отримання поточного системного часу та часового поясу (Get System Time) |
|
【Синтаксис / Прототип】
ERR get_tim(STIME *time, TIMEZONE *tz)
【Параметри】
STIME *time Буфер для збереження системного часу GMT (NULL = не повертати)
TIMEZONE *tz Буфер для збереження параметрів часового поясу (NULL = не повертати)
【Значення, що повертається】
= 0 Успішне виконання (E_OK)
< 0 Помилка (Код помилки)
【Детальний опис】
Зчитує поточне значення астрономічного системного часу у секундах за Гринвічем (GMT), а також поточні налаштування часового поясу та літнього часу.
【Коди помилок】
ER_ADR : Неприпустима адреса вказівника time або tz у віртуальній пам'яті.
| set_tim |
| Set System Time |
| Встановлення системного часу та часового поясу (Set System Time) |
|
【Синтаксис / Прототип】
ERR set_tim(STIME time, TIMEZONE *tz)
【Параметри】
STIME time Нове значення системного часу GMT (<= 0 = не змінювати час)
TIMEZONE *tz Нове значення параметрів часового поясу (NULL = не змінювати пояс)
【Значення, що повертається】
= 0 Успішне виконання (E_OK)
< 0 Помилка (Код помилки)
【Детальний опис】
Встановлює значення системного годинника астрономічного часу та налаштування часового поясу. Для зміни системного часу процес повинен мати системні привілеї адміністратора.
【Коди помилок】
ER_ACCES : Нестача привілеїв для зміни системного часу.
ER_ADR : Неприпустима адреса вказівника tz у пам'яті.
ER_PAR : Неприпустимі значення параметрів adjust або dst_adj у tz.
| get_tod |
| Get Time of Day / Calendar |
| Перетворення системного часу у календарну дату (Get Calendar Date) |
|
【Синтаксис / Прототип】
ERR get_tod(DATE_TIM *dt, STIME time, Bool local)
【Параметри】
DATE_TIM *dt Буфер для збереження календарної дати
STIME time Значення системного часу для перетворення (<= 0 = поточний час)
Bool local Прапорець: 0 = час за GMT, != 0 = локальний час з урахуванням поясу
【Значення, що повертається】
= 0 Успішне виконання (E_OK)
< 0 Помилка (Код помилки)
【Детальний опис】
Конвертує 32/64-бітне значення системного часу time у структуровану календарну дату dt (рік, місяць, день, година, хвилина, секунда, день тижня).
【Коди помилок】
ER_ADR : Неприпустима адреса вказівника dt у пам'яті.
| set_tod |
| Set Time of Day / Calendar |
| Перетворення календарної дати у системний час та встановлення годинника |
|
【Синтаксис / Прототип】
ERR set_tod(DATE_TIM *dt, STIME *time, Bool local)
【Параметри】
DATE_TIM *dt Календарна дата та час для перетворення
STIME *time Буфер для збереження отриманого часу (при NULL = встановити час годинника)
Bool local Прапорець: 0 = дата вказана за GMT, != 0 = локальна дата
【Значення, що повертається】
= 0 Успішне виконання (E_OK)
< 0 Помилка (Код помилки)
【Детальний опис】
Обчислює системний час STIME за вказаною календарною датою dt. Якщо параметр time = NULL, розраховане значення автоматично встановлюється як поточний системний час ОС.
【Коди помилок】
ER_ACCES : Нестача привілеїв для зміни системного годинника (при time = NULL).
ER_ADR : Неприпустима адреса вказівника dt або time у пам'яті.
ER_PAR : Некоректна дата (наприклад, 31 лютого або невизначений місяць).
| dly_tsk |
| Delay Task Execution |
| Затримка виконання поточної задачі (Delay Task) |
|
【Синтаксис / Прототип】
ERR dly_tsk(DLYTIME dlytim)
【Параметри】
DLYTIME dlytim Інтервал затримки у мілісекундах (0 = поступитися квантом часу)
【Значення, що повертається】
= 0 Успішне виконання після завершення затримки (E_OK)
< 0 Помилка (Код помилки)
【Детальний опис】
Переводить поточну задачу у стан очікування затримки WAIT_DLY на інтервал dlytim мілісекунд. Після закінчення інтервалу задача повертається у стан готовності READY. Якщо dlytim = 0, задача віддає залишок свого поточного кванту часу процесора іншим задачам із таким самим пріоритетом (Yield).
【Коди помилок】
ER_CTX : Виклик з обробника переривань або в режимі виключення диспечера.
ER_PAR : Неприпустиме або від'ємне значення інтервалу dlytim.
| def_alm |
| Define Alarm Handler |
| Створення та реєстрація обробника аларм-таймера (Define Alarm Handler) |
|
【Синтаксис / Прототип】
ERR def_alm(ID almid, T_DALM *pk_dalm)
【Параметри】
ID almid Ідентифікатор аларм-таймера (1..N)
T_DALM *pk_dalm Вказівник на структуру параметрів аларму (NULL = видалити аларм)
【Значення, що повертається】
= 0 Успішне створення або скасування обробника (E_OK)
< 0 Помилка (Код помилки)
【Детальний опис】
Реєструє у системі новий аларм-таймер з ідентифікатором almid та вказаною процедурою обробника almhdr. При pk_dalm = NULL зареєстрований аларм вилучається із системи.
【Коди помилок】
ER_ID : Неприпустимий ідентифікатор almid.
ER_ADR : Неприпустима адреса вказівника pk_dalm або almhdr у пам'яті.
ER_OBJ : Обробник аларму з таким almid вже існує.
| req_alm |
| Request Alarm Timer Trigger |
| Запуск та запит спрацьовування аларм-таймера (Request Alarm) |
|
【Синтаксис / Прототип】
ERR req_alm(ID almid, T_RALM *pk_ralm)
【Параметри】
ID almid Ідентифікатор зареєстрованого аларм-таймера
T_RALM *pk_ralm Вказівник на структуру із часом спрацьовування та циклом
【Значення, що повертається】
= 0 Успішний запуск таймера (E_OK)
< 0 Помилка (Код помилки)
【Детальний опис】
Активує аларм-таймер almid. Таймер почне відлік і при досягненні часу almtimeвикличе зареєстрований обробник. Якщо вказано cyctime > 0, аларм буде автоматично перезапускатися через кожні cyctime мілісекунд (циклічний таймер).
【Коди помилок】
ER_ID : Неприпустимий ідентифікатор almid.
ER_NOEXS: Обробник аларму з ідентифікатором almid не зареєстрований (def_alm).
ER_ADR : Неприпустима адреса вказівника pk_ralm у пам'яті.
| can_alm |
| Cancel Alarm Timer |
| Зупинка та скасування аларм-таймера (Cancel Alarm) |
|
【Синтаксис / Прототип】
ERR can_alm(ID almid)
【Параметри】
ID almid Ідентифікатор аларм-таймера
【Значення, що повертається】
= 0 Успішна зупинка аларм-таймера (E_OK)
< 0 Помилка (Код помилки)
【Детальний опис】
Зупиняє активний відлік аларм-таймера almid і скасовує подальші циклічні або одноразові виклики його обробника.
【Коди помилок】
ER_ID : Неприпустимий ідентифікатор almid.
ER_NOEXS: Аларм-таймер з таким almid відсутній або не запущений.
Повернутися до змісту розділу Ядра
Попередня сторінка: 1.8 Менеджер пристроїв (Повернутися)
Наступна сторінка: 1.10 Системне управління (Перейти)