Hi,
ich arbeite an einem Projekt, in dem ich mehrer Master-Boards an denen
dann verschiedene "Slaves" mit unterschiedlichen Aufgaben hängen.
Die Master-Boards an sich sind eigentlich fast identisch, enthalten alle
einen Atmega8535, ein UM232R-Modul, eine ISP6 Schnittstelle, einen 8er
Dip-Switch für Adresszuweisung und je nach Anwendung die restlichen
Ports vergeben.
Daran hängen dann zb Boards mit Relais, Servos, Schieberegistern etc.
Das Protokoll mit dem in dann über das UM232R-Modul mit den Boards
komuniziere ist bei allen gleich, ich kann Commands (Reset, resend
Data...) und Daten an die Boars senden sowie empfangen, die Daten kommen
in einen RX-Speicher und werden dann im Hauptprogramm verarbeitet.
Die Idee ist jetzt, eine art rudimentärst-"Betriebssystem" (wenn man das
überhaupt so nennen kann) zu schreiben, das auf alle Controller drauf
kommt, nach dem Prinzip:
1 | void main(void)
|
2 | {init(); //including setup.cfg
|
3 | prefunct()
|
4 | for(;;)
|
5 | {void PROGRAM(void(?)); //das ist dan individuell je nach Anwendung
|
6 | }
|
7 |
|
8 | }
|
9 |
|
10 |
|
11 | ISR_Vect...
|
12 | { //zB RX-Handler. Timers...
|
13 | }
|
Die init, setup.cfg, Prefunct und PROGRAM würden dann individuell
geschrieben, der rest einmal für alle. in der Init wird dann zb auch
bestimmt, welche der ISR-Handler benutzt werden...
Da PROGRAM ja mehr als nur einen Wert ändern soll, muß ich darin dann
vermutlich mit Zeigern arbeiten, richtig? Das heißt ich muß dann auch
alle Variablen die ich geändert abspeichern will als Parameter (bzw mit
var_type &var_name deren Speicheradresse) übergeben und mit *var_name =
xyz speichern?
Bin ich mit diesen Gedanken auf dem richtigen Weg oder hab ich mich da
verlaufen?
Wie sieht es aus, wenn ich einen Wert als Ein- und als Ausgabe benutze?
Also
1 | void change(int &Wert, int Difference) //mit oder ohne '&' oder zweimal aufrufen?
|
2 | {*Wert = Wert + Difference; //geht da auch *Wert += Difference?
|
3 | }
|