STM32F4 CooCox Modüler bölme hatası

Başlatan Klein, 16 Şubat 2013, 00:28:39

Klein

           	if (!(tick_count % 1000)){
           		tick_1sec_update = 0xFFFFFFFF;
           		tick_1sec_count++;
           	}


CooCox ile STM32F4 için yukarıdaki kod nedeniyle  aşağıdaki hataları alıyorum. Hatanın sebebi modüler bölme. % yerine başka aritmetik veya mantıksal operatörler kullandığımda hata almıyorum. STM32F10x ile daha önce yaptığım bir projeye hata vermiyor. F10x ile yeni proje oluşturup denemedim. Belki ona da verir.

       [cc] Starting link
       [cc] arm-none-eabi-gcc -mcpu=cortex-m4 -mthumb -g -nostartfiles -Wl,-Map=Shot_RF.map -O0 -Wl,--gc-sections -LC:\CooCox\CoIDE\configuration\ProgramData\Shot_RF -Wl,-TC:\CooCox\CoIDE\configuration\ProgramData\Shot_RF/arm-gcc-link.ld -g -o Shot_RF.elf ..\obj\stm32f4xx_usart.o ..\obj\startup_stm32f4xx.o ..\obj\main.o ..\obj\stm32f4xx_rcc.o ..\obj\stm32f4xx_gpio.o ..\obj\system_stm32f4xx.o ..\obj\stm32f4xx_spi.o ..\obj\misc.o ..\obj\stm32f4xx_tim.o
       [cc] c:/program files/gnu tools arm embedded/4.6 2012q2/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/lib/armv7e-m\libg.a(lib_a-abort.o): In function `abort':
       [cc] abort.c:(.text.abort+0xa): undefined reference to `_exit'
       [cc] c:/program files/gnu tools arm embedded/4.6 2012q2/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/lib/armv7e-m\libg.a(lib_a-signalr.o): In function `_kill_r':
       [cc] signalr.c:(.text._kill_r+0xe): undefined reference to `_kill'
       [cc] c:/program files/gnu tools arm embedded/4.6 2012q2/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/lib/armv7e-m
       [cc] \libg.a(lib_a-signalr.o): In function `_getpid_r':
       [cc] signalr.c:(.text._getpid_r+0x0): undefined reference to `_getpid'
       [cc] collect2: ld returned 1 exit status

BUILD FAILED
Total time: 2 seconds


Ekleme:
"stdio.h" dosyasını include edince de benzer bir hata aldım. Projeyi ilk oluşturduğumda "stdio.h" dosyasını include edince yine aynı hatayı vermişti. Ben diğer hatalarla uğraşırken o hata gitti. Sonra "stdio.h" dosyasını kaldırdım. Şimdi yine aynı hatayı veriyor.

Klein

Sorun modüler bölmeden kaynaklanmıyormuş.

Printf fonksiyonlarını float veri tipiyle kullanabilmek için bazı dosyalarda değişiklik yapmış,
main rutininin başına da

setvbuf( stdout, 0, _IONBF, 0 );

satırını eklemiştim.
Yeni proje oluşturunca bu satırı main içine koydum ama diğer değişiklikleri unuttum. :)

Sorun bundan kaynaklanıyormuş.

muhittin_kaplan

Hocam printf ve sprintf de bende problemler yaşamıştım.

Epey Tırmaladım Malum

http://muhittinkaplan.com/2013/01/stm32-usart-ve-sprintf-printf/


Klein

Sorun sprintf değil.
Sorun yeni proje oluşturunca , Sprintf için yapılan düzenlemelerin bir kısmını yeni projeye uygulayıp , bir kısmını unutmak.
Ctrl+C Ctrl+V ile main.c içeriğini alıp , STM32F10x.h içeriğini olduğu gibi bırakınca böyle oluyor.
Sorun çözüldü.

muhittin_kaplan

Sprintf için siz nasıl bir değişiklik yapıyorsunuz hocam ?

Klein

   Startup dosyasındaki
     (void *)&pulStack[STACK_SIZE-1],     /*!< The initial stack pointer         */
   satırını aşağıdaki ile değiştirdim.
     (void (*)(void))((unsigned long)pulStack + sizeof(pulStack)),

   stack büyüklüğünü biraz artırdım.
   #define STACK_SIZE       0x00000300

   printf fonksiyonunu kullanmadan önce bir yerde aşağıdaki rutini çağırdım.
   setvbuf( stdout, 0, _IONBF, 0 );