Hi, hab da mal ne Frage:
Was genau muß mann alles ändern bzw. beachten, um ein umfangreiches und
bereits bestehendes WinAVR-Projekt ins AVR-Studio (GCC ist vorhanden) zu
transferieren, damit man dort weiter damit arbeiten kann?
Danke im voraus!
mfg Peter
Hmm so hatte ich es auch gedacht, aber es kommen sehr sehr viele Fehler
compilieren.
Mal etwas genauer zum Projekt und zum Problem:
* FreeRTOS soll auf einen ATMEGA32
* FreeRTOS runtergeladen: es ist ein WinAVR-Projekt mit einem makefile
* Mit 'make all' im DOS-Fenster hat das kompilieren geklappt.
* Im AVR-Studio ein Projekt erstellt, auf externes makefile gestellt:
hat auch geklappt.
Problem: ich will das Projekt über AVR-Studio weiterbearbeiten, aber es
die Projektfiles werden auf der linken Seite nicht angezeigt. Ich muss
alles manuell hinzufügen. Wenn ich ein neues *.c erstelle, dann müsste
ich das manuell im makefile eintragen, was auf Dauer ziemlich
umständlich ist.
Nun habe ich versucht ein Projekt in AVR-Studio zu erstellen und alle
nötigen FreeRTOS-Daten manuell reinzukopieren. Auch die Pfade habe ich
in den configuration options eingetragen. Trotzdem kriegt sich der
Compiler fast nicht mehr ein vor lauter meckern. Inzwischen habe ich ihn
auf ca 65 Fehler runter, aber die Fehler sind sehr kryptisch für mich
und nicht kleinzukriegen.
Ich vermute, das die Reihenfolge beim Compilieren der Files nicht stimmt
und somit einige defines noch nicht vorliegen wo sie es sollten, aber
wie kommt man aus der Misere wieder raus?
Bsp.:
D:\AVRStudio\FreeRTOSV5.2.0\Demo\AVR_ATMega323_WinAVR\..\..\Source\inclu
de/portable.h:303: error: expected '=', ',', ';', 'asm' or
'__attribute__' before '*' token
die Zeile 303 lautet:
portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack,
pdTASK_CODE pxCode, void *pvParameters );
Hat jemand von Euch ne Ahnung wie ich vorgehen könnte?
P-ter schrieb:
> Achso, habe ich oben noch vergessen: portSTACK_TYPE ist definiert und> eingebunden.
Die Frage ist nur wie.
Das sind sicher irgendwo ein paar Makros mit im Spiel, die je nach
verwendetem Prozessor richtig stehen müssen.
Nimm dir mal das alte Makefile her und durchsuch es nach
Präprozessor-Direktiven. Also alles was mittels -D an den gcc übergeben
wird. Da wird sicher irgendwas dabei sein, was an AVR oder Mega oder
sowas erinnert. Diese Definements musst du noch im AVR Studio eintragen.
> Inzwischen habe ich ihn auf ca 65 Fehler runter,
Hast du im Code nachgebessert? Das war keine gute Idee. FreeRTOS läuft
auf unterschiedlichen Plattformen. D.h. es gibt irgendeine Form der
Konfiguration. Entweder über ein globales Konfig-Header File oder aber
einige Präprozessordefinements, die dem Compiler vom Makefile aus direkt
mitgegeben werden. Das Konfigfile ist das kleinere Problem. Die
Definements aus dem Makefile musst du ins AVR-Studio mit übernehmen und
dann sollte eigentlich wieder alles so laufen wie vorher. Ist ja
schlieslich derselbe Compiler. Und wenn man ihn mit exakt der gleichen
Commandline aufruft, wie aus dem Makefile heraus, muss auch das gleiche
Ergebnis rauskommen.
und die include-Pfade wichtig. Das define musst du im Studio-Projekt
unter den configuration options/custom options für alle Dateien angeben,
die include-Pfade eben bei include directories. Ausserdem muß noch das
"..Demo\AVR_ATMega323_WinAVR" Verzeichnis als include-Pfad dazu.
Dazu müssen halt alle im makefile genannten source-files, incl. des
passenden port.c:
1
PORT_DIR = ../../Source/portable/GCC/ATMega323
2
...
3
$(PORT_DIR)/port.c \
dem Studio-Source-Ordner hinzugefügt werden, und schon läuft build
fehlerfrei durch.
Oliver
Juhuu, ich dachte ich bekomme das nie hin, aber es läuft jetzt
fehlerfrei!
Karl heinz Buchegger schrieb:
> Hast du im Code nachgebessert? Das war keine gute Idee.
Um Himmels Willen, nein, ich hatte nihcts im Code verändert, wo denn
auch :) Allein das Umstellen der "include directories" bewirkte eine
Fehlerreduzierung. Das war es auch was mich sehr verwirrt hat.
> Nimm dir mal das alte Makefile her und durchsuch es nach> Präprozessor-Direktiven. Also alles was mittels -D an den gcc übergeben> wird. Da wird sicher irgendwas dabei sein, was an AVR oder Mega oder> sowas erinnert. Diese Definements musst du noch im AVR Studio eintragen.
Volltreffer, das war der Schlüssel zum Erfolg.
Oliver schrieb:
> davon sind> -D GCC_MEGA_AVR> und die include-Pfade wichtig. Das define musst du im Studio-Projekt> unter den configuration options/custom options für alle Dateien angeben,> die include-Pfade eben bei include directories. Ausserdem muß noch das> "..Demo\AVR_ATMega323_WinAVR" Verzeichnis als include-Pfad dazu.
Es lag an den -D Einstellungen die ich nicht in den "configuration
options/custom options" angegeben hatte. Das hat also der Projektwizard
nicht für mich erledigt ;)
Ich wäre von alleine nie auf diesen Fehler gekommen, denn schließlich
ging ich davon aus mein Soll mit den Angaben in "include directories"
erfüllt zu haben.
Ist das bei allen Compilern ähnlich bzw. standardisiert oder ist das was
AVR-Studio spezifisches? Gibt es ein Tutorial (Anfängergeeignet :)) wo
man speziell diese geheimnisvollen Compilereinstellungen und die Sache
mit den Makefiles nachlesen kann?
Und nochmals an alle: Ein dickes Dankeschööööön!
>Ist das bei allen Compilern ähnlich
Das hat mit dem Compiler überhaupt nichts zu tun.
1
-D GCC_MEGA_AVR
als Comileroption macht schließlich nichts anderes, als ein
1
#define GCC_MEGA_AVR
in jeder Source-Datei. Das haben sich die Erbauer des FreeRTOS so
ausgedacht, und das sollte auch irgendwo in der FreeRTOS-Doku
beschrieben stehen.
>Gibt es ein Tutorial (Anfängergeeignet :))...
Bist du dir sicher, daß so etwas wie FreeRTOS das richtige für dich ist?
Einen Mega32 kamm man wunderbar ohne RTOS programmieren, und damit
hättest du eine (nicht unerheblich kleine) Einarbeitungs-Baustelle
weniger.
Oliver
Nachtrag und Frage:
Wenn man ein C-File/H-File aus einem neuen Verzeichnis über AVR-Studios
"add existing ... File" in ein Projekt einbindet, muss man das
Verzeichnis manuell in den "configuration options" bei "include
directories" und "custom options" nachtragen. AVR-Studio ergänzt das
eigene makefile nicht automatisch.
Habe ich das so richtig verstanden?
Oliver schrieb:
> Das hat mit dem Compiler überhaupt nichts zu tun.> -D GCC_MEGA_AVR> als Comileroption macht schließlich nichts anderes, als ein> #define GCC_MEGA_AVR> in jeder Source-Datei. Das haben sich die Erbauer des FreeRTOS so> ausgedacht, und das sollte auch irgendwo in der FreeRTOS-Doku> beschrieben stehen.
Ahhhh, jetzt habe ich es kapiert!
-D GCC_MEGA_AVR entspricht einem #define _GCC_MEGA_AVR. Dadurch wird dem
Compiler in "portable.h" das Verzeichnis für das jeweils projekt- oder
portierungsplattformeigene "portmacro.h" angegeben. Wegen der vielen
Demos sparen die Macher von FreeRTOS so im Gesamtpaket von Freertos
redundanden Code.
> Bist du dir sicher, daß so etwas wie FreeRTOS das richtige für dich ist?> Einen Mega32 kamm man wunderbar ohne RTOS programmieren, und damit> hättest du eine (nicht unerheblich kleine) Einarbeitungs-Baustelle> weniger.
Da hast du vollkommen Recht :)
Viele Grüße und nochmals Danke.
Peter
Ich bin spät, fast ein Jahr nach dem letzten Beitrag. Aber vielleicht
sind P-ter oder Oliver noch dabei...
Ich habe das gleiche Problem wie P-ter gehabt und konnte es mit der
Hilfe von Oliver auch lösen.
Nun meine Frage an euch: habt ihr auch 3 warnings?
1
../tasks.c: In function 'xTaskGenericCreate':
2
../tasks.c:420: warning: cast from pointer to integer of different size
3
../tasks.c:420: warning: cast to pointer from integer of different size
Diese warnings habe ich sowohl wenn ich make in der DOS-Box benutze, als
auch wenn ich AVR Studio 4 benutze.
Ich hab mich da ein bisschen gewundert, weil auf der FreeRTOS Seite
steht, dass die Beispielprojekte ohne Warnings und Errors durchlaufen
sollen...
uC_Trottel schrieb:> Ich bin spät, fast ein Jahr nach dem letzten Beitrag. Aber vielleicht> sind P-ter oder Oliver noch dabei...> Ich habe das gleiche Problem wie P-ter gehabt und konnte es mit der> Hilfe von Oliver auch lösen.>> Nun meine Frage an euch: habt ihr auch 3 warnings?>
1
../tasks.c: In function 'xTaskGenericCreate':
2
> ../tasks.c:420: warning: cast from pointer to integer of different size
3
> ../tasks.c:420: warning: cast to pointer from integer of different size
4
>
>> Diese warnings habe ich sowohl wenn ich make in der DOS-Box benutze, als> auch wenn ich AVR Studio 4 benutze.>> Ich hab mich da ein bisschen gewundert, weil auf der FreeRTOS Seite> steht, dass die Beispielprojekte ohne Warnings und Errors durchlaufen> sollen...
Das kann schon sein, meistens testet man nicht alles überall durch.
Gerade bei Libraries, die auf vielen Plattformen laufen sollen, wird da
schon mal was übersehen.
Zeig doch mal die betreffende Stelle. Der Fehler ist aber meistens
keiner von der harmlosen Natur.
pxTopOfStack = ( portSTACK_TYPE * ) ( ( ( unsigned long ) pxTopOfStack ) & ( ( unsigned long ) ~portBYTE_ALIGNMENT_MASK ) );//<- diese Zeile macht den Fehler
5
}
Ich kann damit gerad nicht soviel anfangen. Hat offensichtlich was mit
dem Stack zu zun und das ist bestimmt nicht so unwichtig.
Die LED blinken aber lustig und auf der seriellen Schnittstelle werden
immer wieder die Buchstaben A-Z ausgegeben. Also funktionieren tut
etwas.
Hi,
in dem speziellen Fall sollte die Warnung harmlos sein.
Man könnte auch long durch int ersetzen, dann sollte die Warnung
verschwinden. Pointer haben beim AVR halt nur 16 Bit.
Eigentlich müsste man beim AVR die Casts auch ganz weglassen können.
Die sollen wohl einige unschöne Effekte verhindern wenn sizeof(int) !=
sizeof(void*).
CU