Forum: Mikrocontroller und Digitale Elektronik ATxmega - Free RTOS


von Roger P. (presi007)


Lesenswert?

Hallo an alle,

ich bin neue im Forum.
kann mir jemand sagen, ob ich Free RTOS auf ATxmega128 portieren kann ?
Was benötige ich wenn ich auf C Level programmieren möchte also Hardware 
und Entwicklungsumgebung?
Das ist mein erste Projekt im Bereich Embedded.

Viele Grüße
Roger

von gast (Gast)


Lesenswert?

erstmal C kenntnisse
dann AVR studio + <winAVR
dann einen Programmer .. zB AVR ISP MKII  wegen PDI
und hoffen das die Xmega lib keine groben fehler enthält

selbst wenn RTOS draufgeht .. ohne ein wort C macht der nix ...
die kleinen betribessysteme nehmen einem nur einen kleinen teil der 
arbeit ab ...
wobie man hier das wort betriebssystem eher falsch ansetzt

von :::: (Gast)


Lesenswert?

Was willste mit einem RTOS ? Zuviel Rechenleistung zum Verbraten ?

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Roger Emile schrieb:
> Hallo an alle,
>
> ich bin neue im Forum.
> kann mir jemand sagen, ob ich Free RTOS auf ATxmega128 portieren kann ?

Also durch die Tatsache wie und dass Du diese Frage hier stellst: nein. 
Und als erstes Projekt sowieso vollkommen illusorisch.

von Roger (Gast)


Lesenswert?

Danke an Gast , und Michael für die Rückmeldungen
Am besten stelle ich das Problem einfach vor.
Mit einem MCU soll ich ein System steuern und dabei soll ZB:
 - Sensor Daten im Echtzeit abgefragt und ausgewertet werden
 - Motoren gesteuert werden
 - usw........
das System ist auf jeden fall schon komplex
Ich kann in C programmieren und Assembler kenne ich auch bisschen.
Brauche ich unbedingt einen RTOS?

Danke

von Stefan M. (celmascant)


Lesenswert?

Was verstehst du denn unter Echtzeit?
Ein MC, egal wie schnell, wird die Senoren immer der Reihenfolge nach 
abfragen.
Du must halt nur dafür sorgen, das der MC das schnell genug macht.
Ich hbae eine komplette Menüführung auf einem mega32 programmiert und 
merke beim Bedienen nicht, das der MC nach jeder Schleife durchs Menü 
die 8 Analogeingänge jeweils 255 mal abfragt.
So ganz nebenbei berechnet er noch die anzuzeigenden Messwerte.
Ich merke davon nix... ;)

von spess53 (Gast)


Lesenswert?

Hi

>das System ist auf jeden fall schon komplex

Das ist eine sehr subjektive Einschätzung. Für bestimmte Leute ist 
LED-Blinken schon sehr komplex.

> - Sensor Daten im Echtzeit abgefragt und ausgewertet werden
> - Motoren gesteuert werden

Kannst du einen Motor in Echtzeit (also ohne Zeitverzögerung) vom 
Stillstand auf Nenndrehzahl bringen? Wenn nicht, hat dein µC wohl eher 
Probleme, die dazwischenliegende Zeit sinnvoll zu verbringen

MfG Spess

von gast (Gast)


Lesenswert?

>Brauche ich unbedingt einen RTOS?


nein ... wenn man die archiktur  und das problem versteht brauchman 
soetwas nicht
es nimmt einem nur etwas arbeit bei der verwaltung der tasks und 
einstellungen der timer ab ,... mehr nicht

diese betriebssysteme sind meiner meinung nach etwas quatsch ...
wenn an sich einige OS anguckt arbeitet dort nur ein kleiner timer in 
dem die anfallenden funktionen in einer vorbestimmten zykluszeit 
abgearbeitet werden ...
dann mach ich sowas lieber in einer main wo das ganze so schnell geht 
wie der µC und der takt es zulassen


wenn man also einen gescheiten taskmanager bastelt( ich hab ein array 
mit funktionszeigern )  kommt man auf ein ähnliches prinzip und kann so 
auch wunderbar mit tasks arbeiten


von meiner seite aus:  RTOS .. nein

und RT in der regelungstechnik ... der µC muss nur so schnell fertig 
sein wie man es brauch .. also in einer vorher berechnetetn zykluszeit

das kann man wunderbar im avrstudio simulieren

von dago (Gast)


Lesenswert?

>das kann man wunderbar im avrstudio simulieren
lool, wenn man ein RTOS drauf hat, simulier mal den 7268ten Taskswitch 
bei 3 Tasks. Dann verpasst man noch was :P

von anonamous (Gast)


Lesenswert?

Ich würde Betriebssysteme auf so kleinen Systemen nicht prinzipiell 
ausschließen, vorallem wenn man Preemptives Verhalten benötigt, was mit 
"Eine Große Schleife" oder "Array mit Funktionszeigern" nicht so elegant 
erreichen kann:

Fiktive Anwendung:
Task1: f=  5Hz, Laufzeit 20-40ms
Task2: f=100Hz, Laufzeit 2-5ms
Taskxy (...)
Verschiedene Interrupts: geforderte Reaktionszeit <200µs

Wobei ich zugeben muss, dass man dieses Problem auch durch Timer mit 
Interruptprioritäten lösen kann, allerdings erst ab einem atXmega, die 
alten AVR haben sowas ja nicht.
Kann man nur hoffen, dass man genügend Interruptprioritäten hat.

Alternativ kann man auch Software-Interruptprioritäten basteln...

Für so eine Anwendung halte ich einen kleinen preemtiven taskmanager für 
eleganter.

Arbeite mit FreeRTOS auf einem AT90CAN128. Meine Probleme sind:
Beim Taskwechsel werden ALLE Interrupts blockiert (cli();) und ein 
Taskwechsel dauert etwas -> lange&schwankende Interrupt-latenz.
ansonsten lässts sich damit gut arbeiten.

von Roger P. (presi007)


Lesenswert?

Hi spess53 ,

> Kannst du einen Motor in Echtzeit (also ohne Zeitverzögerung) vom
  Stillstand auf Nenndrehzahl bringen? Wenn nicht, hat dein µC wohl eher
  Probleme, die dazwischenliegende Zeit sinnvoll zu verbringen

Ein Echtzeit System ist nicht was du dich hier vorgestellt hat,bitte was 
über Echtzeit System lesen .....................

> Hi  anonamous,
Wir sind auf die selbe Wellenlängen.
Die Idee mit Interruptprioritäten bzw. preemtiven taskmanager finde gut.
>Alternativ kann man auch Software-Interruptprioritäten basteln...
kannst du bitte mehr dazu sagen ?

MfG
Roger

von anonamous (Gast)


Lesenswert?

bez interruptprioritäten in software: ist eigentlich nicht kompliziert.

Fiktive Anwendung:
*Atmega ohne Interruptprioritäten
*Timer0 ISR soll niedrigere Priorität als die anderen Interrupts haben
*Timer2 ISR soll wichtiger als Timer 0, aber unwichtiger als die 
restlichen ISRs sein.

->

ISR Timer0
* Am Anfang der ISR den Timer0-Interrupt deaktivieren, anschließen 
sei();
* ISR-Code
* dann cli(); und Timer0--Interrupt wieder aktivieren

ISR Timer2
* Am Anfang Interrupt-Zustand von Timer0 sichern, Timer0 und 
Timer2-Interrupt deaktivieren. sei();
* ISR-Code
* dann cli(); und die Interruptzustände von Timer0 und Timer2 wieder 
herstellen.

Die Interruptlatenz für die hochprioren Interrupts wird sich dadurch 
allerdings ein wenig vergrößern, da ja das ganze ge-push und das 
Interruptflag-handling gemacht wird, bevor mit sei(); wieder interrupts 
zugelassen werden.

Besser sind also eindeutig Hardware-Interruptprioritäten

von Helmut R. (heru01)


Lesenswert?

Jetzt aber wieder zum Thema zurück: :-)

gibt es ein RTOS für den XMega?
Ist da bereits was portiert worden? Nur rein interessehalber die 
Frage....

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.