Hallo,
ich möchte FreeRTos auf der Base sowie auf der M32 meines RP6v1 laufen lassen und wüsste gern ob da breiteres Interesse oder gar Mitarbeit an dem Projekt mit AVR Studio 6 besteht. Als Projektziel stelle ich mir auf der Base eine Funktionalität ähnlich wie bei RP6Base_I2CSlave vor, auf der M32 das entsprechende Gegenstück. Allerdings eben nicht interruptgesteuert wie in der RP6Lib sondern mit einem erweiterbaren FreeRTos Multitasking Kernel Unterbau (aktuell 7.1.1). Ich möchte dabei möglichst funktionskompatibel zur RP6lib bleiben damit z.B. einfache Demoprogramme ohne viel umschreiben als Task lauffähig bleiben. Da die RP6lib bereits alle verfügbaren Timer benutzt, gibt es keinen "einfachen Weg" das OS und die RP6Lib zusammen zu bringen. Daher müsste für das FreeRTos einiges angepasst und/oder neu geschrieben werden - wo jedoch auch viele Verbesserungen einfließen können.
Mich störte schon immer, das z.b. Delays die Laufzeiteigenschaften des jeweiligen Programms beeinflussen und meiner Ansicht nach hat eine CPU eben besseres zu tun als in Delayloops fest zu stecken. Auch das daher bestimmte Funktionen blocken obwohl dies nicht immer notwendig wäre, störte mich zunehmend.
Nach umfangreicher Recherche habe ich mich dann zu FreeRTos http://www.freertos.org/RTOS.html entschieden. Auch weil es da schon fertige IP Stacks u.ä. gibt.
Man mag einwenden das den langsamen Mega32 der Base betreffend da mit Kanonen auf Spatzen geschossen wird aber in Verbindung mit anderen Zusatzboards wird das System schnell komplexer.
Ich habe mir das Demoprogramm von FreeRTos für AVR geschnappt und es auf die Hardware vom RP6 angepasst (Betrifft Hardwareinit, LED Funktionen, IRQ).
Das Ganze enthält derzeit ein Task System mit 3 Co-Routinen die 3 LEDs (sl1-3) in unterschiedlichen Zeiten toggeln.
Weiterhin wird ein Errortesttask ausgeführt, ein Mathetask und ein Registerchecktask.
Von den Tasks sieht man nicht viel, sie laufen aber. Der Ursprünglich vorhandene serial-looptask ist abgeschaltet, da man dort für ein erfolgreichen Test pin Rx/Tx brücken müsste... für ein schnellen Test ist das jedoch nicht angebracht. Die Poweron LED geht an wenn der Scheduler startet, startet er nicht (weil z.B. nicht alle tasks eingerichtet werden können), blinkt die Poweron Lampe (dürfte bei euch so nicht vorklommen). Alle 3 Sekunden toggelt zudem die sl6 als Zeichen dafür, das alle Tasks laufen. Würde ein oder mehrere Tasks sterben, blinkt sie nicht mehr. Die ursprüngliche Funktion des Resetcounters per hochgezählter Zelle im EEPROM aus dem Demo ist ebenfals deaktiv.
Der Bot bewegt sich nicht und macht auch sonst nichts anderes...
Anbei also als HEX für die Base mein erster Versuch FreeRTos auf dem RP6 laufen zu lassen.
http://www.freertos.org/a00098.html
und dort
http://www.freertos.org/a00102.html
findet sich etwas Doku dazu.
Die Quellen würde ich bei Interesse veröffentlichen, allerdings muss ich da erst noch aufräumen.
Mein GCC gibt mir übrigends derzeit folgende Werte für das Demo aus.
Program Memory Usage : 10350 bytes 31,6 % Full
Data Memory Usage : 1759 bytes 85,9 % Full
Der "hohe" RAM Verbrauch liegt an einer Speicherveraltung in FreeRTos, die sich in meinem Fall erst mal 1500 Byte reserviert und diese dann den Tasks z.b. als lokalen Stack und Queue bereit stellt. Der Kernel ansich braucht etwa 5k Rom ohne Tests und Geblinke.
Mehr dazu hier: http://www.freertos.org/FAQMem.html
Nachtrag: Curiosity hat es geschafft! http://mars.jpl.nasa.gov/msl/participate/ ... mit einem PowerPC SBC als "Hirn"
Lesezeichen