This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TMS570LC4357:大数组/内存不足错误

Guru**** 2609955 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/764967/ccs-tms570lc4357-big-arrays-out-of-memory-error

器件型号:TMS570LC4357

工具/软件:Code Composer Studio

您好!

我的计划如下:

#include 
#include 
#include 

#define MLEN 59;

int main (void)
{

//unsigned char SK[crypto_SECRETKEBYTES];
volatile unsigned char pk[1600];
volatile unsigned char SM[1600];

unsigned long smlen = 85;
unsigned long mlen = 54;
unsigned char mo[5];
//unsigned char mo[MLEN+crypto_Bytes]="";

//Randombytes (mi、MLEN);

//crypto_sign_keypair (pk、sk);
//crypto_sign(sm, smlen, mi,59,sk);

int valid = crype_sign_open (mo、&mlen、SM、smlen、pk);

返回0;
}

它耗尽存储器、注册 DFSR 表示超出范围的地址。  

如何解决此问题?

最棒的

Soundes。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我想您的堆栈已经用完了。  所有这些数组都在堆栈上。  也许函数 crypto_sign_open 也使用大量堆栈。

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Georg、
    我的程序的堆栈为0x99999999。
    我仍然有同样的问题!
    您认为使用 malloc/calloc 创建表可以解决问题吗?
    最棒的
    Soundes。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我假设您没有为堆栈分配0x99999999字节。  这就是您为堆栈分配了大量空间的说法、问题仍然存在。

    [引用 user="Soundes Marzougui">内存不足,DFR 注册表示超出范围的地址。  [/报价]

    我不熟悉 DFSR 寄存器及其含义。  我将把这条线程转到可以帮助您解决此问题的器件专家处。

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Soundes:

    您可以尝试乔治建议的更大的堆栈尺寸吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 QJ、
    我已尝试将0x00030000作为堆栈。 堆栈使用情况表明、我的程序只需要10400字节。 但是、每次分配行李寄存台时、它都会变成无效的存储器范围!
    投注、
    Soundes。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Soundes:

    请更改 sys_core.asm 中的栈大小:

    userSp .word 0x08000000+0x00001000
    svcSp .word 0x08000000+0x00001000+0x00000100
    fiqSp .word 0x08000000+0x00001000+0x00000100+0x00000100
    irqSp .word 0x08000000+0x00001000+0x00000100+0x00000100+0x00000100
    中止 Sp .word 0x08000000+0x00001000+0x00000100+0x00000100+0x00000100+0x00000100+0x00000100
    undefSp .word 0x08000000 + 0x00001000+0x00000100+0x00000100+0x00000100+0x00000100+0x00000100+0x00000100

    如果您的代码在用户模式下执行、请增加所有行中的第2个数字(0x00001000)。 如果您的代码在 SVC 模式下运行、请增加行中的第3个数字(0x00000100)。

    cmd 文件中定义的堆栈内存大小应该大于堆栈大小(USER+Svc+Fiq+IRQ+ABORT+undef)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢!!

    它最终解决了我的问题。