Nachdem das Atollic TrueStudio in der Lite-Version nun auch auf 32 Kbyte Code-Größe beschränkt wurde, habe ich die CooCox IDE installiert. Diese hat keine Einschränkungen und basiert auch auf GCC und Eclipse als Editor. Das Gesamttpaket ist jedoch nicht so optimal programmiert wie Atollic. Installieren und loslegen ist nicht! Download: http://www.coocox.org/CooCox_CoIDE.htm (mind. die Version 1.4.1 downloaden, sonst keine STM32F4 Unterstützng) GCC-ARM muss vorher installiert werden, findet man hier: https://launchpad.net/gcc-arm-embedded/4.6/2011-q4-major (am besten die Windows-Installer Version downloaden) Wenn beides installiert ist muss in der CoIDE noch der Pfad zum GCC-ARM eingetragen werden: also bei "Project/ Select Toolchain Path" "C:\Programme\arm-none-eabi-gcc-4_6\bin" eintragen (Bsp.) Als Debugger stellt man ST-LINK im SWD-Mode ein. In der Anlage ist ein fertig konfigurierter Workspace mit einem Blinky für das STM32F4 Discoveryboard. Es enthält die komplette STM32F4 FW-Lib, die CMSIS- und Device Lib. (Ich weiß, dass es auch ohne die FW-Lib ginge, für den Einstieg und zur Nutzung der STM Beispiele ist die LIB aber schon eine Hilfe.) Es ist alles so konfiguriert, dass das Board auch wirklich mit 168MHz läuft. Die Symbols sind entsprechend angepasst. Nochwas: Falls die "Tasklist.exe" fehlt (zB. bei XP Home) kann man sich eine von einen andern Windows besorgen oder im Netz downloaden (ist auch Teil der TweakUiPowertoys). (http://www.computerhope.com/download/winxp.htm)
Hallo, Matthias K. schrieb: > Nachdem das Atollic TrueStudio in der Lite-Version nun auch auf 32 Kbyte > Code-Größe beschränkt wurde, habe ich die CooCox IDE installiert. Diese > hat keine Einschränkungen und basiert auch auf GCC und Eclipse als > Editor. bin begeistert, ist echt Klasse!! Atollic TrueStudio kann man damit getrost vergessen. Gruß xmega
Matthias K. schrieb: > GCC-ARM muss vorher installiert werden, Was ist der Unterschied zwischen GCC_ARM und Codesourcery?
Die Linaro Version unterstützt hard floats des M4. Beim Codesourcery lite fehlt die Unterstützung dafür in einer der Libs bzw. eine Lib fehlt. Der GCC 4.5.1 des Codesourcery hat irgendeinen STREXB/STREXH Bug der in der v4.5.2 (Linaro) gefixt wurde. Bin mal beim Compilieren der FW-Lib für den STM32F1 darauf gestossen.
OK, danke für die Info. Im Endeffekt hinkt CodeSourcery also immer etwas hinterher - jedenfalls scheint es so (auch anhand der Versionsnummern). Ist das oben verlinkte (https://launchpad.net/gcc-arm-embedded/4.6/2011-q4-major) quasi mit Linaro gleichzusetzen? Linaro ist ja nur für Linux soweit ich das verstanden habe.
Micha schrieb: > OK, danke für die Info. Im Endeffekt hinkt CodeSourcery also immer etwas > hinterher - jedenfalls scheint es so (auch anhand der Versionsnummern). Eher nicht. Es kann zwar sein, dass die Version von gnu.org höher ist, jedoch sind/waren viele Codesourcery-Leute in der Entwicklung des GCC beteiligt. Die von Codesourcery bereitgestellten Versionen enthalten manchmal Korrekturen und Erweiterungen, die in den "offiziellen" GNU Quellen noch nicht enthalten waren. Vor langer Zeit war das z.B. der Thumb2-Support, den es nur bei Codesourcery gab. Allerdings scheint sich im Hintergrund etwas geändert zu haben, den obwohl Codesourcery von ARM mit der Fortentwicklung der GNU Tools für ARM betraut war, gibt es mit gcc-arm-embedded auf Launchpad eine vorkompilierte Toolchain die scheinbar von ARM direkt herausgegeben wird. > Ist das oben verlinkte > (https://launchpad.net/gcc-arm-embedded/4.6/2011-q4-major) quasi mit > Linaro gleichzusetzen? Linaro ist ja nur für Linux soweit ich das > verstanden habe. Nein, es gibt einen Download "Windows Installer" einer "bare metal" Toolchain (arm-none-eabi), würde man mit der Toolchain Linux Programme erzeugen können, sollte der Prefix anders sein (arm-linux-...). Laut Webseite unterstützt die Toolchain Cortex-Cores. Ab ARM7TDMI inkl. Thumb/Thumbinterwort unterstützt werden, weiss ich nicht. weitere Alternative u.a: DevkitARM aus DevkitPro, Yagarto
Martin Thomas schrieb: >> Ist das oben verlinkte >> (https://launchpad.net/gcc-arm-embedded/4.6/2011-q4-major) quasi mit >> Linaro gleichzusetzen? Linaro ist ja nur für Linux soweit ich das >> verstanden habe. > Nein, es gibt einen Download "Windows Installer" einer "bare metal" > Toolchain (arm-none-eabi), würde man mit der Toolchain Linux Programme > erzeugen können, sollte der Prefix anders sein (arm-linux-...). Laut > Webseite unterstützt die Toolchain Cortex-Cores. Ich meinte: Linaro ist nur zur Entwicklung von ARM-SW unter Linux und auf Windows nicht lauffähig (außer vielleicht durch kompilieren der Sourcen, falls verfügbar). Martin Thomas schrieb: > weitere Alternative u.a: DevkitARM aus DevkitPro, Yagarto Gibt es eine Empfehlung für eine bestimmte dieser Toolchains (CodeSourcery, GCC-ARM-embedded, DevkitARM, YAGARTO)? Wo liegen die Vor- und Nachteile im einzelnen, welche ist am aktuellsten? Spielt es überhaupt eine Rolle welche verwendet wird?
Die aktuellste Version ist 4.6-2012-q1 von Ende März. Gibt es für Linux und auch für Windows: https://launchpad.net/gcc-arm-embedded/4.6 (rechts, grün hinterlegte links) > Ist das oben verlinkte > (https://launchpad.net/gcc-arm-embedded/4.6/2011-q4-major) quasi mit > Linaro gleichzusetzen? Nicht quasi, das ist die Linaro Toolchain. Allerdings das nicht mehr ganz aktuelle LTS Release. Spielt wahrscheinlich keine Rolle aber die 2012-q1 enthält soweit ich weiß nur Bugfixes, also keine neuen und möglicherweise experimentellen Features. Daher benutze ich die zur Zeit. Ich habe aber lange Codesourcery lite verwendet. Bis auf die Sache mit der STM32 Lib hatte ich damit keine Probleme. Kann sein dass ich die mit Linaro noch bekomme ;).
M. G. schrieb: > Daher benutze ich die zur Zeit. In Verbindung mit CoIDE oder Eclipse auf Linux oder Windows?
Mit CoIDE unter Windows (spiele gerade mit CoOS) aber vor allem unter Linux mit Eclipse. Eclipse benutze ich aber nur als Editor zusammen mit einem Makefile da ich unabhängig von einer IDE compilieren will (und zum Teil auch muß). Und ich verwende keine Debugger. Geflasht wird mit dem Bootloader. Dieses STREXB/H Problem hatte ich mit Codesourcery gestern Abend übrigens auch mit einem LPC1766 Projekt. Es knallt bei einer Datei vom CMSIS. War ein Beispiel von Coocox für das ich ein Makefile angepasst habe damit ich es auch unter Linux bauen kann. Tja und unter Linux ist gerade noch die Codesourcery Toolchain als Default eingerichtet. Naja, es dürfte auch bald eine neue Version der CS Toolchain geben.
Ah, ok. Ich habe mich gestern an devkitARM mit Eclipse unter Windows versucht, bin aber gescheitert. Werde es jetzt mal mit gcc-arm-embedded/Eclipse angehen, da bin ich schon etwas weiter gekommen. CoIDE ist derzeit leider (noch) nichts für mich, da mein STM32L151xx nicht unterstützt wird... Prinzipiell macht es aber einen sehr guten Eindruck.
Micha schrieb: > STM32L151xx nicht unterstützt wird... Prinzipiell macht es aber einen > sehr guten Eindruck. Du kannst in der CoIDE auch einen anderen STM32 einstellen und dann per Hand die Änderungen zB. der Speicherbereiche vornehmen. Ordner zB. für die passende LIB kannst Du im Workspace erstellen. Die Pfade zu den INCs und die globalen Symbols kannst Du auch einstellen.
Jepp, Danke an den TO für das Beispiel ! In der Debug Perspektive ist bei mir leider nix in der Peripherals view zu sehen. Fehlt da noch der support für das F4 derivat - und alle anderen haben die gleiche leere view, oder habe ich etwas noch nicht vollständig konfiguriert ? gruss, tom.
@ Matthias K. (matthiask) Woher stammt die startup_stm32f4xx.c? Bringt CoIDE die mit?
Micha schrieb: > Woher stammt die startup_stm32f4xx.c? Bringt CoIDE die mit? Ja, die wird nachgeladen, wenn Du in der Repository / Peripherals das "CMSIS BOOT for STM32F4x series" einbindest. Wenn man die einmal hat, sollte man sie sichern, denn man kann sie später auch per Hand in anderen Projekten verwenden. CooCox verwendet als Startup eine C-Datei, während die meisten anderen hierfür eine ASM Datei verwenden. Ist im Prinzip egal, es muss nur alles passend zum Linkerscript sein.
Gibt es eine Möglichkeit das Linker-Script in der CoIDE zu erweitern? Ich kann es zwar editieren, aber die Änderungen sind nach jeden Buildprozess wieder weg.
Matthias K. schrieb: > Gibt es eine Möglichkeit das Linker-Script in der CoIDE zu erweitern? > Ich kann es zwar editieren, aber die Änderungen sind nach jeden > Buildprozess wieder weg. Das Problem hatte ich auch ... die Datei mit Schreibschutz zu versehen war bisher der einzige Workaround, den ich gefunden habe ...
AVerr schrieb: > Das Problem hatte ich auch ... die Datei mit Schreibschutz zu versehen > war bisher der einzige Workaround, den ich gefunden habe ... Ich habe es jetzt so gelöst, dass ich einfach bei "Locate Link File" eine andere eigene .ld eingebunden habe. Die lässt das System dann in ruhe. Die link.ld und memory.ld bleibt dann unbenutzt.
Matthias K. schrieb: > AVerr schrieb: >> Das Problem hatte ich auch ... die Datei mit Schreibschutz zu versehen >> war bisher der einzige Workaround, den ich gefunden habe ... > > Ich habe es jetzt so gelöst, dass ich einfach bei "Locate Link File" > eine andere eigene .ld eingebunden habe. Die lässt das System dann in > ruhe. Die link.ld und memory.ld bleibt dann unbenutzt. Interessant ... ich hatte auch eine eigene angegeben und die wurde auch jedesmal beim Kompilieren überschrieben :( Naja, eine andere Frage: Gibt es die Möglichkeit eines "Batch Build", also das selbe Programm z.B. mit unterschiedlichen Defines mehrmals ( am besten mit nur einem Knopfdruck ) zu kompilieren ? Habe da was mit I2C gemacht und bei den Slaves unterscheidet sich eigentlich nur die Adresse ...
AVerr schrieb: > Naja, eine andere Frage: Gibt es die Möglichkeit eines "Batch Build", > also das selbe Programm z.B. mit unterschiedlichen Defines mehrmals ( am > besten mit nur einem Knopfdruck ) zu kompilieren ? Das würde mir nur ein spezielles Makefile einfallen.
Könnte &B als Prefix für Binär funktionieren ? Ich glaube &H war glaube ich für Hex und &O für Oktal. Is aber schon lange her (18 Jahre)
das ist echt klasse, hab coIDE und deinen Workspace etc installiert. aber irgendwie funktioniert das linken bei mir noch nicht:
1 | ... |
2 | [cc] Starting link |
3 | [cc] arm-none-eabi-gcc -O0 -nostartfiles "-Wl,-Map=Blinky mit SysTick.map" -mcpu=cortex-m4 -mthumb "-LC:\CooCox\CoIDE\workspace\Blinky mit SysTick" -Wl,--gc-sections "-Wl,-TC:\CooCox\CoIDE\workspace\Blinky mit SysTick\link.ld" -g -o '"Blinky mit SysTick.elf"' ..\obj\stm32f4xx_syscfg.o ..\obj\stm32f4xx_sdio.o ..\obj\stm32f4xx_hash.o ..\obj\stm32f4xx_cryp_aes.o ..\obj\stm32f4xx_hash_sha1.o ..\obj\stm32f4xx_usart.o ..\obj\stm32f4xx_pwr.o ..\obj\stm32f4xx_can.o ..\obj\stm32f4xx_wwdg.o ..\obj\stm32f4xx_hash_md5.o ..\obj\stm32f4xx_dac.o ..\obj\startup_stm32f4xx.o ..\obj\stm32f4xx_crc.o ..\obj\stm32f4xx_iwdg.o ..\obj\main.o ..\obj\stm32f4xx_rcc.o ..\obj\stm32f4xx_it.o ..\obj\stm32f4xx_adc.o ..\obj\stm32f4xx_dcmi.o ..\obj\stm32f4xx_cryp_des.o ..\obj\stm32f4xx_cryp.o ..\obj\stm32f4xx_fsmc.o ..\obj\stm32f4xx_gpio.o ..\obj\stm32f4xx_flash.o ..\obj\system_stm32f4xx.o ..\obj\stm32f4xx_dma.o ..\obj\stm32f4xx_spi.o ..\obj\stm32f4xx_i2c.o ..\obj\stm32f4xx_rng.o ..\obj\stm32f4xx_exti.o ..\obj\misc.o ..\obj\stm32f4xx_rtc.o ..\obj\stm32f4xx_cryp_tdes.o ..\obj\stm32f4xx_tim.o ..\obj\stm32f4xx_dbgmcu.o |
4 | Program Size: |
5 | Der Befehl "C:\Program" ist entweder falsch geschrieben oder |
6 | konnte nicht gefunden werden. |
7 | Result: 1 |
8 | Der Befehl "C:\Program" ist entweder falsch geschrieben oder |
9 | konnte nicht gefunden werden. |
10 | Result: 1 |
11 | Der Befehl "C:\Program" ist entweder falsch geschrieben oder |
12 | konnte nicht gefunden werden. |
13 | Result: 1 |
14 | Der Befehl "C:\Program" ist entweder falsch geschrieben oder |
15 | konnte nicht gefunden werden. |
16 | Result: 1 |
17 | |
18 | BUILD SUCCESSFUL |
was will der denn mit c:\Program? ich hab alles genau so eingestellt wie du es beschrieben hattest..
Das duerfte das beruehmte "C:\Program Files"-Leerzeichen-im-Namen-Problem sein....
ja, vermutlich... ich find nur nirgends ein "Program Files" in irgend einer Einstellung oder so. sonst könnte man das ja einfach ändern.
In welchem Verzeichnis liegt GCC-ARM? Select Toolchain Path korrekt angegeben?
Wie bindet man denn die ST Standard Peripheral Library für den STM32F4... im CoIDE ein? Für die kleineren STM32F1... ist das anscheinend schon drin. Danke!
Ok, ich habe im obigen Beispiel (fertiger workspace) gefunden, wie die Lib eingebunden wurde. Kann ich das wirklich nur projektweise im CoIDE machen? Gibt es keine globale Einstellung?
Tim schrieb: > Gibt es keine globale Einstellung? In der jetzigen Version offenbar noch nicht. Die F4-Lib ist auch noch ziemlich beta. Das einbinden ist in wenigen Minuten erledigt, sollte man als ARM-Programmierer doch hinbekommen...
Ok danke. Fange ja gerade erst an... Braucht man für den ST-Link noch extra Treiber? Ich kann zwar das Beispiel von oben kompilieren, aber nicht auf das Discovery aufspielen. Jumper CN3 sind beide gesteckt. Error: Connect failed, check config and cable connection
Die Treiber für den ST-Link hast du installiert? Damit ging es bei mir auf Anhieb. An den ST-Libraries bin ich auch gerade dran. Ich habe ewig mit der Audio-Demo gekämpft bis ich bemerkt habe, dass in CooCox SystemInit() nicht standardmäßig ausgeführt wird :)
Jetzt geht es. Habe hier das Tool installiert, da war der Treiber bei. Musste aber dann doch noch mal händisch im Gerätemanager den Treiber suchen und installieren. http://www.st.com/internet/evalboard/product/219866.jsp#SW_DRIVERS -> STM32 ST-LINK utility Vielleicht geht es auch anders/einfacher, jedenfalls bin ich soweit mit der Toolchain erst einmal zufrieden. Mit dem Beispiel ein relativ einfacher Start. Das hier hat auch geholfen: http://diller-technologies.de/stm32.html#ide Mich hatten bisher immer die Demoversionen der komerziellen Tools angeschreckt, so ist alles Freeware.
Tim schrieb: > Das hier hat auch geholfen: > http://diller-technologies.de/stm32.html#ide Interessantes Dokument.
Genau das Ding meinte ich. Zumindest mir geht es so, dass ich auf der ST-Seite ziemlich wühlen muss, bis ich die Daten bzw. Dokumente finde, die ich haben will. Hat sich einer von euch schon an die USB-Sachen ran gemacht?
Hab bis jetzt nur ein bisschen im Blinky-Programm rumgespielt. Nix Weltbewegendes. Gerade eben habe ich mal versucht den CooCox HD44780 Treiber einzubinden, aber das scheint für den F4 noch nicht unterstützt zu werden. Zumindest lese ich das so aus der Hilfe und es fehlen auch die ganzen Includes aus der CooCox Lib.
Tilo Lutz schrieb: > Genau das Ding meinte ich. Zumindest mir geht es so, dass ich auf der > ST-Seite ziemlich wühlen muss, bis ich die Daten bzw. Dokumente finde, > die ich haben will. Geht mir auch so. Zumindest bei den Treibern und der Standard Lib. Die Manuals sind ja beim Prozessor gut sortiert.
und gerade bei der USB-Lib gibt es verschiedene Versionen. Ich habe eine Version 3.3 von 2011 und eine Version 2.1 von 2012 gefunden. Die Version 2.1 von 2012 ist definitiv aktueller und auch die, die dem Discovery Firmwarepaket beiliegt. Ich habe ewig gesucht, bis ich die passende Dokumentation gefunden habe. Das Dokument heißt UM1021.
So langsam finde ich mich in CooCox zurecht. Ich habe zwei Demos angehängt. "Try" ist eine Umsetzung der Audio-Recorder-Demo welche der ST-Firmware für das Board beiliegt. Der Beschleunigungssensor hat bei mir nur Mist gemacht, daher habe ich ihn auskommentiert. Die USB-Variante lässt sich kompilieren, allerdings konnte ich die mangels passendem USB-Kabel noch nicht testen. Die Demo aus dem interne Flash läuft und man hört die WAV in einer Endlosschleife. "Try2" soll eine Demo mit USB und Audio werden. Ich wollte das Board über die USB-Audio-Klasse als externe Soundkarte verwenden. Leider tut das noch nicht richtig. Folgendes funktioniert: * Das Baord wird als USB-Soundkarte mit Stereo und 48kHz erkannt. * Ich konnte am Speicher erkennen, dass wenn die Soundkarte genutzt wird, Daten per USB im FIFO gespeichert werden. * Wenn vom PC die Wiedergabe beendet wird, wird die entsprechende Funktion im Code aufgerufen, die Steuerung scheint also zu funktionieren. * Der Audiocodec wird genauso wie in "Try" initialisiert und der DMA-Transfer korrekt gestartet. Leider kommt aus dem Codec nichts heraus. Während dem Dubuggen habe ich zwar hören können, dass der Verstärker ab und zu aus und eingeschaltet wurde und einmal habe ich auch ein kurzes Geräusch hören können, allerdings konnte ich das bis jetzt nicht reproduzieren. Eventuell hat von euch einer eine Idee wo es klemmen könnte? Ich würde mich freuen wenn mir jemand weiterhelfen könnte.
Hey Tilo, bei mir kompiliert das Beispiel aus Try.zip nicht. Es kann usb_conf.h, windows.h, usbh_hid_mouse.h und usbh_hid_core.h nicht gefunden werden. Für usb_conf.h finde ich nur ein usb_conf_template.h Ne Idee? Gruß Tim
Ich habe noch "\STM32_USB_HOST_Library\Class\HID\inc" zu den include paths hinzugefügt. Jetzt fehlt nur noch die usb_conf.h, die du vermutlich vergessen hast. Die windows.h finde ich auch nicht, sie scheint irgendwas mit dem FAT zu tun zu haben.
Hm ... versucht du gerade die USB oder die Flash Version?
Ich weiß nicht genau, was die USB Variante eigentlich machen soll... Was ich gemacht habe: Ich habe die Try.zip entpackt und das Verzeichnis Try in meinen CoIDE workspace kopiert. Dann habe ich die Try.cob geöffnet und versucht zu kompilieren.
OK, schon seltsam. Was steht denn bei dir unter Project -> Configuration -> Defined Symbols? Ich habe die Vermutung, dass das alles leer ist.
Ne, da steht eine ganze Menge (7 Einträge). Blöd, dass man hier nicht copy'n'paste machen kann. Eigentlich müsste doch alles in dem workspace enthalten sein. Finde ich auch merkwürdig.
Aber wie gesagt, es gibt die usb_conf.h nicht. Wo liegt sie denn bei dir?
Hm, Ok. Ich glaub ich werde versuchen eine Version zusammenzupacken, in der das ganze USB-Zeug fehlt.
Ist aber auch nicht so wichtig. Ich wollte dein Beispiel einfach nur ausprobieren und bei mir ging es eben nicht auf Anhieb. Daher wollte ich dir nur ein Feedback geben, da es anderen vielleicht genauso gehen könnte. Ich persönlich bin vermutlich noch nicht so weit, um mit dem Audio und USB Zeugs rum zumachen...
Danke für das Feedback. Ich habe gestern versucht über eine Sinustabelle per DDS ein 1kHz Signal aus dem CODEC auszugeben. Leider hat das nicht so geklappt. Ich habe mit einem Oszi nachgemessen, es wird überhaupt nichts zum CODEC geschickt. Ich werde versuchen ein funktionierendes Sinusbeispiel zu schreiben und das dann posten. Ich vermute dann geht auch die USB-Version.
Kleines update: Leider kam ich bisher noch nicht dazu etwas mit dem CODEC zu machen. Ich habge doch gemerkt, dass ich den Chip erst noch besser kennenlernen muss. Die Library von ST ist zwar nett, nur wenns klemmt wird es schwierig den Fehler zu finden. Aktuell bin ich gerade dabei einen externen Audiocode in Betrieb zu nehmen. Wichtiger Tip für alle: Debuggen im Ram scheint problematisch zu sein! Ich habe im Ram bei Verwendung der StdLib einen Turbo-I2C mit 1MHz statt 100kHz. Der Grund dafür war, dass die Taktkonfiguration nicht richtig verarbeitet wurde. Nach dem ich zurück ins Flash gegangen bin haben die Timings wieder gestimmt.
Hallo Ich habe gesten mein STM32F4-Discovery Board bekommen und mit TrueStudio getestet. Alles funktioniert problemlos. Jetzt wollte ich das ganze mit CoIDE testen (wegen der Code-Längenbeschränkung) und habe damit leider ein paar Problemchen. Ich habe zuerst GCC-ARM (Version "arm-none-eabi-gcc-4_6-20111208.exe (md5)") und danach CoIDE (Version 1.2.4) installiert und das CoIDE_workspace von Matthias ausprobiert, indem ich es unter Open Projekt in CoIDE geladen habe. Wenn ich dann auf Debug gehe erhalte ich folgende Fehlermeldung: C:\Program Files (x86)\CooCox\CoIDE>"C:/Program Files (x86)/CooCox/CoIDE/bin\coflash.exe" program --adapter-name=ColinkEx --port=SWD --adapter-clk=1000000 --erase=affected --driver="C:/Program Files (x86)/CooCox/CoIDE/flash/STM32F4xx_1024.elf" 0<Project 1>"C:/Program Files (x86)/CooCox/CoIDE/workspace/Blinky mit SysTick\Debug/bin\Blinky mit SysTick.bin" Das System kann die angegebene Datei nicht finden. Program Download Failed ! Im Debug-Konfigurationsmenü ist ST-Link auch nicht vorhanden. Ich habe es auf ColinkEx und SWD eingestellt. Einen ST-Link-Adapter besitze ich nicht. Der wird auch nicht benötigt oder? Wie müssen die Jumper auf CN3 auf gesetzt sein. Auf Diskovery oder ST-Link ? Wie genau stell ich in CoIDE 1.2.4 den Pfad für GCC-ARM ein. Im Voraus vielen dank für eure Hilfe. Gruß Rolf
Rolf Degen schrieb: > Der wird auch nicht benötigt oder? Nein. Rolf Degen schrieb: > Wie müssen die Jumper auf CN3 auf gesetzt sein. Auf Diskovery oder > ST-Link ? Auf Discovery. Wenn Du sie auf ST-Link setzt, hast Du einen Stand-alone ST-Link und kannst Deine eigene Platine damit debuggen (über die Stiftleiste). Rolf Degen schrieb: > C:/Program Files (x86)/CooCox/CoIDE/workspace/Blinky mit > SysTick\Debug/bin\Blinky mit SysTick.bin Ich würde mal versuchen, die Leerzeichen aus dem Pfad zu verbannen. Gruäss Simon
"Blinky mit SysTick.bin" ist nicht vorhanden. Wenn ich auf Projekt Build gehe kommt "BUILD FAILED A pseudo attribute name is expected. Total time: 0 seconds" ???? Die IDE ist auf meinem PC richtig installiert unter C:\Program Files(x86)\CooCox\CoIDE
Bei mir (XP) klappt es auch mit Leerzeichen. Leg den Workspace mal in den Dokumentebereich. Vielleicht ein Rechteproblem.
Das gleiche Problem. Ich arbeite unter Win7 64Bit. Die "Blinky mit SysTick.bin" ist auch im richtigen Verzeichnis. Fehlermeldung beim debugen: C:\Program Files (x86)\CooCox\CoIDE>"C:/Program Files (x86)/CooCox/CoIDE/bin\coflash.exe" program --adapter-name=ColinkEx --port=SWD --adapter-clk=1000000 --erase=affected --driver="C:/Program Files (x86)/CooCox/CoIDE/flash/STM32F4xx_1024.elf" 0<Project 1>"C:/Users/rolli/Documents/CoIDE_workspace/CoIDE workspace/Blinky mit SysTick\Debug/bin\Blinky mit SysTick.bin" Program Download Failed ! Im Quelltext ist auch ein Fragezeichen bei "#include <stddef.h>"
Ich habe das ganze noch einmal auf meinen Laptop installiert, aber leider mit dem gleichen.
Hallo Ich glaube das Problem gefunden zu habe. In der CoIDE wird der Kernel fuer den STM32F4 nicht mitinstalliert. Waehle ich einen anderen Prozessor aus zB aus der M3-Family funktioniert zumindest das debugen. Ich schau mal im INet ob ich was finde. Ich melde mich dann spaeter noch einmal hier. GruSs Rolf
Hallo Ich habe die neue Version 1.4.2 von CoIDE wieder deinstalliert und die aeltere Version 1.4.1 installiert. Jetzt funktionierts und die Led's auf dem Board flackern lustig. Danke nochmals fuer eure super Unterstuetzung :) MfG Rolf
Rolf Degen schrieb: > Ich habe die neue Version 1.4.2 von CoIDE wieder deinstalliert und die > aeltere Version 1.4.1 installiert. Jetzt funktionierts und die Led's auf > dem Board flackern lustig. Gut zu wissen. Ich habe auch V 1.4.1 im Einsatz.
Hallo Matthias Wenn ich in deinem Programmcode etwas abändere und dann auf Build oder Rebuild gehe (der Unterschied ist mir nicht bekannt), dann kommt es zu dieser Fehlermeldung: "GCC HOME: C:\Program Files (x86)\arm-none-eabi-gcc-4_6\bin compile: [mkdir] Skipping D:\Download and Data\Download\STM32\Projekte\CoIDE workspace\Blinky mit SysTick\Debug\bin because it already exists. [mkdir] Skipping D:\Download and Data\Download\STM32\Projekte\CoIDE workspace\Blinky mit SysTick\Debug\obj because it already exists. BUILD FAILED Output filename conflict: startup_stm32f4xx.o would be produced from D:\Download and Data\Download\STM32\Projekte\CoIDE workspace\Blinky mit SysTick\cmsis_boot\startup\startup_stm32f4xx.c and startup_stm32f4xx.c Total time: 0 seconds".
Rolf Degen schrieb: > D:\Download and Data\Download\STM32\Projekte\CoIDE workspace\Blinky mit > SysTick\cmsis_boot\startup\startup_stm32f4xx.c and startup_stm32f4xx.c Du hast diese Datei (startup_stm32f4xx.c) doppelt, das geht nicht.
Hallo Matthias Wenn ich die doppelten Dateien löschen und den CMSIS Core und CMSIS Boot für den Cortex M4 in der Components-Auswahl selektiere, werde diese wieder automatisch in das Projekt eingefügt (siehe Bild). ????
So langsam steigt mein Frustpegel und Blutdruck. Ich bin kurz davor, den ganzen Krempel mit dem STM32F4 Discovery Board zu vergessen und mich wieder meinem "lahmen" ATxmega-Projekten zu widmen. Im Vergleich zu CoIDE war die Einrichtung und Einarbeitung mit Atmel Studio6 ein Kinderspiel. Ich versteh auch nicht, warum STMicroelectronics keine eigene Entwicklungsumgebung für ihre schnellen Prozessor-Boards anbietet, so wie es Atmel macht. Es muss ja nicht kostenlos sein. Aber die IDE's von Keil und Co. sind für uns Hoppyisten einfach "unbezahlbar" und Code-Begrenzung auf 32KB ist bei anspruchsvolleren Projekten wzB die "Audio playback and recording" Demo von ST auch schnell überschritten. Für eine kleine Led-Spielerei reicht es natürlich.. Ich habe das Board jetzt in die Schublade gelegt und warte mal ab was da weiter kommen wird. Nochmals vielen Dank für eure Unterstützung MfG Rolf
Bisher haben es alle zum laufen bekommen. Wenn Du hier schon aufgibst, wird das mit ARM wohl nichts. Warte mal ab, bis Du die 1315 Seiten des Usermanuals vor Dir hast. Die CoIDE F4 Unterstützung ist noch recht frisch, erst ab 1.4.1 überhaupt integriert. Man sollte möglichst wenig mit der Regpository rumspielen, man kommt komplett ohne diese aus. Auch die STM FW-Lib ist noch ziemlich RC. Für den Einstieg ist die F1 Serie besser geeignet. Da gibt es unzählige Beispiele und Anleitungen im Net.
@Rolf Degen: Also ich hatte das Debuggen noch nicht ausprobiert, aber das funktioniert mit dem Workspace aus dem 1. Post bei mir auch. Ich musste den ST Link Treiber manuell nachinstallieren. Siehe auch: Beitrag "Re: CooCox CoIDE mit STM32F4-Discovery Board" Vielleicht hilft dir auch das Tutorial von Moritz Diller weiter. Ansonsten benutze ich CoIDE 1.4.1 und habe es nach C:\CooCox\CoIDE installiert und den Workspace nach c:\CooCox\CoIDE\workspace gelegt. Das Flash Tool ist bei mir unter C:\Program Files (x86)\CooCox\CoFlash installiert. Bis auf den Treiber, war es ein recht leichter Start. Schade, wenn du schon aufgibst. Ich finde es gut, dass man in letzter Zeit immer mehr zu den STM32 liest.
Hallo, ich habe eine Frage zum CooCox und der Möglichkeit des Virtuellen Com Ports(VCP) (Code unter http://mcu.cz/comment-n2800.html mit Chrome kann man die Seite ins Deutsche übersetzen und einigermaßen verstehen). Unter dem Atollic True Studio läuft es ganz prima. Ich habe es jetzt in ein Projekt für die CooCox IDE mit dem GCC verpackt und es baut auch wunderbar. Nur leider findet er den VCP nicht. Mit dem Debugger habe ich noch keinen Fehler gefunden, es wäre aber super wenn es klappen würde da man so die 32Kb Beschränkung los wird. Gebaut braucht alleine der VCP mit dem drum herum optimiert so 10Kb. Damit sind alle größeren Libs so wie die Cmsis DSP Libs passe. Ich hänge mein Projekt mal an, vielleicht hat jemand eine Idee. Das schöne wäre dass man auf super einfache Art und Weise mit dem Discoveryboard ohne irgendwelche Zusatzhardware kommunizieren kann. Vielen Dank und viele Grüße Eric
Rolf Degen schrieb: > und dann auf Build oder > Rebuild gehe (der Unterschied ist mir nicht bekannt) Rolf, wenn ich das lese und auch die Fehler die du sonst beim kompilieren bekommst, dann wird sehr eutlich, dass du die absoluten Basics zum kompilieren von C Projekten nicht begriffen hast. Aber es muß jetzt natürlich schon ein Cortex sein. Ehrlich: Nimm dir einen AVR (ein Tiny reicht) und lerne erstmal das Bedienen deiner Werkzeuge. Und wenn du die beherrscht, verschwinden auch die Fehler, die du oben heschildert hast. Läßt du dir hier alles vorkauen, scheiterst du beim nächsten eigenen Projekt. Versprochen!
Hallo 900ss D. Learning by Doing ist auch mein Motto. Ich wollte das "Werkzeug" eigentlich nur benutzen und nicht selber herstellen. PS: Ich habe noch nicht ganz aufgegeben, brauche ersteinmal ein wenig Schlaf :) Bis die Tage und gute Nacht. Gruß Rolf
Tim schrieb: > @Rolf Degen: > Also ich hatte das Debuggen noch nicht ausprobiert, aber das > funktioniert mit dem Workspace aus dem 1. Post bei mir auch. Hallo Tim Ich hatte den Workspace von Matthias in CooCox 1.4.1 auch am laufen und auch die Debug-Funktion klappte ohne Probleme. Nach der Einrichtung des Workspace in einem anderen Verzeichnis fingen die Probleme an. Werde es Morgen noch einmal im dem Original Workspace Verzeichnis von CooCox auf C: versuchen. MfG Rolf
Hallo zusammen Ich wollte mich noch einmal melden und euch mitteilen, das der CoIDE_Workspace von Matthias jetzt auch bei mir funktioniert. Hat bei mir vielleicht etwas länger gedauert, aber wie sagt man so schön.. Mühsam ernährt sich das Eichhörnchen :-) Ich bin wie folgt vorgegangen: Zuerst habe ich die doppelt vorhandenen Files "startup_stm32f4xx.c" und "system_stm32f4xx.c" im Projektpfad von CoIDE deaktiviert. Danach habe ich den Namen des Projekts von "Blinky mit SysTick" auf "Blinky" ohne Leerzeichen abgeändert. Anschließend habe ich im Configurations-Menü unter "Locate Link File" den Eintrag auf den neuen Namen des Projekt-Ordner abgeändert (siehe Bild). MfG Rolf
Hallo zusammen Hier ein interessanter Link für alle, die sich für Sound auf dem STM32F4 Discovery Board interessieren. FM-Soundmodul 16stimmig polyphon, Samplingrate 48KHz und Midi Link: http://d.hatena.ne.jp/pcm1723/20120418/1334746384 Download: http://www.geocities.jp/pcm1723/html2/download.htm MfG Rolf
Hallo zusammen Ich habe mir mal die Mühe gemacht und ein kleines Tutorial für den Einstieg mit dem STM32F4 Discovery Board geschrieben. Kann man sich hier ansehn: http://www.cczwei-forum.de/cc2/thread.php?threadid=6246 Gruß Rolf
Rolf Degen schrieb: > FM-Soundmodul 16stimmig polyphon, Samplingrate 48KHz und Midi Als Anlage das Projekt angepasst als Workspace für CooCox (1.4.1). Es läuft ohne Hardwarekonfiguration, nur Kopfhörer dran.
Hallo Matthias Habe mir die Demo in CoIDE geladen und aufs STM32F4 Discovery Board übertragen. Was mir sofort aufgefallen ist, das die Musik zu langsam abgespielt wird. Ich weis nicht woran es liegen könnte. Die PLL-Werte für den Systemtakt in der "system_stm32f4xx.c" sind aber richtig (PLL_M 8 und PLL_N 336). Der Configurationseintrag in "Defined symbols" ist auch korrekt (HSE_CLOCK=8000000). So sollte die Demo klingen: http://soundcloud.com/rolfdegen/st32mf4-demo-02 Hier ein paar Demosounds vom Discovery: http://soundcloud.com/rolfdegen/st32mf4-demo-03 Habe jetzt auch die Version 1.4.2 von CoIDE am laufen. Wenn man ein neues Projekt anlegt, muss man nach der Auswahl des Prozessors ein paar Sekündchen warten, bevor die Core-Library für den Cortex M4 zur Verfügung steht. Das habe ich immer übersehen. Gruß Rolf
Rolf Degen schrieb: > was mir sofort aufgefallen ist, das die Musik zu langsam > abgespielt wird. Ich weis nicht woran es liegen könnte. Die PLL-Werte > für den Systemtakt in der "system_stm32f4xx.c" sind aber richtig (PLL_M > 8 und PLL_N 336). Der Configurationseintrag in "Defined symbols" ist > auch korrekt (HSE_CLOCK=8000000). Ist mir später auch aufgefallen. HSE_CLOCK=8000000 ist natürlich falsch. Es muss "HSE_VALUE=8000000" heisen. Dann läuft es mit der richtigen Geschwindigkeit.
Hallo, bei mir läuft es auch zu langsam. In welchem Fie steht denn "HSE_CLOCK=8000000"? Ich habe alle verdächtigen *.c und *.h -Files durchsucht und das nicht gefunden.
Thomas R. schrieb: > In welchem Fie steht denn "HSE_CLOCK=8000000"? Lies nochmal den Post vor deinem.
HSE_VALUE=8000000 Als globales Symbol in der Projektkonfiguration.
Hallo Matthias Danke fuer deinen Hinweis und die Anpassung an CoIDE. Manchmal sieht man den Wald vor lauter Baeumen nicht :-) LG Rolf
Hallo, inzwischen läuft das Projekt von Mathias K mit der richtigen Geschwindigkeit. Besten Dank für diesen Thread!!! Jetzt habe ich mein erstes eigenes CooCox-Projekt für das STM32F4-Board gestartet. Ich möchte vorerst nur ein HD44780-Display ansteuern. Dazu habe ich den HD44780-Treiber angekickt, weiter nichts. Die main() wird mit einer endless-loop automatisch angelegt. Beim Compilieren wird der ganze Rattenschwanz von *.c und *.h-Files, die der HD44780-Treiber für sich braucht, nicht gefunden. Es beginnt mit "xhw_types.h not found". Die ganzen vermissten *.c und *.h-Files befinden sich in den Tiefen der CooCox-Directory - und da unter dem Nuvoton-Verzeichnis. Ich habe angefangen, die Include-Directories zu erweitern, dann kommt der Compiler immer ein Stückchen weiter bis zum nächsten vermissten File ... das wird aber eine unendliche Geschichte. Ich hatte erwartet, dass sich die IDE durch das Einbinden eines Treibers (hier HD44780) entweder Kopien aller benötigten *.c und *.h-Files in das Projektverzeichnis zieht oder die Include-Verzeichnisse entsprechend erweitert. Tut sie aber nicht. Mache ich irgendwas falsch?
Thomas R. schrieb: > die Include-Verzeichnisse entsprechend > erweitert. > Tut sie aber nicht. Das geht nicht automatisch. Du musst alle Ordner angeben, wo .h Files drin sind, sofern sie benötigt werden. Alternativ geht auch in den jeweiligen C-File beim Include der .h Datei einen Pfad mit anzugeben. Ich kenne das auch, dass man bei neuen Projekten das compilieren und linken nur Schritt für Schritt hinbekommt.
Danke! Bei grösseren Projekten kann das Zusammenklicken der vielen Include-Pathes aber ganz schön aufwendig werden. Siehst du eine Möglichkeit, die Include-Pathes in einem Textfile zu speichern und dieses File dann von CooIDE zu verwenden? Dies wäre für die Übernahme von vielen Include-Pathes in neue Projekte doch sinnvoll. Sorry, CooIDE ist noch ganz neu für mich.
Thomas R. schrieb: > Siehst du eine Möglichkeit, die Include-Pathes in einem Textfile zu > speichern und dieses File dann von CooIDE zu verwenden? Eclipse ist sehr flexibel. Sowas ginge sicher zu machen. Kuck Dir mal die jeweilige "build.xml" im Projekt an. Da stehen alle Angaben drin, auch die Include-Pfade. Ob händische Änderungen darin es dann zurück in die CoIDE schaffen kannst Du ja mal ausprobieren.
Hallo und guten Tag Hier ist ein tolles Synthesizer-Projekt von Alessandro mit einem STM32F4 Discovery-Board: http://www.youtube.com/watch?v=4JkhzH57Je4 Gruß Rolf
Hallo, leider habe das Gefühl der µC zu langsam ist. In der Datei: "stm32f4xx.h" habe ich den Wert HSE_VALUE von 25000000 auf 8000000 geändert
1 | #if !defined (HSE_VALUE)
|
2 | #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */ |
3 | #endif /* HSE_VALUE */ |
Die Einstellungen für die PLL stimme auch: #define PLL_M 8 #define PLL_N 336 Über PINC 9 versuche ich den Systemclock anzuzeigen und leider sind es nur 16Mhz.
1 | RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); |
2 | |
3 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; |
4 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; |
5 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF ; |
6 | GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; |
7 | GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ; |
8 | GPIO_Init(GPIOC, &GPIO_InitStructure); |
9 | RCC_MCO2Config(RCC_MCO2Source_SYSCLK, RCC_MCO2Div_1); |
Habe ich noch was übersehen? Danke für jeden Tipp Tobias
Toggle mal einen Pin, direkt ohne die FW-Lib und schau Dir die Zeiten am Oszi an. Interrupts sollten gesperrt sein.
1 | while(1) { |
2 | GPIOB->BSRRH = GPIO_Pin_15; //PB_15_L; |
3 | GPIOB->BSRRL = GPIO_Pin_15; //PB_15_H; |
4 | }
|
Okay... bekomme ein schönes Rechteck mit ca 1.461Mhz. Da müsste doch mehr drinne sein oder?
Tobias S. schrieb: > #if !defined (HSE_VALUE) > #define HSE_VALUE ((uint32_t)8000000) > #endif /* HSE_VALUE */ Ist HSE_VALUE vorher noch woanders definiert? Mach es mal als globales Symbol, so das ggf. auch in anderen Headerfiles ankommt.
Hmm nicht das ich wüsste. Ich habe "einfach" das Workspace von dir geöffnet und den wert von HSE_VALUE geändert. Der Quarz schwingt auch mit 8Mhz...komisch
Tobias S. schrieb: > Hmm nicht das ich wüsste. Ich habe "einfach" das Workspace von dir > geöffnet und den wert von HSE_VALUE geändert. Der Quarz schwingt auch > mit 8Mhz...komisch HSE_VALUE ist in dem Workspace nur in der Configuration bei "defined symbols" gesetzt, nicht in der stm32f4xx.h
ist in der startup_stm32f4xx.c der Aufruf für die "SystemInit();" auskommentiert ? Setz doch mal nen Haltepunkt in die SystemInit() rein und guck ob überhaupt reingesprungen wird.
SystemInit(); Ruf die mal als erstes in der main() auf.
Ahh..super DANKE das war der Fehler. Jetzt werden auf PINC9 auch die 168Mhz ausgeben. Vielen Dank tobias
Da mich diese IDE sehr interessiert habe ich ein paar Fragen zu den CooCox experten: @Eric (Gast): Hast du oder jemand anderer das VCP (Virtual Commport) mit dem STM32F4-Discovery schon in der IDE zum laufen gebracht? Es gibt eine neue Version 1.5, funktioniert die nun besser mit dem STM32F4-Discovery? Läuft das CoOs auch auf STM32F4xx, sind keine Beispiele auf der Webseite?
Gibt es eine bessere Anleitung die Beispiele von ST zu kompilieren, als das Readme? Z.B. I2S/Audio Beispiel: - Copy all source files from this example folder to the template folder under Project\STM32F4xx_StdPeriph_Templates - Open your preferred toolchain - Add the files "audio_sample.c" and "stm324xg_eval_audio_codec.c" to the project source list - "stm324xg_eval_audio_codec.c" file is located under Utilities\STM32_EVAL\STM3240_41_G_EVAL - Rebuild all files and load your image into target memory - Run the example Was der Template Ordner bringen soll, verstehe ich nicht ganz, denn da sind keine wichtigen Dateien drin, die gebraucht werden. Ansonsten musste ich so ziemlich alles andere dme Projekt hinzufügen, damit es überhaupt kompiliert wurde. Eine bestimmte Datei "lcd_log_conf.h" musste ich sogar aus einem anderen Beispiel nehmen. Nachdem es fehlerfrei kompiliert wurde, erhalte ich ein leeres Programm (Program Size 0).
Bisher gibt es leider noch nichts neues. Mit dem TrueStudio klappt alles problemlos und der Virtuelle Com Port (VCP) läuft ohne Probleme. Will man nun aber die DSP Bibliotheken von STM dazulinken bebommt man den Fehler, dass man über 32kB gekommen ist. Schade... Ich werde mal bei CooCox nachfragen wie es mit dem Problem aussieht. Vielleicht weiß dort jemand Rat. Cool wäre es schon das Discovery Board einfach mit einem USB-Kabel zum Datentransfer zu benutzen.
Ich würde noch mal einen Schritt zurück machen wollen und etwas zur startup_stm32f4xx.c fragen. Ich habe das Beispielprojekt (danke) versucht zu verstehen und folgendes ist schon problematisch - bei einem coocox Projekt wie dem Blinky, WO wird denn startup code nun aufgerufen, ich finde es nicht im linker skript oder sonstwo. Im ResetVektor wird bss initialisiert und main() gestartet, aber auch kein SystemInit(). Die Diskrepanz, daß in den Kommentaren steht, daß SystemInit im startup.s aufgerufen wird, was ja gar nicht existent ist (wurde ja oben auch gesagt, daß coocox ein c-file benutzt) verwirrt mich auch noch. Außerdem findet man ja oft noch den M-3 erwähnt. Ich schätze daß dies durch die Anpassung der M3 lib an M4 liegt, wäre aber über feedback auch froh. Von daher würde ich mich sehr freuen, wenn ihr mir noch mal dieses erste grundlegende erklären könntet! Was passiert da genau. Denn das sollte ich wohl erst mal verstehen wenn ich mit arm einsteigen will :-) schönen Abend und hoffe auf Hilfe
mikey schrieb: > bei einem coocox Projekt wie dem Blinky, WO wird denn startup code nun > aufgerufen, ich finde es nicht im linker skript oder sonstwo. Im > ResetVektor wird bss initialisiert und main() gestartet, aber auch kein > SystemInit(). Also suchst du die Erklärung hierzu?
1 | // SystemInit(); wird automatisch vor der MAIN-Funktion
|
2 | // vom startup_stm32f4xx.s gerufen
|
Ne, dazu nicht. Vielmehr z.B. wo die startup_stm32f4xx.s befindlich ist und wie daraus eine Funktion gestartet wird. Ich hoffte das wäre rüber gekommen.
Ich habe gerade auf 1.6.0 aktualisier und weiß nicht, wo ich dem Compiler -std=c99 mitgeben kann. Hat von euch einer schon etwas gefunden?
Tilo Lutz schrieb: > Ich habe gerade auf 1.6.0 aktualisier und weiß nicht, wo ich dem > Compiler -std=c99 mitgeben kann. Hat von euch einer schon etwas > gefunden? Project -> Configuration -> Tab "Compile" dann einfach bei "Misc Controls" eintragen
Genau das hab ich versucht. Leider wird die Option dann auch für den Linker eingetragen: d:/program files (x86)/gnu tools arm embedded/4.6 2012q2/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/bin/ ld.exe: unrecognized option '-std=C99' collect2: ld returned 1 exit status :(
Mir ist gerade aufgefallen, dass ei der Fehlermeldung C00 steht, also das C groß geschrieben ist. IRgend wie scheint da beim Projektupdate was schief gegangen zu sein. Die Option wurde dem Linker hinzugefügt. Da die komplette Zeile in der Konfiguration grau ist, musste ich die Projektdatei editieren. Danach gings. Vielen Dank für den Hinweis!
Fang jetzt auch mit dem Board an. Wo kommen die mitgelieferten Source und Header Dateien rein? Es werden 3 Ordner mitgeliefert...(Std. Lib, USB, CMSIS) wenn ich nun die stm32f4xx_conf.h einbinde, meckert er rum das er sie nicht findet...wenn ich sie in den gleichen Ordner kopiere geht es, aber dann will er alle anderen .h Dateien haben..die ich entweder in der ...conf.h auskommentieren muss, oder jede einzelne in meinen Projektordner legen muss. 3. Möglichkeit, jede Library per Hand zum Projekt hinzufügen... Gibt es keinen Standartordner dafür bzw. wenn ja wo ist er?
Hi, Habe gerade die aktuellste Version der verwendetetn gcc-toolchain installiert, neueste CoIde auch und bekomme vom Linker diese Fehlermeldung: [cc] arm-none-eabi-gcc -mcpu=cortex-m4 -mthumb -Wl -nostartfiles -g "-Wl,-Map=Blinky mit SysTick.map" -O0 -Wl,--gc-sections "-LC:\CooCox\CoIDE\configuration\ProgramData\Blinky mit SysTick" "-Wl,-TC:\CooCox\CoIDE\configuration\ProgramData\Blinky mit SysTick/arm-gcc-link.ld" -g -o '"Blinky mit SysTick.elf"' ..\obj\stm32f4xx_syscfg.o ..\obj\stm32f4xx_sdio.o ..\obj\stm32f4xx_hash.o ..\obj\stm32f4xx_cryp_aes.o ..\obj\stm32f4xx_hash_sha1.o ..\obj\stm32f4xx_usart.o ..\obj\stm32f4xx_pwr.o ..\obj\stm32f4xx_can.o ..\obj\stm32f4xx_wwdg.o ..\obj\stm32f4xx_hash_md5.o ..\obj\stm32f4xx_dac.o ..\obj\startup_stm32f4xx.o ..\obj\stm32f4xx_crc.o ..\obj\stm32f4xx_iwdg.o ..\obj\main.o ..\obj\stm32f4xx_rcc.o ..\obj\stm32f4xx_it.o ..\obj\stm32f4xx_adc.o ..\obj\stm32f4xx_dcmi.o ..\obj\stm32f4xx_cryp_des.o ..\obj\stm32f4xx_cryp.o ..\obj\stm32f4xx_fsmc.o ..\obj\stm32f4xx_gpio.o ..\obj\stm32f4xx_flash.o ..\obj\system_stm32f4xx.o ..\obj\stm32f4xx_dma.o ..\obj\stm32f4xx_spi.o ..\obj\stm32f4xx_i2c.o ..\obj\stm32f4xx_rng.o ..\obj\stm32f4xx_exti.o ..\obj\misc.o ..\obj\stm32f4xx_rtc.o ..\obj\stm32f4xx_cryp_tdes.o ..\obj\stm32f4xx_tim.o ..\obj\stm32f4xx_dbgmcu.o [cc] arm-none-eabi-gcc: error: unrecognized command line option '-Wl' Manuell kann ich die -Wl option auch nicht entfernen, da das Feld in der Configuration nicht editierbar ist. Hat jemand eine Idee ? Danke + Frohes Fest noch, Tom ;o).
Der hier erwähnte Patch behebt (zumindest bei mir) auch das -Wl Problem : http://www.coocox.org/forum/topic.php?id=2593 Gruß und ein frohes neues Jahr Uwe
Hi Uwe, Danke und Dir auch einen Guten Rutsch ! cy, tom.
Was tun, wenn's hängt: Ich steige gerade vom F1 auf den F4 um. Ich habe zwar ein eigenes Framework am Laufen, wollte aber ein paar Punkte an Matthias' Code im Debugger anschauen. Wie auch immer - ich habe ein paar Zeilen angepasst und in das Olimex E407 (anderer Proz und Pinbelegung) geladen. Mit der Folge, dass der Prozessor vom OpenOCD nicht mehr gefunden wurde. -> Gelöst wird das Problem, indem man die Bootkonfig-Jumper von "Flash" nach "Embedded SRAM" ändert, ungefährlichen Code programmiert und wieder zurückjumpert. Vielleicht hilft der Tipp jemandem.
Moin moin, möchte mit dem stm32f4 anfangen. habe: coocox ide v1.6.1. gcc-arm-none-eabi-4_7-20 CoIDE_workspace ergebnis: GCC HOME: C:\STM32\arm-none-eabi-gcc-4_6-20111208\bin compile: [mkdir] Skipping G:\STM32\CoIDE workspace\Blinky mit SysTick\Blinky mit SysTick\Debug\bin because it already exists. [mkdir] Skipping G:\STM32\CoIDE workspace\Blinky mit SysTick\Blinky mit SysTick\Debug\obj because it already exists. BUILD FAILED Output filename conflict: stm32f4xx_gpio.o would be produced from G:\STM32\CoIDE workspace\Blinky mit SysTick\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_gpio.c and stm32f4xx_gpio.c Total time: 2 seconds was mache ich flasch?
-exclude from build: Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_gpio.c , denn stm32f4xx_gpio.c wird von irgenteinem *.h-file explizit eimgebunden; (kenne jetzt aber deinen Code nicht!)
vampire schrieb: > -exclude from build: > Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_gpio.c > , denn stm32f4xx_gpio.c wird von irgenteinem *.h-file explizit > eimgebunden; ...vergiss es: Suche das *.h - file, das die stm32f4xx_gpio.c includet und ändere in #include "stm32f4xx_gpio.h" ;
moin moin, alles etwas merkwürdig..... also WIN7 COIDE 1.6.1 gcc-arm-none-eabi-4_7-20 Blinky mit SysTick ach dem ich das verzeichnis aus C:/STM32/CoIDE workspace nach C:/.../Eigene Dokumente/STM32/CoIDE workspace verschoben habe geht es. zum test habe ich das Eigene Dokumente/ST32 gelöscht, geht immer noch. nehmen wir das mal als gegeben hin. kann ich das nun ohne probleme in das disc-board flashen und wenn ja wie ohne das ich es für immer ins nirvana schicke?
Horst S. schrieb: > kann ich das nun ohne probleme in das disc-board flashen und wenn ja wie > ohne das ich es für immer ins nirvana schicke? In diesem Forum wirst Du selten eine Garantie auf den Inhalt von Beiträgen erhalten ... ... schon allein, weil niemand weis, was DU machst, -außer Dir selbst(hoffentlich!) Ich verwende CoIDE 1.5.1 , bis die neueren Versionen stabil sind -- Unter Debugger --> ST-Link --> SWD für debuggen und programmieren auswählen --> download Code to Flash ( es gibt auch "How-To's")
@ Marcus H. (lungfish) Beitrag "Re: CooCox CoIDE mit STM32F4-Discovery Board" -könnte es sein, das deine Beobachtung damit in Zusammenhang steht, daß das Olimex STM32-E407 nicht nur äusserlich einem Arduino-Board ähnelt? Es meldet sich als STM-Device im DFU mode(USB-OTG1), wenn boot auf System Memory steht! Demnach ist da ein Bootloader aktiv ... (und es ist kaum der orig. von ST über com-port) Ich kenne mich mit den Arduino-Bootloader nicht aus ... Wäre es möglich, das das E407 ein Arduino-Board ist(oder werden sollte?)
wow, es geht. ich komm aus dem staunen nicht mehr raus.
Schade, dass es mit den Compilern für die STM32 oder generell ARM Cortex3/4 nicht so eine plug-and-play Lösung gibt wie z.B. Atmel mit dem AVR-Studio. Scheinen ja immer beliebter zu werden die STM32er :-)
@ Pete K. (pete77) -wenn Du auf das "verfusen" verzichten kannst(beim AVR-Studio) dann probier COOCOX die CoIDE. -entwickeln ,flashen, debuggen -- Herz, was willst Du mehr !?! (und nicht zu verachten: mit Version 1.5.1 kann man noch KEIL-Projekte unverstümmelt compilieren...)
ok, spass beiseite.... ich habe hier die CoIDE und das Disc.board am laufen. ich würde mich gern zum einstieg mit einem webserver beschäftigen. fürs netzwerk liegen hier noch zwei stk01 (enc28j60). hat wer was fertiges zum lernen für mich?
moin moin,
habe was gefunden: STM32F4_SPI_Ethernet
geht nur noch nicht richtig.
warum will der linker hier noch nicht?
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
GCC HOME: C:\STM32\gcc-arm-none-eabi-4_7-20\bin
compile:
[mkdir] Skipping C:\STM32\STM32F4_SPI_Ethernet\OpenMCP\Debug\bin
because it already exists.
[mkdir] Skipping C:\STM32\STM32F4_SPI_Ethernet\OpenMCP\Debug\obj
because it already exists.
[cc] Starting dependency analysis for 44 files.
[cc] Parsing ..\..\..\Libraries\Ethernet\inc\ENC28J60.h
[cc] Parsing ..\..\..\Libraries\Ethernet\src\enc28j60.c
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_spi.h
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_rcc.h
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_gpio.h
[cc] Parsing
..\..\..\Libraries\Device\STM32F4xx\Include\stm32f4xx.h
[cc] Parsing ..\..\..\Libraries\Delay\Delay.h
[cc] Parsing ..\..\..\Libraries\CMSIS\Include\core_cm4.h
[cc] Parsing
..\..\..\Libraries\Device\STM32F4xx\Include\system_stm32f4xx.h
[cc] Parsing ..\..\..\src\stm32f4xx_conf.h
[cc] Parsing ..\..\..\Libraries\CMSIS\Include\core_cmInstr.h
[cc] Parsing ..\..\..\Libraries\CMSIS\Include\core_cmFunc.h
[cc] Parsing ..\..\..\Libraries\CMSIS\Include\core_cm4_simd.h
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_adc.h
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_can.h
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_crc.h
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_cryp.h
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_dac.h
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_dbgmcu.h
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_dcmi.h
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_dma.h
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_exti.h
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_flash.h
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_fsmc.h
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_hash.h
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_iwdg.h
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_i2c.h
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_pwr.h
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_rtc.h
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_rng.h
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_sdio.h
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_syscfg.h
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_tim.h
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_usart.h
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_wwdg.h
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\inc\misc.h
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_syscfg.c
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_sdio.c
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_cryp_aes.c
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_hash.c
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_hash_sha1.c
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_usart.c
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_pwr.c
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_can.c
[cc] Parsing
..\..\..\Libraries\Ethernet\src\websrv_help_functions.c
[cc] Parsing ..\..\..\Libraries\Ethernet\inc\ip_config.h
[cc] Parsing
..\..\..\Libraries\Ethernet\inc\websrv_help_functions.h
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_wwdg.c
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_hash_md5.c
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_dac.c
[cc] Parsing ..\..\..\Libraries\Ethernet\src\EtherShield.c
[cc] Parsing ..\..\..\Libraries\Ethernet\inc\ip_arp_udp_tcp.h
[cc] Parsing ..\..\..\Libraries\Ethernet\inc\dnslkup.h
[cc] Parsing ..\..\..\Libraries\Ethernet\inc\dhcp.h
[cc] Parsing ..\..\..\Libraries\Ethernet\inc\EtherShield.h
[cc] Parsing ..\..\..\Libraries\Ethernet\inc\net.h
[cc] Parsing ..\..\..\src\startup_stm32f4xx.s
[cc] Parsing ..\..\..\Libraries\Ethernet\src\ip_arp_udp_tcp.c
[cc] Parsing ..\..\..\Utilities\STM32_EVAL\stm32f4_discovery.c
[cc] Parsing ..\..\..\Utilities\STM32_EVAL\stm32f4_discovery.h
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_crc.c
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_iwdg.c
[cc] Parsing ..\..\..\src\main.c
[cc] Parsing ..\..\..\Libraries\Ethernet\src\dnslkup.c
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_rcc.c
[cc] Parsing ..\..\..\src\stm32f4xx_it.c
[cc] Parsing ..\..\..\src\stm32f4xx_it.h
[cc] Parsing ..\..\..\Libraries\Delay\Delay.c
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_adc.c
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_dcmi.c
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_cryp_des.c
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_cryp.c
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_fsmc.c
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_gpio.c
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_flash.c
[cc] Parsing ..\..\..\src\system_stm32f4xx.c
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_dma.c
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_spi.c
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_i2c.c
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_rng.c
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\misc.c
[cc] Parsing ..\..\..\Libraries\Ethernet\src\dhcp.c
[cc] Parsing
..\..\..\Utilities\STM32_EVAL\stm32f4_discovery_lis302dl.c
[cc] Parsing
..\..\..\Utilities\STM32_EVAL\stm32f4_discovery_lis302dl.h
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_rtc.c
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_cryp_tdes.c
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_tim.c
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_dbgmcu.c
[cc] 44 files are up to date.
[cc] 0 files to be recompiled from dependency analysis.
[cc] 0 total files to be compiled.
[cc] Starting link
[cc] arm-none-eabi-gcc -mcpu=cortex-m4 -mthumb -g -nostartfiles
-Wl,-Map=OpenMCP.map -O0 -Wl,--gc-sections
-LC:\STM32\CoIDE\configuration\ProgramData\myWeb_ENC28J60
-Wl,-TC:\STM32\CoIDE\configuration\ProgramData\myWeb_ENC28J60/arm-gcc-li
nk.ld -g -o OpenMCP.elf ..\obj\enc28j60.o ..\obj\stm32f4xx_syscfg.o
..\obj\stm32f4xx_sdio.o ..\obj\stm32f4xx_cryp_aes.o
..\obj\stm32f4xx_hash.o ..\obj\stm32f4xx_hash_sha1.o
..\obj\stm32f4xx_usart.o ..\obj\stm32f4xx_pwr.o ..\obj\stm32f4xx_can.o
..\obj\websrv_help_functions.o ..\obj\stm32f4xx_wwdg.o
..\obj\stm32f4xx_hash_md5.o ..\obj\stm32f4xx_dac.o ..\obj\EtherShield.o
..\obj\startup_stm32f4xx.o ..\obj\ip_arp_udp_tcp.o
..\obj\stm32f4_discovery.o ..\obj\stm32f4xx_crc.o
..\obj\stm32f4xx_iwdg.o ..\obj\main.o ..\obj\dnslkup.o
..\obj\stm32f4xx_rcc.o ..\obj\stm32f4xx_it.o ..\obj\Delay.o
..\obj\stm32f4xx_adc.o ..\obj\stm32f4xx_dcmi.o
..\obj\stm32f4xx_cryp_des.o ..\obj\stm32f4xx_cryp.o
..\obj\stm32f4xx_fsmc.o ..\obj\stm32f4xx_gpio.o ..\obj\stm32f4xx_flash.o
..\obj\system_stm32f4xx.o ..\obj\stm32f4xx_dma.o ..\obj\stm32f4xx_spi.o
..\obj\stm32f4xx_i2c.o ..\obj\stm32f4xx_rng.o ..\obj\stm32f4xx_exti.o
..\obj\misc.o ..\obj\dhcp.o ..\obj\stm32f4_discovery_lis302dl.o
..\obj\stm32f4xx_rtc.o ..\obj\stm32f4xx_cryp_tdes.o
..\obj\stm32f4xx_tim.o ..\obj\stm32f4xx_dbgmcu.o
[cc] Parsing
..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_exti.c
[cc] ..\obj\startup_stm32f4xx.o:(.isr_vector+0x0): undefined
reference to `_estack'
[cc]
c:/stm32/gcc-arm-none-eabi-4_7-20/bin/../lib/gcc/arm-none-eabi/4.7.3/../
../../../arm-none-eabi/lib/armv7e-m\libg.a(lib_a-init.o): In function
`__libc_init_array':
[cc] init.c:(.text.__libc_init_array+0x40): undefined reference
to `_init'
[cc] collect2.exe: error: ld returned 1 exit status
BUILD FAILED
Total time: 3 seconds
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
moin moin, danke vampire. hatte ich schon gefunden. die lernphase ist bei den arms doch schon etwas länger als bei den avrs. daher bin ich für jede hilfe dankbar.
- ich bin mir nicht ganz sicher, -aber probier mal die gcc 4.6_2012q2 (nur mal auf "Verdacht"). Ich hatte vor langer Zeit ähnliche Probl. ; - oder war's _ASSEMBLY_ in Configuration einfügen ? - oder war's Link File: arm-gcc-link.ld ?
- oder bei deiner gcc-version unter Configuration --> Optimization: none;
Hi MATTIHAS I AM STARTED WITH MY PROJECT STM32F407 DISCOVERY BOARD AND I HAVE INSTALLED Coccox COide .......but i have no idea how to begin with...i want to run some simple programs and i desperately need some help....so can i get ur mail id???....thanks in advance..my mail id is suhas_sajjan@yahoo.in
Hallo, Ich nutze seit einigen Tagen CooCox CoIDE und das STM32F407VG Discovery Board. Ich bin mittlerweile allerdings recht verwirrt, was die Benutzung der "Standard Peripherals Library" angeht. Nach der Installation ist diese anscheinend bereits integriert (?), jedenfalls konnte ich nach Wahl des Chips die einzelnen Komponenten der Library im Repository auswählen. Auch die Beispiele lassen sich einbinden, bei Klick auf eine Peripherie im Componentstab öffnet sich ein "Help" Tab in CoIDE. Mein Problem ist, dass ich nicht weiß, in welcher Version die Bibliothek installiert ist, und wo sie ggf. auf meiner Festplatte liegt und die gesamte Hilfe abgespeichert ist (bzw. wie diese aus CoIDE heraus aufgerufen wird.) Ich habe mir die Standard Peripherals Library auch manuell heruntergeladen in der neusten Version 1.2.0 und dort sind u.A. wesentlich mehr Beispiele enthalten...jetzt möchte ich entweder meine bereits integrierte Library updaten oder die V1.2.0 installieren... Hoffe ihr könnt mir helfen, Grüße, Simon
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.