Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ***********************************************************
- // ** NyaOS Sample **
- // ***********************************************************
- // http://teplofizik.diary.ru/p179560849.htm
- // Файл описания функций и главных структур ОС.
- #include "nyaos_config.h"
- #include <stdint.h>
- #ifndef __NYAOS_H
- #define __NYAOS_H
- #define E_PROCESS_CREATED 0 // Процесс успешно создан.
- #define E_PROCESS_MAX_COUNT 1 // Процессов слишком много. Нет свободных слотов.
- // Описание регистров в стеке после входа в прерывание
- typedef struct
- {
- uint32_t R0; // Регистры общего назначения
- uint32_t R1;
- uint32_t R2;
- uint32_t R3;
- uint32_t R12;
- uint32_t LR; // Регистр с адресом возврата
- uint32_t PC; // Регистр-указатель команды
- uint32_t CPSR; // Регистр статуса
- } TInterruptStackFrame;
- // Контекст процесса
- // Связанная величина: CONTEXT_SIZE (nyaos_core.s)
- typedef struct
- {
- uint32_t SP; // Указатель стека процесса. Там сохранятся
- // R0-R3, R12, LR, PC, CPSR
- uint32_t Rother[8]; // Остальные регистры: R4-R11
- } TProcessContext;
- // Запись о процессе
- typedef struct
- {
- uint32_t PID; // Идентификатор процесса
- uint32_t Flags; // Флаги
- char * Name; // Название процесса
- volatile TProcessContext * Context; // Контекст
- } TProcess;
- // Определение функции процесса
- // Аргументы: 1
- // Argument: передаётся из функции создания процесса
- // Результат: код завершения.
- typedef int (* TProcessFunc(uint32_t Argument));
- // Инициализация ОС
- // Аргументы: нет
- // Результат: нет
- void nyaos_Init(void);
- // Запуск диспетчера ОС
- void nyaos_Start(void);
- // Добавить процесс
- // Аргументы: 4
- // Name: имя процесса
- // EntryPoint: точка входа;
- // Argument: аргумент, которй будет передан в функцию;
- // Flags: параметры создания процесса.
- // Результат: код ошибки
- int nyaos_AddProcess(char * Name, void * EntryPoint, uint32_t Argument, uint32_t Flags);
- // Задержка
- // Аргументы: 1
- // Value: счётчик, величина задержки
- // Результат: нет
- void delay(uint32_t Value);
- // Инициализация выводов, подключённых к светодиодам
- // Аргументы: нет
- // Результат: нет
- void LedInit(void);
- // Зажечь светодиод по его номеру
- // Аргументы: 1
- // Index - номер светодиода, от 0 до 3
- // Результат: нет
- void LedOn(uint32_t Index);
- // Погасить светодиод по его номеру
- // Аргументы: 1
- // Index - номер светодиода, от 0 до 3
- // Результат: нет
- void LedOff(uint32_t Index);
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement