2013-01-04 20 views
2

我爲Tricore控制器編寫了一個C程序,編譯後我得到了我實際上無法弄清的下面的錯誤消息。你能否提供一些建議?請給出一個關於任務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

Yup,181 * 4 * 2 *(4 * 4 * 2 * 4 + 8 + 4)大致爲200kB。 –

相關問題