www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Betriebsystem für AVR


Autor: Daniel (root) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

Ich suche ein BS für AVR. Speziell geht es mir darum die Technik
zum Kontextwechsel anzuschauen. Daher sollten die Prozesse unterbrechbar
sein => echtes Multitasking.

Grüsse, Daniel

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klein: AvrX. Vergleichsweise gross: FreeRTOS.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Daher sollten die Prozesse unterbrechbar
>sein => echtes Multitasking.

Popcorn.

Autor: Markus ---- (mrmccrash)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Echtes Multitasking ohne vollwertige MMU? mutig...

_.-=: MFG :=-._

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso?

Ist nicht wesentlicher mutiger als normale Controllerprogrammierung mit 
Interrupts.

Autor: vlad (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich denmke für sowas ist ein AVR ungeeignet, das Verhältnis von 
rechenpower zu Verwaltungsaufansd für multitasking ist zu gering.
Wenn man sowas braucht, sollten man sich nach einem brauchbaream ARM 
oder sowas umsehen.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Echtes Multitasking ohne vollwertige MMU? mutig...

Was hat eine MMU damit zu tun?

Autor: Daniel (root) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist im Wesentlichen nur zu Lernzwecken gedacht. Bevor ich die
Quellen von einem "echten OS" anschaue und mit 100 Konzepten
gleichzeitig erschlagen werde, will ich etwas kleines putziges^^

Das Schema für ein kooperatives OS habe ich schon:
#define MAX_TASKS 3

int task = 0;

timer_interrupt() {
    task++;
    task %= MAX_TASKS;
}

void thread0() {
    // keine while(1) nötig
    if(nix_zu_tun) {
        task++;
        task %= MAX_TASKS;
        return;
    }
}

void init() {
   setup_timer(10 usec);
}

int main() {
   init();
   switch(task) {
       case 0: thread0(); break;
       case 1: thread1(); break;
       case 2: thread2(); break;
       // ... usw
   }
}

Wenn ein thread trotzdem auf ihregendeine Weise while(1)
hinbekommt, dann hängt alles.
Etwas ähnliches habe ich auf Linux programmiert. Habe dafür
alarm() system call als Timer missbraucht. Wenn da ein Thread
blockierend liest, dann hängt auch alles.

Ich überlege mir wie ich Speicher "aufteilen" soll, damit jeder
Thread eigenen Stack bekommt.(und weitere Aufrufe tätigen kann)
Bestimmt gibt es andere Probleme, an die ich nicht gedacht habe.
MMU zählt erst mal nicht dazu ;-)

Grüsse

Autor: Daniel (root) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ups .. im Code oben fehlt in main die Endlosschleife
bitte mental dazudenken :)

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guckst du : http://www.femtoos.org/

Gruß
Sven

Autor: Rik Langobar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
FreeRTOS ist ziemlich cool (wurde oben ja schon erwaehnt). Laeuft 
problemlos ab Atmega32. Nur muss man hoellisch aufpassen mit dem 
RAM-Verbrauch, weil jeder Task (logischerweise) seinen eigenen Stack 
unterhaelt.

Autor: Arne (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
RTOSe gibts für den AVR ne Menge, einfach mal bei AVRfreaks nachschauen 
oder googlen.

Allerdings ist der AVR nicht sonderlich gut dafür geeignet, da er sehr 
wenig SRAM hat.
Pro Task 32 Register sichern, 32 Byte Call-Stack, 32 Byte Variablen, 
also ~100Byte ist nicht viel.
Bei nur 10 Tasks ist dann ein ATmega16 (1kB) rappeldicht zu.
Interrupts sind dabei nichtmal eingerechnet. Auch sonstige 
SRAM-Verbraucher (Display-Buffer, UART-FIFO usw.) kannste knicken.

Ein RTOS geht also nur für sehr kleine und überschaubare Applikationen, 
wo man es eigentlich garnicht bräuchte.


Peter

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.