Stap 2: Voeg ARM math bibliotheken voor de arduino software.
De arduino software wordt geleverd met een heleboel leuke (maar vrij moeilijk te begrijpen) DSP-functies. Het gaat hierbij om discrete FFT-functies zoals arm_rfft_q15 (& S, uit, outsq) die ik graag gebruik maken. Maar ze zijn gemist van de linker. Deze stap voegt deze toe aan de arduino omgeving.
Vermoedelijk, deze techniek kan worden gebruikt om link tegen enige C bibliotheek.
Wilt u een voorbeeld van wat code die gebruikmaakt van deze functies dan stel ik u google voor "DueVGA waterval door stimmer". Dit is waar ik kreeg de techniek uit en de code bevat de originele tips die ik met vervaldatum gebruikt.
Anyway, hier zijn de wijzigingen aan de arduino 1.5.5 installatie, dit zal werken voor de Arduino Due, er zijn enkele suggesties voor hoe aan te passen die voor het DigiX board.
1. Voeg een sym-link naar de bibliotheken voor de arduino_due_x/digix bestuur varianten:
Dit werkt voor de vervaldatum (getest met 1.5.4):
# cd /usr/local/arduino-1.5.5/hardware/arduino/sam/variants/arduino_due_x/
# ln -s... /.. /System/CMSIS/CMSIS/lib/gcc/libarm_cortexM3l_math.a.
Maar, als u een DigiX (met 1.5.5), doe dit:
# cd /usr/local/arduino-1.5.5/hardware/digistump/sam/variants/digix/
# ln -s... /.. /System/CMSIS/CMSIS/lib/gcc/libarm_cortexM3l_math.a.
2. het boards.txt-bestand op twee plaatsen wijzigen toe te voegen - larm_cortexM3l_math aan de build.extra_flags-lijn:
Naar de Arduino behoren:
# cd /usr/local/arduino-1.5.5/hardware/arduino/sam
# diff -u boards.txt.0 boards.txt
---boards.txt.0 2014-02-15-12:56:00.498907451 + 0000
+++ boards.txt 2014-02-15-12:57:41.803409801 + 0000
-13,7 + 13,8
arduino_due_x_dbg.build.usb_product="Arduino Due"
arduino_due_x_dbg.build.Board=SAM_DUE
arduino_due_x_dbg.build.core=Arduino
-arduino_due_x_dbg.build.extra_flags=-D__SAM3X8E__ - mthumb {build.usb_flags}
+ # MDTE: arduino_due_x_dbg.build.extra_flags=-D__SAM3X8E__ - mthumb {build.usb_flags}
{build.usb_flags} +arduino_due_x_dbg.build.extra_flags=-D__SAM3X8E__ - mthumb-larm_cortexM3l_math
arduino_due_x_dbg.build.ldscript=linker_scripts/gcc/Flash.LD
arduino_due_x_dbg.build.variant=arduino_due_x
arduino_due_x_dbg.build.variant_system_lib=libsam_sam3x8e_gcc_rel.a
-34,7 + 35,8
arduino_due_x.build.usb_product="Arduino Due"
arduino_due_x.build.Board=SAM_DUE
arduino_due_x.build.core=Arduino
-arduino_due_x.build.extra_flags=-D__SAM3X8E__ - mthumb {build.usb_flags}
+ # MDTE: arduino_due_x.build.extra_flags=-D__SAM3X8E__ - mthumb {build.usb_flags}
{build.usb_flags} +arduino_due_x.build.extra_flags=-D__SAM3X8E__ - mthumb-larm_cortexM3l_math
arduino_due_x.build.ldscript=linker_scripts/gcc/Flash.LD
arduino_due_x.build.variant=arduino_due_x
arduino_due_x.build.variant_system_lib=libsam_sam3x8e_gcc_rel.a
Voor de DigiX, soortgelijke wijzigingen aanbrengen in de bestanden onder /usr/local/arduino-1.5.5/hardware/digistump/sam
3. Verander het platforms.txt bestand:
Voor de Arduino Due (getest onder 1.5.4):
Wijzigen in /usr/local/arduino-1.5.5/hardware/arduino/sam, platform.txt om toe te voegen de volgende net na:
Voeg dit toe: "{build.variant.path}/libarm_cortexM3l_math.a"
Net na "{build.variant.path}/{build.variant_system_lib}"
In de regel na de opmerking zegt dat "Combineren gc-profielen, archieven en objecten"
Hier is een diff van de veranderingen:
# diff -u platform.txt.0 platform.txt
---platform.txt.0 2014-02-15-12:58:59.011792641 + 0000
+++ platform.txt 2014-02-15-13:00:18.792188245 + 0000
-55,7 + 55,8
Recipe.ar.Pattern="{compiler.Path}{compiler.ar.cmd}" {compiler.ar.flags} "{build.path}/{archive_file}" "{object_file}"
## Gc-profielen, archieven en objecten combineren
-recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.flags}-mcpu={build.mcu} "-T{build.variant.path}/{build.ldscript}" "-Wl,-Map,{build.path}/{build.project_name}.map" -o "{build.path}/{build.project_name}.elf" "-L{build.path}" -lm - lgcc - mthumb -Wl,--cref -Wl,--check-secties - Wl,--gc-profielen - Wl,--post = Reset_Handler -Wl,--onopgeloste-symbolen = verslag-all - Wl,--waarschuwen-common - Wl,--waarschuwen-sectie-uitlijnen - Wl,--waarschuwen-onopgeloste-symbolen - Wl,--start-groep "{build.path}/syscalls_sam3.c.o" {object_files} "{build.variant.path}/{build.variant_system_lib}" "{build.path}/{archive_file}" -Wl,--einde-groep
+ # MDTE: recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.flags}-mcpu={build.mcu} "-T{build.variant.path}/{build.ldscript}" "-Wl,-Map,{build.path}/{build.project_name}.map" -o "{build.path}/{build.project_name}.elf" "-L{build.path}" -lm - lgcc - mthumb -Wl,--cref -Wl,--check-secties - Wl,--gc-profielen - Wl,--post = Reset_Handler -Wl,--onopgeloste-symbolen = verslag-all - Wl,--waarschuwen-common - Wl,--waarschuwen-sectie-uitlijnen - Wl,--waarschuwen-onopgeloste-symbolen - Wl,--start-groep "{build.path}/syscalls_sam3.c.o" {object_files} "{build.variant.path}/{build.variant_system_lib}" "{build.path}/{archive_file}" -Wl,--einde-groep
+ recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.flags}-mcpu={build.mcu} "-T{build.variant.path}/{build.ldscript}" "-Wl,-Map,{build.path}/{build.project_name}.map" -o "{build.path}/{build.project_name}.elf" "-L{build.path}" -lm - lgcc - mthumb -Wl,--cref -Wl,--check-secties - Wl,--gc-profielen - Wl,--post = Reset_Handler -Wl,--onopgeloste-symbolen = verslag-all - Wl,--waarschuwen-common - Wl,--waarschuwen-sectie-uitlijnen - Wl,--waarschuwen-onopgeloste-symbolen - Wl,--start-groep "{build.path}/syscalls_sam3.c.o" {object_files} "{build.variant.path}/{build.variant_system_lib}" "{build.variant.path}/libarm_cortexM3l_math.a" "{build.path}/{archive_file}" -Wl ,--einde-groep
Voor de Digix, zoals in de bovenstaande stappen soortgelijke wijzigingen aanbrengen in het bestand platforms.txt onder:
/usr/local/Arduino-1.5.5/Hardware/digistump/Sam/
Nu zou uw schetsen moeten kunnen bellen naar iets om in te nemen libarm_cortexM3l_math.a! Yipee!
Command line compilatie met arduino IDE 1.5 +
Dit lijkt te werken voor de DigiX board:
/usr/local/Arduino-1.5.5/Arduino--digistump:sam:digix--upload /root/Arduino/sketchbook/xblinky/xblinky.ino--verbose aan boord