Advertisement
teplofizik

nyaos.h (9)

Aug 11th, 2012
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.82 KB | None | 0 0
  1. // ***********************************************************
  2. // **                    NyaOS Sample                       **
  3. // ***********************************************************
  4. // http://teplofizik.diary.ru/p179560849.htm
  5.  
  6. // Файл описания функций и главных структур ОС.
  7.  
  8. #include "nyaos_config.h"
  9. #include <stdint.h>
  10.  
  11. #ifndef __NYAOS_H
  12. #define __NYAOS_H
  13.  
  14.     #define E_PROCESS_CREATED    0 // Процесс успешно создан.
  15.     #define E_PROCESS_MAX_COUNT  1 // Процессов слишком много. Нет свободных слотов.
  16.    
  17.     // Описание регистров в стеке после входа в прерывание
  18.     typedef struct
  19.     {
  20.         uint32_t  R0;  // Регистры общего назначения
  21.         uint32_t  R1;
  22.         uint32_t  R2;
  23.         uint32_t  R3;
  24.        
  25.         uint32_t  R12;
  26.        
  27.         uint32_t  LR;   // Регистр с адресом возврата
  28.         uint32_t  PC;   // Регистр-указатель команды
  29.        
  30.         uint32_t  CPSR; // Регистр статуса
  31.     } TInterruptStackFrame;
  32.  
  33.     // Контекст процесса
  34.     // Связанная величина: CONTEXT_SIZE (nyaos_core.s)
  35.     typedef struct
  36.     {
  37.         uint32_t     SP;        // Указатель стека процесса. Там сохранятся
  38.                                 // R0-R3, R12, LR, PC, CPSR
  39.        
  40.         uint32_t     Rother[8]; // Остальные регистры: R4-R11
  41.     } TProcessContext;
  42.    
  43.     // Запись о процессе
  44.     typedef struct
  45.     {
  46.         uint32_t                   PID;     // Идентификатор процесса
  47.         uint32_t                   Flags;   // Флаги
  48.         char *                     Name;    // Название процесса
  49.         volatile TProcessContext * Context; // Контекст
  50.     } TProcess;
  51.  
  52.     // Определение функции процесса
  53.     // Аргументы: 1
  54.     //  Argument: передаётся из функции создания процесса
  55.     // Результат: код завершения.
  56.     typedef int (* TProcessFunc(uint32_t Argument));
  57.        
  58.    
  59.     // Инициализация ОС
  60.     // Аргументы: нет
  61.     // Результат: нет
  62.     void nyaos_Init(void);
  63.        
  64.     // Запуск диспетчера ОС
  65.     void nyaos_Start(void);
  66.    
  67.     // Добавить процесс
  68.     // Аргументы: 4
  69.     //  Name: имя процесса
  70.     //  EntryPoint: точка входа;
  71.     //  Argument: аргумент, которй будет передан в функцию;
  72.     //  Flags: параметры создания процесса.
  73.     // Результат: код ошибки
  74.     int nyaos_AddProcess(char * Name, void * EntryPoint, uint32_t Argument, uint32_t Flags);
  75.  
  76.     // Задержка
  77.     // Аргументы: 1
  78.     //  Value: счётчик, величина задержки
  79.     // Результат: нет
  80.     void delay(uint32_t Value);
  81.    
  82.     // Инициализация выводов, подключённых к светодиодам
  83.     // Аргументы: нет
  84.     // Результат: нет
  85.     void LedInit(void);
  86.    
  87.     // Зажечь светодиод по его номеру
  88.     // Аргументы: 1
  89.     //  Index - номер светодиода, от 0 до 3
  90.     // Результат: нет
  91.     void LedOn(uint32_t Index);
  92.    
  93.     // Погасить светодиод по его номеру
  94.     // Аргументы: 1
  95.     //  Index - номер светодиода, от 0 до 3
  96.     // Результат: нет
  97.     void LedOff(uint32_t Index);
  98.    
  99. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement