Ethernetowy bootloader dla mikrokontrolerów Freescale Kinetis
5. Otworzyć plik .xmap i sprawdzić, czy aplikacja została umieszczona pod zmodyfikowanymi adresami pamięci Flash (rysunek 9).
Rys. 9. Zaznaczone na czerwono adresy pamięci po modyfikacji
Teraz wygenerowany plik .S19 jest gotowy do wgrania do pamięci mikrokontrolera przez ethernetowy bootloader. Plik ten można znaleźć w sposób przedstawiony na rysunku 10.
Rys. 10. Lokalizacja pliku .S19
Rozwijanie aplikacji dla systemu MQX z ethernetowym bootloaderem w środowisku CodeWarrior
Dla przypadku wykorzystania ethernetowego bootloadera w projekcie programistycznym dla systemu MQX użyty został przykład „Hello World” znajdujący się pod ścieżką C :\Program Files\Freescale\Freescale MQX 3.7\mqx .
1. Przeciągnąć i upuścić do workspace-a środowiska CodeWarrior plik .project projektu hello_twrk60n512 .
2. Domyślnie system MQX alokuje tablicę wektorów pod pierwszym adresem pamięci Flash (0x0000-0000). Jako, że obszar ten jest wykorzystywany przez ethernetowy bootloader, konieczna jest realokacja tablicy wektorów w sekcji RAM . Aby to uczynić, należy otworzyć biblioteki bsp_twrk60n512 psp_twrk60n512 , dodać odpowiednie makro ( #define MQX_ROM_VECTORS ) do pliku user_config.h i przekompilować biblioteki (rysunek 11). Więcej o tej czynności można przeczytać w rozdziale 2.4 Freescale CodeWarrior Development Studio version 10.1 z dokumentu „ Getting Started ” ( C:\Program Files\Freescale\Freescale MQX ).
Rys. 11. Dodanie makra do pliku biblioteki
3. Zmienić opcję workspace-a na MK60N512VMD100_INTERNAL_FLASH i otworzyć plik MK60N512VMD100_flash.lcf (rysunek 12).
Rys. 12. Plik MK60N512VMD100_flash.lcf
4. Zmodyfikować plik linkera .lcf .
a. Zmodyfikować adres pamięci początku aplikacji właściwej mikrokontrolera z 0x0000_0000 na 0x0000_C000 (listing 8).
Listing 8.
# 48KB (Reserved for Ethernet Bootloader) fnet_bootloader (RX) : ORIGIN = 0x00000000, LENGTH = 0x0000C000 vectorrom (RX): ORIGIN = 0x0000C000, LENGTH = 0x00000410 rom (RX) : ORIGIN = 0x0000C420, LENGTH = 0x0007F000-0x0000C420
b. Usunąć obszar m_cfmprtrom (listing 9).
Listing 9.
# m_cfmprotrom (RX) : ORIGIN = 0x00000400, LENGTH = 0x00000010 # .cfmprotect : # { # *(.cfmconfig) # . = ALIGN (0x4); # } > m_cfmprotrom