mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Atmega nC rudimentär-"Betriebssystem"


Autor: Phillip Hommel (philharmony)
Datum:

Bewertung
0 lesenswert
nicht 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:
void main(void)
{init(); //including setup.cfg
 prefunct()
 for(;;)
  {void PROGRAM(void(?)); //das ist dan individuell je nach Anwendung
  }

}


ISR_Vect...
{  //zB RX-Handler. Timers...
}


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
void change(int &Wert, int Difference) //mit oder ohne '&' oder zweimal aufrufen?
{*Wert = Wert + Difference; //geht da auch *Wert += Difference?
}

Autor: Bastler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Phillip Hommel (philharmony)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
daß ich bei verschiedenen Interrupts aufpassen muß ist klar, geht ja nur 
um die Struktur.
Stimmt, die Endlosschleife macht im Program selbst mehr sinn.
Ansonsten so machbar und vernünftig?

Autor: .... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das muss alles in einen Bootloader sein, denn ein AVR kann keinen Code 
im Speicher ausfuehren. Ob der Mega8535 passend Bootspace hat ist eine 
Frage... sonst den 644er oder so anschauen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.