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
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
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.
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
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... ;)
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
>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
>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
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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.