Hallo,
auf dem Speiseplan steht eine Implementierung eines Schedulers (um
automatisch mehrere Zweige aus der main-loop verarbeiten zu lassen) und
ein Timer. Das ganze ist objektorientiert gehalten und in C++
geschrieben.
Das ganze ist so angelegt dass es leicht in ein Projekt eingebunden
kann.
Hier ein Beispiel:
1 | #include "scheduler.h"
|
2 | #include "timer.h"
|
3 |
|
4 | class Task1: public SchedulerItem
|
5 | {
|
6 | private:
|
7 | Timer timer; //this expands our scheduleritem to a timer
|
8 |
|
9 | protected:
|
10 | void Execute(void); //this method is called from the mainloop (indirectly)
|
11 |
|
12 | public:
|
13 | Task1(void);
|
14 | };
|
15 |
|
16 | Task1::Task1(void)
|
17 | {
|
18 | //Constructor...
|
19 | DDRB |= 1<<PB7; //just for debugging...
|
20 | timer.SetTime(1000); //flag timer in 1000 ms
|
21 | }
|
22 |
|
23 | void Task1::Execute(void)
|
24 | {
|
25 | if (timer.IsFlagged())
|
26 | {
|
27 | PORTB ^= 1<<PB7; //just for debugging...
|
28 | timer.SetTime(1000); //flag the timer in 1000 ms
|
29 | }
|
30 | //...other things to do within this task...
|
31 | }
|
32 |
|
33 | Task1 task1;
|
Das angehängt Testprogramm lässt einen Pin jede Sekunde auf einem Mega64
umschalten.
Schönen Gruß
Stefan