c - 请对 Tasking Tricore Compiler 显示的以下错误提出建议

标签 c assembly microcontroller microc

<分区>

我为 Tricore Controller 写了一个 C 程序,编译后我得到了下面的错误消息,我实际上无法弄清楚。您能提供一些意见吗?

我能猜到它与内存层次结构有关,但仍然无法找出实际问题。

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 微 Controller 编写的。

最佳答案

我不知道 Tricore Controller ,但这看起来你已经超出了某个限制。我假设此 Controller 的资源非常有限,并且构建过程会检查您是否没有超出它们。

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]; 的大小可能是主要问题。

关于c - 请对 Tasking Tricore Compiler 显示的以下错误提出建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14152056/

相关文章:

c++ - 有没有办法删除 C 宏中的引号?

windows - Windows 上的 LPT 控制

microcontroller - 具有32MX4入门指南的MRF24WB0MA WiFi

c - 访问冲突读取位置 0x000000xx - c 结构属性 - Visual Studio

c - 在 C 中重用地址空间?

assembly - BIOS int 13h 无法读取第一条磁道

linux - x86 汇编 (Linux) stdin 读取系统调用返回 1,无数据输入

microcontroller - PIC32MX 无法更改选择的 TRIS 位

c++ - 创建并链接到从旧 DLL 文件生成的 .lib 文件

assembly - 如何用68k语言制作一个if-else控制结构?