Atmega nC rudimentär-"Betriebssystem"

OP #1245152
Lesenswert?
• ▲
▼
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
}
Gast #1245184
Lesenswert?
• ▲
▼
Wenn man die Endlosschleife in PROGRAMM hineinpackt, dürfte es sicher um 
einiges effizienter sein als so wie du es gemacht hast.

Außerdem sollte man beachten dass alle Programme sich die selben 
Interruptfunktionen verwenden und sich eventuell in die Quere kommen 
könnten.

Eventuell könnte man dass Ganze mittels Bootloader lösen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren