2013-10-17 11 views
25

Mikrodenetleyici alanında yeniyim. ARM mikrodenetleyici programlarını derlemek için AVR mikroişlemcileri için derleme programları olan bir IDE'yi kullanmam gerekiyor. Derleyiciyi AVR'den ARM'ye değiştirdim ve birisinin söylediği gibi bazı seçenekler ekledim. Onu çalıştırdığınızdaexit.c :(. Text + 0x18): arm-none-eabi-gcc kullanıldığında `_exit 'için undefined başvuru

\ARM-GCC\bin\arm-none-eabi-gcc -O0 -ffunction-sections -Wall -std=gnu99 -mfloat-abi=soft 
-Wa,-adhlns="[email protected]" -fmessage-length=0 -mcpu=cortex-m0 -mthumb -g3 -gdwarf-2 -Wl, 
--gc-sections -o <Dir_name>\Build_Files\Blink_arm.cpp.elf <Dir_name>\Build_Files\Blink_arm.cpp.o <Dir_name>\Build_Files\core.a 
-L<Dir_name>\Build_Files -lm 

Ben follwing hatayı alıyorum: aşağıdaki komutu

tools/arm-gcc/bin/../lib/gcc/arm-none-eabi/4.6.2\libc.a(lib_a-exit.o): In function `exit': 
exit.c:(.text+0x18): undefined reference to `_exit' 
collect2: ld returned 1 exit status 

bu hata ne olduğuna biraz yardım getireyim ve nasıl çözebiliriz. Ayrıca komut satırındaki bu seçeneklerin ne anlama geldiğini bilmiyorum.

+3

yılında senin ARM libc (derleyicinizle birlikte verilir), 'exit()' işlevi, herhangi bir kütüphanede tanımlanmayan '_exit()' işlevini çağırır. 'void _exit (int status)' ı tanımlayarak hızlı bir düzeltme yapabilmenize rağmen, derleyiciniz yanlış ayarlanmış olmalıdır (NOT: bu çalışmaz, libc dosyanızın _exit() değerini farklı bir imza ile bildirmesidir.) 'AVR muadili gibi sonsuz bir döngüde durdurabilir.GCC kurulumunuzu sabitlemek tavsiye edilen bir seçenek olabilir – Dylan

+1

Bakınız: [newlib syscalls] (https://sourceware.org/newlib/libc.html#Syscalls); Yönetim kurulu için uygulanmamışlarsa, bunları uygulamaya koymanız gerekir.Ayrıca, kodunuzla ilgili sorunlar olabilir.Newlib her şeyi desteklemez, bkz. [Gatliff'in newlib] (http://www.billgatliff.com/newlib.html) genel bakış. –

cevap

37

/mimari bunu yüklemek için bir AR M hedef makine. Muhtemelen semihosting kullanmıyorsunuz, yeniden hedeflemek istiyorsunuz.

ARM® Derleyici araç zinciri Versiyon 4.1 gösterir: araç zinciri en readme.txt itibaren

Semihosting is a mechanism that enables code running on an ARM target to communicate and use the Input/Output facilities on a host computer that is running a debugger.

(klasörün .../gcc-arm-none-eabi-VERSION/share/doc/gcc-arm-none-eabi altında):

** non-semihosting/retarget

If you are using retarget, linking like: $ arm-none-eabi-gcc --specs=nosys.specs $(OTHER_LINK_OPTIONS)

bana --specs=nosys.specs yeterliydi İçin;)

İlgili konular