Hi, ich versuche seit einiger Zeit freeRTOS auf einem atmega644 zu portieren. Es gibt verschiedene Links die hier im Forum aber die sind shcon relativ alt so dass ich ein neuen Beitrag öffnen muß. Die Stellen die ich zu ändern habe sind klar, ein Atmega32 hat andere Registerbezeichnung als der Atmega644, was ich auch gemacht habe. Als Resultat hat auch make keine Beanstandungen gemacht was gut aussieht. Ich habe es dann auf dem 644 geflascht überm stk500. Und hier ist das merkwürdige, während des flashen gehen LED7,6,5 an, und nachdem flashen gehen die aus und LED0 geht an und bleibt so. Ich habe dann mal versucht via serielle konsole zu schauen ob da was geht aber keine reaktion. Im Anhang habe ich mein Code beigefügt. Was ich darin geändert habe ist folgendes: Bei serial.c : UDR -> UDR0 UCSRB -> UCSR0B UBRRH -> UBBR0H UBRRL -> UBRR0L UCSRC -> UCSR0C Bei port.c : TIMSK -> TIMSK1 Wichtig zu wissen ist dass ich zum ersten mal eine Portierung mache. Würde mich über eure Vorschläge freuen und bedanke mich für eure Hilfe im Voraus.
Hi, also wenn ich das richtig sehe startest du die LED-Funktion nicht. -> main.c ->
1 | xTaskCreate( vParTestToggleLED, ( signed char * ) "LED", configMINIMAL_STACK_SIZE, NULL, mainLED_TASK_PRIORITY, NULL ); |
EDIT: Hab gerade gesehen das die Funktion in der vErrorChecks gestartet wird. Evtl. mal eine Task nur mit der LED Toggle-Funktion versuchen zum laufen zu bringen.
Hi, habe jetzt mal deine Zeile in meinen code eingefügt und das auch dann aufm kontroller draufgeflascht. Bekomme immer noch die selbe Ergebnis.
evtl. den Stack ein wenig größer machen z.B. 1000 configMINIMAL_STACK_SIZE ist vielleicht ein bisschen zu klein
der Stack sollte in der Demo schon passen, soviel RAM hat der 644er nicht, 4k um genau zu sein. Und in der Demo werden einige Tasks gestartet. Nur sobald man ein printf() einfügt ist man schnell über dem min Stack. Vielleicht erstmal die serielle Task deaktivieren. Ist beim AVR halt mühselig ohne Debugger... In prvCheckOtherTasksAreStillRunning() könntest du per LED anzeigen ob eine Task nicht läuft.
ok, beim ersten Blick muss es die Zeile mit "vAltStartComTestTasks( mainCOM_TEST_PRIORITY, mainCOM_TEST_BAUD_RATE, mainCOM_TEST_LED );" auskommentiert. Immer noch das selbe Ergebnis.
@jojos: kannst du mir sagen wo sich die Funktion "prvCheckOtherTasksAreStillRunning()" befindet. Und wo genau soll ich sie in main.c einfügen?
Ok, ich habe zu mindest ein led zum blinken gebracht, was eingendlich trivial ist ABER freeRTOS funktioniert. @jojos: wieso sollte der Speicher soo voll sein wenn ich configMINIMAL_STACK_SIZE auf 90 gesetzt habe? so viele tasks sind es auch wieder rum nicht.
der Vorschlag von Hannes... war den Stack auf 1000 zu vergrössern, das ist im Prinzip gut wenn man soviel Speicher zur Verfügung hat. Wie gesagt, die Beispiele sind so ausgelegt das die Funktionieren. Nur sobald man einen Buffer auf den Stack legt oder weiter verschachtelte Funktionsaufrufe macht dann knallt es. Ich hatte das z.B. durch einfügen eins 'printf()', was natürlich je nach implementierung einige Resourcen braucht. Sinnvoll für den Anfang ist sicher eine einfache Stringausgabe zu bauen um über die serielle Debugausgaben senden zu können.
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.