2

Im working on a project for stm32f4 to my school. Im using CooCox IDE.

I wanted to add new files "przerwania.c" and "przerwania.h" to write some functions there - not in "main.c". But I have no idea why CooCox is showing me errors. Earlier I wanted to move some of functions from main.c to pwm.c and them work! But I would like to make a new files couse i have more functions.

Errors in CooCox look like this:

[mkdir] Created dir: D:\CooCox\CoIDE\workspace\testowy2\testowy2\Debug\obj
   [cc] 12 total files to be compiled.
   [cc] arm-none-eabi-gcc -mcpu=cortex-m4 -mthumb -Wall -ffunction-sections -g -O0 -c -DSTM32F407VG -DSTM32F4XX -DUSE_STDPERIPH_DRIVER -D__ASSEMBLY__ -ID:\CooCox\CoIDE\workspace\testowy2 -ID:\CooCox\CoIDE\workspace\testowy2\cmsis_boot -ID:\CooCox\CoIDE -ID:\CooCox\CoIDE\workspace\testowy2\cmsis_lib\include -ID:\CooCox\CoIDE\workspace\testowy2\cmsis -ID:\CooCox\CoIDE\workspace\testowy2\cmsis_lib -ID:\CooCox\CoIDE\workspace D:\CooCox\CoIDE\workspace\testowy2\cmsis_lib\source\stm32f4xx_syscfg.c D:\CooCox\CoIDE\workspace\testowy2\pwm.c D:\CooCox\CoIDE\workspace\testowy2\dupa.c D:\CooCox\CoIDE\workspace\testowy2\cmsis_boot\startup\startup_stm32f4xx.c D:\CooCox\CoIDE\workspace\testowy2\main.c D:\CooCox\CoIDE\workspace\testowy2\cmsis_lib\source\stm32f4xx_rcc.c D:\CooCox\CoIDE\workspace\testowy2\cmsis_lib\source\stm32f4xx_adc.c D:\CooCox\CoIDE\workspace\testowy2\cmsis_lib\source\stm32f4xx_gpio.c D:\CooCox\CoIDE\workspace\testowy2\cmsis_boot\system_stm32f4xx.c D:\CooCox\CoIDE\workspace\testowy2\cmsis_lib\source\stm32f4xx_exti.c D:\CooCox\CoIDE\workspace\testowy2\cmsis_lib\source\misc.c D:\CooCox\CoIDE\workspace\testowy2\cmsis_lib\source\stm32f4xx_tim.c
   [cc] Starting link
   [cc] arm-none-eabi-gcc -mcpu=cortex-m4 -mthumb -g -nostartfiles -Wl,-Map=testowy2.map -O0 -Wl,--gc-sections -LD:\CooCox\CoIDE\configuration\ProgramData\testowy2 -Wl,-TD:\CooCox\CoIDE\configuration\ProgramData\testowy2/arm-gcc-link.ld -g -o testowy2.elf ..\obj\stm32f4xx_syscfg.o ..\obj\pwm.o ..\obj\dupa.o ..\obj\startup_stm32f4xx.o ..\obj\main.o ..\obj\stm32f4xx_rcc.o ..\obj\stm32f4xx_adc.o ..\obj\stm32f4xx_gpio.o ..\obj\system_stm32f4xx.o ..\obj\stm32f4xx_exti.o ..\obj\misc.o ..\obj\stm32f4xx_tim.o
   [cc] ..\obj\main.o: In function `main':
   [cc] D:\CooCox\CoIDE\workspace\testowy2/main.c:336: undefined reference to `Nowafunkcja'
   [cc] collect2.exe: error: ld returned 1 exit status

main.c is quite long becouse i have some definitions of few long functions there, so I paste here only a part

 #include "stm32f4xx.h"
 #include "misc.h"
 #include "stm32f4xx_syscfg.h"
 #include "stm32f4xx_adc.h"
 #include "stm32f4xx_exti.h"


 #include "przerwania.h"//here is the problem
 #include "pwm.h"

int main(void)
{


    SystemInit();
    //IniDiody();
    //TimConfig();
    //NVIC_Config();
    //IniDiodyPWM();

    LEDInit();
    EXTILine0_Config();

    PWM2();//wiwo
    GPIO();//wiwo

    Nowafunkcja();//PROBLEM


    RCC_Konfiguracja_Adc12();

    GPIO_Configuration_Adc1();
    ADC1_Configuration();
    GPIO_Configuration_Adc1();
    GPIO_Configuration_Adc2();
    ADC2_Configuration();

    IniDiody(GPIO_Pin_14);
    IniTimerPrzerwanie1();


    while(1)
    {
         ADC_SoftwareStartConv(ADC1);
         ADC_SoftwareStartConv(ADC2);
         while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
         wynikADC1 = (float)ADC_GetConversionValue(ADC1);
         while(ADC_GetFlagStatus(ADC2, ADC_FLAG_EOC) == RESET);
         wynikADC2 = (float)ADC_GetConversionValue(ADC2);
         wartosc = (int)(wynikADC2 * 15);
         //doPWM=(((float)ADCResult) / 41);
         //wartosc = (int) doPWM;
         //TIM2->CCR3 = (int) doPWM;

         TIM3->CCR2 = 65535;
         TIM3->CCR1 = wartosc;//(int)(wynikADC2 * 15);
         wartoscPrescalera=(int)SystemCoreClock;
    }


}

and files: przerwania.h

#ifndef __przerwaniah
#define __przerwaniah



void Nowafunkcja(void);



#endif

przerwania.c

#include "przerwania.h"


void Nowafunkcja(void)
{
//nothing here - just for test
}

Do you have any idea what is the problem? I'm thinking about this since yesterday and its wird :/ I'll appreciate your help!

wiwo
  • 721
  • 1
  • 13
  • 18
  • It has been a long time since I worked with C, but looks like `przerwania.c` is not being compiled. This is consistent with the error message and the fact that you compile command line does not show such a file as input. – SJuan76 Jun 05 '14 at 20:54
  • to be honest I always have problems with compilers... do you maybe have ani idea what to do? – wiwo Jun 05 '14 at 20:56
  • 1
    look at coocox manual/tutorials? I have never used it, but probably you have a a way to add the file to the "project" or whatever term the IDE is using. – SJuan76 Jun 05 '14 at 20:58

1 Answers1

1

Take a look at the line under [cc] 12 total files to be compiled. When you added pwm.c, you also informed the compiler to include this file. You'll see it listed there. przerwania.c is not. If you add przerwania the same way you added pwm, your IDE will take care of making sure it is included in the build.

I'm not sure what your current file/folder structure looks like: http://www.coocox.org/CoIDE/Project_management_config.html can help you determine how to pull those new files into the build.

FWIW: The (anthropomorphized) compiler step says: Is this valid code? So it looks though your main.c, sees that you included przerwania.h, and comes to the conclusion that you correctly used the Nowafunkcja function (just matched the signature). Even though at this point, it has NOT looked into przerwania.c to find out what it does. The compiler goes on to do this for all of your files and keeps track of what functions are defined in each file. Note that it never found the definition Nowafunkcja, because the compiler never compiled przerwania.c. It did however find the declaration in the .h (because main.c told it exactly where to find the .h)

The linker then gets this stuff from the compiler, including what functions have been defined in all your .c files. That's the first point where something tries to answer the question "Now what code do I actually need to run when he asked me to Nowafunkcja()?". So that's the first point in the build when the tools realized, I never found code for Nowafunkcja in any of the .c files I was looking in.

So, I think that roughly answers "Why", but we need to know more about your project organization to give you a "fix" to make it work.

anregen
  • 1,578
  • 1
  • 13
  • 13
  • but the problem is that I didint do anything like more with pwm.c and pwm.h, just add #include "pwm.h" in main.c – wiwo Jun 05 '14 at 21:05
  • specifically, you may want to look at [the section about adding paths](http://www.coocox.org/CoIDE/Project_management_config.html#AddPaths). Could you explain your file/folder organization a little? My suspicion is that the new files are not in a folder where the compiler is looking. – anregen Jun 05 '14 at 21:17
  • thanks a lot for such long answer, but i have to admit that i just open a new project and made new files and copy all the code... now it works! – wiwo Jun 06 '14 at 02:15