14.07.2013

Kompilacja solucji darmowym kompilatorem GCC

Aby skompilować solucję na STM32F4Discovery potrzebujemy płatnych wersji kompilatora Keil MDK lub ARM RVDS. Kompilatory te sporo kosztują więc zakup do zastosowań amatorskich raczej odpada. Jednak już od jakiegoś czasu w projekcie GHI's Open Source NETMF Ports jak i również Netduino używają do kompilacji darmowych kompilatorów GCC. Postanowiłem więc i ja zaadoptować ich rozwiązanie do kompilacji solucji dla STM32F4Discovery. Praca zakończyła się sukcesem i od jakiegoś czasu używam darmowego kompilatora. TinyCLR wychodzi trochę większy (o około 27k) , jest też pewnie mniej wydajny, no ale coś za coś. Poniżej opiszę co i jak trzeba zrobić. Opis dotyczy kompilacji dla wersji PK .NET MF 4.2 RTM QFE2, czyli oficjalnej wersji solucji Discovery4. Katalog z PK trzeba przygotować tak jak we wcześniejszym opisie kompilacji.

Po pierwsze ściągamy i instalujemy kompilator. Ja ściągnąłem wersję zalecaną do kompilacji np. FEZCerberus z GHI z jakieś pół roku temu, czyli GCC ARM Embedded 4.6-2012-q4-update. Jeśli komuś uda się skompilować nowszą wersją, niech da znać w komentarzach. Oczywiście ściągamy plik exe (windows installer) i odpalamy. Wszystko robimy standardowo z jednym małym wyjątkiem. Zmieniamy katalog instalacji na przykład na taki:


Po zainstalowaniu kompilatora trzeba ściągnąć i nagrać na wcześniej przygotowany PK z Discovery4 pliki przygotowane przeze mnie. Pliki te wyciągnąłem z portu GHI. Można je pobrać z mojego svna:
NETMF for STM32 (F4 Edition) Release 4.2 QFE2 RTM GCC

Czas na kompilację. Kompilację TinyBooter możemy sobie darować. Najlepiej użyć oryginalnego lub mojego z katalogu OneWire. On się nie zmienia. Jeśli spróbujemy go skompilować przy pomocy GCC, to może się okazać, że wygenerowany wsad będzie większy niż obszar w którym się ma zmieścić.

To co nas interesuje to kompilacja TinyCLR. Uruchamiamy okno konsoli cmd i przechodzimy do katalogu PK. Odpalamy polecenie:

setenv_gcc 4.6.2 c:\gcc46


Teraz odpalamy tylko kompilację TinyCLR poleceniem:

msbuild /p:flavor=RELEASE;memory=FLASH Solutions\Discovery4\TinyCLR\TinyCLR.proj


i czekamy na zakończenie:


W katalogu C:\MicroFrameworkPK_v4_2\BuildOutput\THUMB2\GCC4.6\le\FLASH\release\Discovery4\bin\tinyclr.hex dostaniemy nasze ER_CONFIG i ER_FLASH, które standardowo, przy pomocy MFDeploy ładujemy do STM32F4Discovery.

Paczka z plikami modyfikującymi solucję, zawiera obsługę karty SD i OneWire, więc jeśli ktoś tego nie chce to musi sobie usunąć z projektu.

4 komentarze:

  1. Hello!
    I have a problem with hex files "ER_CONFIG" and "ER_FLASH", they are is without extensions (in folder C:\MicroFrameworkPK_v4_2\BuildOutput\THUMB2\GCC4.6\le\FLASH\release\Discovery4\bin\tinyclr.hex).
    Compilation proceeds as described above, but after loading them usb connection stops working.
    Reboot, unplug and plug the power later, but again no usb communication. So I do not know if she still
    works the software can be programmed and new. NET example test.
    Have you checked your compilation for performance.
    If you want I can describe the actions you take in the collection and compilation. Own compilation finishes without errors as I mentioned.Thank you!

    OdpowiedzUsuń
    Odpowiedzi
    1. I checked recipe... and is ok. My test step by step:
      1. install PK 4.2 QFE2
      2. unzip NETMF for STM32F4 QFE2
      3. unzip Kod Filemon patch NETMF for STM32F4 QFE2 GCC
      4. compile (GCC)
      4. erase flash (ST-Link utility)
      5. load tinybooter.hex from http://netmf4stm32.codeplex.com/ (ST-Link utility)
      6. load ER_CONFIG and ER_FLASH from build dir (MFDeploy)
      7. usb connection is ok and "Show device info" is ok (MFDeploy)

      Usuń
  2. Znalazłem błąd w kompilacji GCC. Formatowanie dla wartości float w ToString nie działa poprawnie. Np. 18.95648.ToString("F1") da wartość "18.95647999999999904" zamiast "18.9". Poprawkę znalazłem tutaj: https://github.com/NicolasG3/NETMF4.3_Community/blob/master/DeviceCode/pal/tinycrt/tinycrt.cpp. Potrzebne były zmiany w funkcji hal_snprintf_float. Zaktualizowałem moje źródła.

    OdpowiedzUsuń
  3. Dodałem warunki dla kompilacji GCC w plikach STM32F4.settings i Discovery4.settings. Teraz można używać do kompilacji i GCC i MDK niezależnie.

    OdpowiedzUsuń