Atmega644 port für freeRTOS

OP #2612584
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.
Angehängte Dateien:
#2612665
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.
Gast #2612736
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.
OP #2613138
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.
Gast #2613301
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.