-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTimer.cpp
More file actions
72 lines (55 loc) · 1.83 KB
/
Timer.cpp
File metadata and controls
72 lines (55 loc) · 1.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include "Timer.h"
// The Templates
////////////////////////////////////////////////////////////
#include "ArrayIndexAtIndexTemplate.h"
//Ein Wrapper für externalISR
//Rufe clearInteruptFlag() auf, bevor externalISR aufgerufen wird.
template<size_t N>
static size_t internalISR()
{
//timerAllList[N]->clearInterruptFlag();
//timerAllList[N]->timerExternalISR();
return N;
}
//Gibt einen Funktionszeiger auf die internalISR an der timerNumber korrespondierenden Stelle zurück.
template<size_t N>
struct getPointerToInternalISR {
static Timer::ISR_type apply() {
return &internalISR<N>;
}
};
const std::array<Timer::ISR_type, Timer::timerAllCount> Timer::timerInternalISRList(ArrayIndexAtIndexTemplate::FillArrayIndexDependent<ISR_type, Timer::timerAllCount, getPointerToInternalISR>::get());
// equal to
//const std::array<Timer::ISR_type, 6> Timer::timerInternalISRList({ &Timer::internalISR<0>, &Timer::internalISR<1>, &Timer::internalISR<2>, &Timer::internalISR<3>, &Timer::internalISR<4>, &Timer::internalISR<5> });
////////////////////////////////////////////////////////////
std::array<Timer*, Timer::timerAllCount> Timer::timerAllList({});
Timer::Timer(size_t timerNumber, ISR_type externalISR)
{
// Checks
if (timerNumber > (Timer::timerAllCount - 1)) {
throw;
}
if (!externalISR)
{
throw;
}
//timer objekt gibt es schon mit base bzw. timer number
if (Timer::timerAllList[timerNumber] != 0) {
throw;
}
// Zuweisungen
this->timerNumber = timerNumber;
this->timerExternalISR = externalISR;
// Übergeben von internalISR
//::TimerIntRegister(this->timerBase, TIMER_BOTH, Timer::timerInternalISRList[this->timerNumber]);
// Konsistenzsicherung
Timer::timerAllList[this->timerNumber] = this;
}
Timer::~Timer()
{
Timer::timerAllList[this->timerNumber] = reinterpret_cast<Timer*>(0);
}
void Timer::clearInterruptFlag()
{
return;
}