Специфікація BTRON3 (Український переклад) | Частина 1: Загальні структури даних (Shared Data)
Повернутися до загального змісту розділу
Наступна сторінка: Розділ 2. Система кодування TRON Code (Перейти)

Розділ 1. Базові типи даних


Нижче наведено загальновживані типи даних, системні специфікатори та константи, визначені в специфікації BTRON.

Базові типи даних: загальні для ITRON та BTRON

typedef char            B;          /* Знакове 8-бітове ціле число */
typedef short           H;          /* Знакове 16-бітове ціле число */
typedef int             W;          /* Знакове 32-бітове ціле число */
typedef unsigned char   UB;         /* Беззнакове 8-бітове ціле число */
typedef unsigned short  UH;         /* Беззнакове 16-бітове ціле число */
typedef unsigned int    UW;         /* Беззнакове 32-бітове ціле число */

typedef char            VB;         /* Невизначені 8-бітові дані */
typedef short           VH;         /* Невизначені 16-бітові дані */
typedef int             VW;         /* Невизначені 32-бітові дані */

typedef void            *VP;        /* Вказівник на невизначені дані (void*) */

typedef void            (*FP)();    /* Загальний вказівник на функцію */

Наведені вище типи даних є спільними для специфікацій ITRON та BTRON.

Volatile: специфікатор заборони оптимізації компілятором

typedef volatile W      _W;     /* Заборона оптимізації: знакове 32-бітове ціле */
typedef volatile H      _H;     /* Заборона оптимізації: знакове 16-бітове ціле */
typedef volatile B      _B;     /* Заборона оптимізації: знакове 8-бітове ціле */

typedef volatile UW     _UW;    /* Заборона оптимізації: беззнакове 32-бітове ціле */
typedef volatile UH     _UH;    /* Заборона оптимізації: беззнакове 16-бітове ціле */
typedef volatile UB     _UB;    /* Заборона оптимізації: беззнакове 8-бітове ціле */

typedef volatile void   _void;

Модифікатори типів

#define CONST       const       /* Заборона присвоєння значення змінній/функції */

#define LOCAL       static      /* Використовується лише всередині модуля(*) */
                                /* змінна або функція */

#define EXPORT                  /* Оголошення змінної або функції, доступної */
                                /* з будь-якого місця програми. Оголошення EXPORT */
                                /* пишеться лише в одному місці програми */

#define IMPORT      extern      /* Оголошення зовнішнього посилання на змінну */
                                /* або функцію. Дозволяє використовувати */
                                /* експортовану (EXPORT) змінну чи функцію */

#define VOID        void        /* Порожній тип */
* Модуль

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

Числові типи

typedef float       FLOAT;      /* Дійсне число одинарної точності (32 біти) */
typedef double      DOUBLE;     /* Дійсне число подвійної точності (64 біти) */
typedef int         BOOL;       /* Логічний тип: TRUE або FALSE */
typedef W           (*FUNCP)(); /* Вказівник на функцію, що повертає значення типу W */

Логічні значення

typedef enum {
    False = 0, 
    True = 1
} Bool;         /* Логічне значення */

Ідентифікаційні номери (ID)

typedef W       ID;     /* Системний ідентифікатор (ID) */

Часові значення

typedef W       MSEC;   /* Час у мілісекундах */
typedef W       STIME;  /* Системний час (секунди з 00:00:00 GMT 01.01.1985) */

Символьні коди

typedef UH      TC;         /* Код символу TRON Code (16 біт) */
#define TNULL   ((TC) 0)    /* Термінатор символьного рядка (Null-character) */

Коди помилок

Формат для архітектури з порядком байтів Big-Endian:

typedef union {
    W           err;            /* Загальний код помилки */
    struct {
            H   eclass;         /* Клас помилки */
            UH  detail;         /* Деталізований код помилки */
    } c;
} ErrCode;

Формат для архітектури з порядком байтів Little-Endian:

typedef union {
    W           err;            /* Загальний код помилки */
    struct {
            UH  detail;         /* Деталізований код помилки */
            H   eclass;         /* Клас помилки */
    } c;
} ErrCode;

Значення, що повертаються системними викликами, мають один із наступних типів:

typedef W       ERR;        /* Код помилки: використовується для системних викликів, */
                            /* що повертають лише успіх (OK) або код помилки */
typedef W       WERR;       /* Повертане значення системного виклику: */
                            /* використовується, коли виклик повертає або код помилки, */
                            /* або значення (наприклад, ID, довжину, лічильник) */

У звичайних випадках використовується тип ERR, а коли потрібні розширені деталі помилки — об'єднання ErrCode.

#define OK      (0)         /* Успішне виконання (OK) */

Спільні прапорці та атрибути

#define CLR         0x0000      /* Прапорець очищення ресурсів */
#define NOCLR       0x0008      /* Прапорець збереження ресурсів (без очищення) */
#define DELEXIT     0x8000      /* Запит на видалення об'єкта при завершенні процесу */

Розміри (Геометрія)

typedef struct Size {
    H     h;    /* Ширина (Горизонтальний розмір) */
    H     v;    /* Висота (Вертикальний розмір) */
} SIZE;

Точка (Координати)

typedef struct point {
    H     x;    /* Горизонтальна координата */
    H     y;    /* Вертикальна координата */
} PNT;

Прямокутник (Область)

typedef union rect {
    struct _rect {
        H       left;       /* Ліва координата */
        H       top;        /* Верхня координата */
        H       right;      /* Права координата */
        H       bottom;     /* Нижня координата */
    } c;
    struct {
        PNT     lefttop;    /* Верхня ліва точка */
        PNT     rightbot;   /* Нижня права точка */
    } p;
} RECT;

Посилання на файл (Real Object Link)

#define L_FSNM      20    /* Максимальна довжина назви файлової системи у символах */
typedef struct {
    TC    fs_name[L_FSNM];
                          /* Назва файлової системи (TRON Code) */
    UH    f_id;           /* Ідентифікатор файла (File ID) */
    UH    atr1;           /* Атрибутні дані 1 */
    UH    atr2;           /* Атрибутні дані 2 */
    UH    atr3;           /* Атрибутні дані 3 */
    UH    atr4;           /* Атрибутні дані 4 */
    UH    atr5;           /* Атрибутні дані 5 */
} LINK;

Вікно (Window Handle)

typedef W       WID;     /* Ідентифікатор вікна (Window ID) */

Повернутися до загального змісту розділу
Наступна сторінка: Розділ 2. Система кодування TRON Code (Перейти)