59 lines
1.2 KiB
C++
59 lines
1.2 KiB
C++
/*!\file
|
|
* \brief \todo Îïèñàíèå ôàéëà.
|
|
*/
|
|
/*
|
|
* ProcScheduler.h
|
|
*
|
|
* Created on: 21 ìàÿ 2019 ã.
|
|
* Author: titov
|
|
*/
|
|
|
|
#ifndef SOURCE_SYSTEMIC_PROCSCHEDULER_H_
|
|
#define SOURCE_SYSTEMIC_PROCSCHEDULER_H_
|
|
|
|
#include "IProcessor.hh"
|
|
#include <cstddef>
|
|
#include <stdint.h>
|
|
|
|
namespace systemic {
|
|
|
|
class ProcScheduler {
|
|
private:
|
|
IProcessor * * const processors;
|
|
const std::size_t size;
|
|
|
|
public:
|
|
typedef unsigned short ProcessorId;
|
|
typedef unsigned short Id;
|
|
|
|
struct ProcessParameter {
|
|
uint16_t priority;
|
|
uint16_t period;
|
|
uint16_t phase;
|
|
|
|
uint16_t controlled:1;
|
|
uint16_t reserved:15;
|
|
|
|
// ProcessParameter() : priority(0), period(1), phase(0), controlled(false), reserved() {}
|
|
};
|
|
|
|
bool registerProcess( ProcessorId processor_id, IProcess & proc, ProcessParameter parameters );
|
|
bool addProcessor( IProcessor * processor, ProcessorId processor_id );
|
|
|
|
ProcScheduler( IProcessor * * providers, std::size_t size );
|
|
|
|
};
|
|
|
|
template<std::size_t num>
|
|
struct ProcSchedulerBox {
|
|
IProcessor * records[num];
|
|
ProcScheduler manager;
|
|
|
|
ProcSchedulerBox( ) :
|
|
records(), manager( records, num ) {}
|
|
};
|
|
|
|
}
|
|
|
|
#endif /* SOURCE_SYSTEMIC_PROCSCHEDULER_H_ */
|