2013-01-04 2 views
2

Tricore 컨트롤러 용 C 프로그램을 작성한 후 컴파일을 한 후 실제로 알아 내지 못하는 아래 오류 메시지가 나타납니다. 입력을 좀 주시겠습니까?Tasking Tricore 컴파일러에 의해 표시된 아래의 오류에 대한 제안을하십시오.

메모리 계층과 관련된 몇 가지 사항을 추측 할 수 있지만 실제 문제를 파악할 수는 없습니다.

Error Messages: 
ltc I455: requirement: 193K (0x304c8) bytes of RAM area in space spe:tc:linear 
amk E451: make stopped 
ltc I456: section type: group restriction - clustered 
ltc I457: .bss.Pro2.group (60) (0x30140 bytes) 
ltc I457: .bss._dbg_request.libcs_fpu (418) (0x14 bytes) 
ltc I457: .bss.Pro2.rocount (61) (0x2d4 bytes) 
ltc I457: .bss.stdin_buf.libcs_fpu (273) (0x50 bytes) 
ltc I457: .bss.stdout_buf.libcs_fpu (274) (0x50 bytes) 

번호 :

/* 
============================================================================ 
Name  : hough.c 
Author  : 
Version  : 
Copyright : Your copyright notice 
Description : Hello World in C, Ansi-style 
============================================================================ 
*/ 

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 
#define M 4 
#define N 4 
#define PI 3.14159265 
typedef struct point { 
    int x; 
    int y; 
} point; 
typedef struct points { 
    point points[M * N]; 
    double ro; 
    int pointCount; 
} points; 
int image[M][N] = { { 1, 1, 0, 1 }, { 1, 1, 0, 1 }, { 1, 1, 1, 1 }, 
     { 1, 0, 0, 0 } }; 
int i, j, k; 

points group[181][M * N/2]; 
int rocount[181]; 

int compare_float(double f1, double f2) { 
    float precision = 0.000001; 
    if (((f1 - precision) < f2) && ((f1 + precision) > f2)) { 
     return 1; 
    } else { 
     return 0; 
    } 
} 

void insert(double ro, int x, int y, int angle) { 
    int loopcount; 
    int roflag = 0; 
    if (rocount[angle] == 0) { 
     group[angle][rocount[angle]].ro = ro; 
     group[angle][rocount[angle]].pointCount = 0; 
     group[angle][rocount[angle]].points[group[angle][rocount[angle]].pointCount].x = 
       x; 
     group[angle][rocount[angle]].points[group[angle][rocount[angle]].pointCount].y = 
       y; 
     group[angle][rocount[angle]].pointCount++; 
     rocount[angle]++; 
    } else { 
     for (loopcount = 0; loopcount < rocount[angle]; loopcount++) { 
      if (compare_float(group[angle][loopcount].ro, ro)) { 
       roflag = 1; 

       group[angle][loopcount].points[group[angle][loopcount].pointCount].x = 
         x; 
       group[angle][loopcount].points[group[angle][loopcount].pointCount].y = 
         y; 
       group[angle][loopcount].pointCount++; 
       break; 
      } 

     } 
     if (roflag == 0) { 
      group[angle][rocount[angle]].ro = ro; 
      group[angle][rocount[angle]].pointCount = 0; 
      group[angle][rocount[angle]].points[group[angle][rocount[angle]].pointCount].x = 
        x; 
      group[angle][rocount[angle]].points[group[angle][rocount[angle]].pointCount].y = 
        y; 

      group[angle][rocount[angle]].pointCount++; 
      rocount[angle]++; 
     } 
    } 
} 

int main(void) { 
    double ro; 
    point x1; 
    for (k = -90; k <= 90; k++) { 
     rocount[k + 90]; 
     for (i = 0; i < M; i++) { 
      for (j = 0; j < N; j++) { 
       if (image[i][j] == 1) { 
        ro = (i + 1) * cos(k * (PI/180)) 
          + (j + 1) * sin(k * (PI/180)); 
        insert(ro, i + 1, j + 1, k + 90); 

       } 
      } 
     } 

    } 
    for (k = -90; k <= 90; k++) { 

     for (i = 0; i < rocount[k + 90]; i++) { 
      printf("\n Angle :%d RO:%f \n", k, group[k + 90][i].ro); 

      for (j = 0; j < group[k + 90][i].pointCount; j++) { 
       printf("(x:%d,y:%d)", group[k + 90][i].points[j].x, 
         group[k + 90][i].points[j].y); 
      } 
     } 
    } 
    return EXIT_SUCCESS; 
} 

P.S : 코드가 TC1797 마이크로 컨트롤러 기입된다.

+0

코드하시기 바랍니다 .... !!! –

+0

위의 코드를 찾으십시오. 게시물에 코드를 포함 시켰습니다. – san6086

답변

1

Tricore 컨트롤러에 대해 잘 모릅니다 만 제한을 초과 한 것 같습니다. 나는이 컨트롤러가 매우 제한된 리소스를 가지고 있다고 가정하고 빌드 프로세스가 당신이 그들을 초과하지 않았는지 확인합니다.

requirement: 193K (0x304c8) bytes of RAM area in space spe:tc:linear은 193K를 너무 많이 사용했음을 의미해야합니다.
.bss.Pro2.group (60) (0x30140 bytes)은 대부분 BSS 섹션 (정적 초기화되지 않은 변수)에서 발생한다는 것을 의미합니다.

나는 수학을하지는 않았지만 points group[181][M * N/2];의 크기가 주요 문제 일 수 있습니다.

+0

넵, 181 * 4 * 2 * (4 * 4 * 2 * 4 + 8 + 4)는 대략 200kB입니다. –

관련 문제