Forum: Mikrocontroller und Digitale Elektronik Atmega644 port für freeRTOS


von T. K. (tarek_k)


Angehängte Dateien:

Lesenswert?

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.

von Hannes .. (hans_m)


Lesenswert?

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.

von T. K. (tarek_k)


Lesenswert?

Hi,

habe jetzt mal deine Zeile in meinen code eingefügt und das auch dann 
aufm kontroller draufgeflascht.
Bekomme immer noch die selbe Ergebnis.

von Hannes .. (hans_m)


Lesenswert?

evtl. den Stack ein wenig größer machen z.B. 1000

configMINIMAL_STACK_SIZE ist vielleicht ein bisschen zu klein

von T. K. (tarek_k)


Lesenswert?

habe ich dem entsprechend angepasst, dabei hat sich nichts geändert

von Jojo S. (Gast)


Lesenswert?

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.

von T. K. (tarek_k)


Lesenswert?

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.

von T. K. (tarek_k)


Lesenswert?

@jojos: kannst du mir sagen wo sich die Funktion 
"prvCheckOtherTasksAreStillRunning()" befindet. Und wo genau soll ich 
sie in main.c einfügen?

von T. K. (tarek_k)


Lesenswert?

lol XP habe diese funktion übersehen striecht meine dumme Frage.

von T. K. (tarek_k)


Lesenswert?

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.

von Jojo S. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.