2014-06-05 4 views
2

내 학교의 stm32f4 프로젝트에서 일하고 있습니다. 임 CooCox IDE를 사용하여."알 수없는 이유는 무엇입니까?

"main.c"가 아닌 "przerwania.c"및 "przerwania.h"라는 새 파일을 추가하려고합니다. 하지만 CooCox가 왜 나에게 오류를 보이는지 모르겠다. 이전에 main.c의 일부 기능을 pwm.c로 옮기고 싶었습니다. 그러나 나는 새로운 파일을 만들고 싶다. 나는 더 많은 기능을 가지고있다. CooCox에서

오류는 다음과 같이 :

[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를 꽤 오랫동안 내가 거기에 약간 긴 일부 기능 정의가 렸기 때문에, 그래서 내가 여기에 일부에만 붙여

#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; 
    } 


} 

및 파일 : przerwania.h

#ifndef __przerwaniah 
#define __przerwaniah 



void Nowafunkcja(void); 



#endif 

przerwania.c

#include "przerwania.h" 


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

어떤 점이 좋을까요? 어제부터 그 생각을하고 있어요./ 도와 주셔서 감사합니다!

+0

C에서 작업 한 이후 오랜 시간이 걸렸지 만 'przerwania.c'가 컴파일되지 않는 것 같습니다. 이것은 오류 메시지와 일치하며 명령 행을 컴파일하면 입력과 같은 파일이 표시되지 않습니다. – SJuan76

+0

솔직히 말해서 나는 항상 컴파일러에 문제가있다. 어쩌면 어떻게 할 것인가? – wiwo

+1

coocox 설명서/자습서를 살펴보십시오.필자는 한번도 사용한 적이 없지만, 아마도 "프로젝트"나 IDE가 사용하는 용어에 파일을 추가하는 방법이있을 것입니다. – SJuan76

답변

1

[cc] 12 total files to be compiled. 을 추가하십시오. pwm.c를 추가 할 때 컴파일러에게이 파일을 포함하도록 알려 주셨습니다. 거기에 나열된 것을 볼 수 있습니다. przerwania.c는 그렇지 않습니다. pwm을 추가 한 것과 같은 방법으로 przerwania를 추가하면 IDE가 해당 빌드에 빌드되었는지 확인합니다.

현재 파일/폴더 구조가 어떤 모양인지 잘 모르겠습니다. http://www.coocox.org/CoIDE/Project_management_config.html은 새 파일을 빌드로 가져 오는 방법을 결정하는 데 도움이됩니다.

FWIW : (anthropomorphized) 컴파일러 단계는 다음과 같이 말합니다. 유효한 코드입니까? 따라서 main.c에 보이는 것처럼, przerwania.h가 포함되어 있고, Nowafunkcja 함수를 사용했음을 결론지었습니다 (서명과 일치했습니다). 비록이 시점에서, 그것이 무엇을하는지 알아 내기 위해 przerwania.c를 들여다 보지 않았습니다. 컴파일러는 모든 파일에 대해이 작업을 수행하고 각 파일에 정의 된 기능을 추적합니다. 컴파일러가 przerwania.c를 컴파일하지 않았기 때문에 Nowafunkcja 정의를 찾지 못했습니다. 그러나 .h에서 선언문을 찾았습니다. (main.c가 .h를 찾을 위치를 정확히 알려주기 때문에)

링커는 모든 .c에 정의 된 기능을 포함하여 컴파일러에서이 내용을 가져옵니다. 파일. 그것이 "Nowafunkcja()에 나에게 물었을 때 실제로 실행해야하는 코드는 무엇입니까?"라는 질문에 대한 답을 얻는 첫 번째 포인트입니다. 도구가 깨달을 때 빌드의 첫 번째 지점이 되었기 때문에 내가보고 있던 .c 파일에서 Nowafunkcja의 코드를 찾지 못했습니다.

그래서 "대략"라고 대답 할 필요가 있습니다. 당신의 프로젝트 조직에 대해 더 많이 알고 그것을 작동하게하는 "수정"을하십시오.

+0

하지만 문제는 내가 pwm.c와 pwm.h로 더 많은 것을 할 수 있다는 것입니다. main.c에 #include "pwm.h"를 추가하면됩니다. – wiwo

+0

특히 [경로 추가에 관한 섹션] (http://www.coocox.org/CoIDE/Project_management_config.html#AddPaths). 파일/폴더 구성에 대해 조금 설명해 주시겠습니까? 내 의심은 새 파일이 컴파일러가 찾고있는 폴더에 없다는 것입니다. – anregen

+0

그런 긴 대답에 대해 고맙습니다.하지만 저는 새로운 프로젝트를 열고 새로운 파일을 만들고 모든 코드를 복사했음을 인정해야합니다 ... 이제 작동합니다! – wiwo

관련 문제