2012-07-18 5 views
0

아주 간단한 프로그램을 컴파일하려고하는데 왜 컴파일되지 않는지 이해할 수 없습니다. 여기 내 프로그램이 있습니다 :C30 PIC 컴파일러가 컴파일되지 않습니다. (MPLAB-X IDE)

/* General includes */ 
#include <stdio.h> 
#include <stdlib.h> 
#include <libpic30.h> 
#include <p33FJ128GP804.h> 

#include "RunLengthAlgorithm.h" 
//#include "RunLengthAlgorithm.c" 

int main(void) { 

    int n; 
    char source[10001]; 
    char target[100]; 

    for(n = 0; n < 1000; ++n){ 
     source[n] = "A"; 
    } 
    for(n = 1000; n < 2000; ++n){ 
     source[n] = "B"; 
    } 
    for(n = 2000; n < 3000; ++n){ 
     source[n] = "C"; 
    } 
    for(n = 3000; n < 4000; ++n){ 
     source[n] = "D"; 
    } 
    for(n = 4000; n < 5000; ++n){ 
     source[n] = "E"; 
    } 
    for(n = 5000; n < 6000; ++n){ 
     source[n] = "F"; 
    } 
    for(n = 6000; n < 7000; ++n){ 
     source[n] = "G"; 
    } 
    for(n = 7000; n < 8000; ++n){ 
     source[n] = "H"; 
    } 
    for(n = 8000; n < 9000; ++n){ 
     source[n] = "I"; 
    } 
    for(n = 9000; n < 10000; ++n){ 
     source[n] = "J"; 
    } 
    source[10001] = '\0'; 

    RLEncode(&source, &target); 

    while(1); 
    return (EXIT_SUCCESS); 

} 

.h 및 .c 파일이 프로젝트에 추가되었습니다.

#ifndef RUNLENGTHALGORITHM_H 
#define RUNLENGTHALGORITHM_H 

void RLEncode (char *source, char *target); 

#endif 

그리고이 .c 파일 :

#ifndef RUNLENGTHALGORITHM_C 
#define RUNLENGTHALGORITHM_C 
void RLEncode (char *source, char *target){ 
    int n, k = 0; 
    for(n = 0; source[n] != '\0'; ++n){ 
     int length = 1; 
     while(source[n+1] != '\0' && source[n] == source[n+1]){ 
      ++length; ++n; 
     } 
     target[k++] = length; 
     target[k++] = source[n]; 
    } 
    source[n] = '\0'; 
} 

#endif 

나는 MPLAB-X IDE 파크 C30 컴파일러를 사용하고 그리고 그것은 나를이 오류 제공 :

CLEAN SUCCESSFUL (total time: 1s) 
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf 
make[1]: Entering directory `D:/Datos (Disco)/Electronica/Multi portatil/Run-Length Algorithm.X' 
make -f nbproject/Makefile-default.mk dist/default/production/Run-Length_Algorithm.X.production.hex 
make[2]: Entering directory `D:/Datos (Disco)/Electronica/Multi portatil/Run-Length Algorithm.X' 
Main.c: In function 'main': 
Main.c:24: warning: assignment makes integer from pointer without a cast 
Main.c:27: warning: assignment makes integer from pointer without a cast 
Main.c:30: warning: assignment makes integer from pointer without a cast 
Main.c:33: warning: assignment makes integer from pointer without a cast 
Main.c:36: warning: assignment makes integer from pointer without a cast 
Main.c:39: warning: assignment makes integer from pointer without a cast 
Main.c:42: warning: assignment makes integer from pointer without a cast 
Main.c:45: warning: assignment makes integer from pointer without a cast 
Main.c:48: warning: assignment makes integer from pointer without a cast 
Main.c:51: warning: assignment makes integer from pointer without a cast 
Main.c:55: warning: passing argument 1 of 'RLEncode' from incompatible pointer type 
Main.c:55: warning: passing argument 2 of 'RLEncode' from incompatible pointer type 
"C:\Program Files (x86)\Microchip\MPLAB C30\bin\pic30-gcc.exe" -g -omf=elf -x c -c -mcpu=33FJ128GP804 -MMD -MF build/default/production/Main.o.d -o **build/default/production/Main.o Main.c 
"C:\Program Files (x86)\Microchip\MPLAB C30\bin\pic30-gcc.exe" -g -omf=elf -x c -c -mcpu=33FJ128GP804 -MMD -MF build/default/production/RunLengthAlgorithm.o.d -o build/default/production/RunLengthAlgorithm.o RunLengthAlgorithm.c 
"C:\Program Files (x86)\Microchip\MPLAB C30\bin\pic30-gcc.exe" -omf=elf -mcpu=33FJ128GP804 -o dist/default/production/Run-Length_Algorithm.X.production.elf build/default/production/Main.o build/default/production/RunLengthAlgorithm.o build/default/production/RunLengthAlgorithm.o  -Wl,--defsym=__MPLAB_BUILD=1,-Tp33FJ128GP804.gld 
build/default/production/RunLengthAlgorithm.o(.text+0x0): In function `_RLEncode': 
: multiple definition of `_RLEncode' 
build/default/production/RunLengthAlgorithm.o(.text+0x0): first defined here 
c:\program files (x86)\microchip\mplab c30\bin\bin\..\bin/pic30-elf-ld.exe: Link terminated due to previous error(s).** 
make[2]: Leaving directory `D:/Datos (Disco)/Electronica/Multi portatil/Run-Length Algorithm.X' 
make[1]: Leaving directory `D:/Datos (Disco)/Electronica/Multi portatil/Run-Length Algorithm.X' 
**make[2]: *** [dist/default/production/Run-Length_Algorithm.X.production.hex] Error 255 
make[1]: *** [.build-conf] Error 2 
make: *** [.build-impl] Error 2 

BUILD FAILED (exit value 2, total time: 8s)** 

나는 이유를 이해하지 않습니다를 , 내 함수를 Main.c에 넣으면 #include "RunLengthAlgorithm.h"가 포함되지 않습니다. 그러나 작동하지만 파일을 포함하여 작동시키지 못합니다.

답변

0

확인 코드에 문제가 없습니다. 그것은 MPLAB-X v1.10의 버그 인 것 같습니다.

해결책 : MPLAB-X를 닫은 다음 다시 열면 올바르게 컴파일됩니다. 작동하지 않으면 http://www.microchip.com/forums/m627705.aspx에서 읽으십시오.

0

문제는 메모리 매핑과 관련이 있다고 생각합니다. 사용하는 프로세서 제품군에 따라 .gld 또는 .lkr 파일의 스택 크기를 다시 정의해야합니다. 매우 큰 메모리 위치를 가진 변수 소스를 선언 할 때 스택은 오버플로가 발생합니다.

0

이 기능은 함수를 "#include _your_func.h"하고 IDE> 프로젝트> 소스 파일> 기존 항목 추가를 사용하여 함수가 포함 된 파일을 수동으로 포함 할 때 발생합니다. 그 중 하나를 수행하기에 충분합니다.