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.

[参考译文] F28M35H52C:F28M35H52C -程序将不适合可用内存

Guru**** 2535750 points
Other Parts Discussed in Thread: CONTROLSUITE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/653441/f28m35h52c-f28m35h52c---program-will-not-fit-into-available-memory

部件号:F28M35H52C
主题:controlSUITE中讨论的其他部件

大家好,

我在代码中遇到以下错误,  


#1.0099万-D程序将不适合可用内存。对".econst"节大小0x9b4页0进行定位/阻止失败。 可用内存范围:.ccsproject /sourcecode_C28第172行,外部位置:d:\ti\controlSUITE\device_support\f28m35x\v220\F28M35x_common\cmd\F28M35x_generic_wshared_C28_flash.cmd C/C++问题

根据我的理解,代码不是太大,不能使闪存充满。  

在项目属性->总成-> 链接器命令文件  -F28M35x_Headers_nonBIOS.cmd中

此链接程序文件是否与上述问题有任何关系。

此致,

Sandeep

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

    在对上面已解决的代码的以下部分进行注释后,

    此外,在对该行进行注释后,该行的确切含义是什么

    #ifdef _flash
    //将时间关键代码和闪存设置代码复制到RAM
    //这包括以下函数:InitFlash();
    // RamfuncsLoadStart,RamfuncsLoadSize和RamfuncsRunStart
    //符号由链接器创建。 请参阅设备.cmd文件。
    memcpy (&RamfuncsRunStart,&RamfuncsLoadStart,(size_t)&RamfuncsLoadSize);

    //呼叫闪存初始化以设置闪存等待
    //此功能必须驻留在RAM中
    InitFlash();
    #endif

    但我仍然不清楚,上面几行的目的是什么,以及如何使用它。 在注释代码发生了什么之后。


    此致,
    Sandeep
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    该代码将功能从闪存复制到RAM。
    是按控制套件中的方式重新编译代码,还是编译自己的代码。

    看起来其中一个部分溢出。您是否可以共享地图文件以便我更好地了解您的代码。
    您可以尝试将FLASHA和FLASHC部分组合在一起,以快速检查是否可以解决您的问题。

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

    您好,

    我在下面的行中进行了评论,并增加了代码中的数组大小,但仍然存在错误。

    #ifdef _flash

    memcpy (&RamfuncsRunStart,&RamfuncsLoadStart,(size_t)&RamfuncsLoadSize);

    InitFlash();

    #endif

    我已添加地图文件。

    此致,

    Sandeepe2e.ti.com/.../SourceCode_5F00_C28.7z

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

    名称 来源 长度 已使用 未使用的属性填充

    FLASHG 0.12万00 000080000万08000 0000000080亿00 000080000万08000 RWIX0.8万 RWIX
    FLASHF 0.128万00 000080000万08000 0000000080亿00 000080000万08000 RWIX0.8万 RWIX
    FLASHE 0.13万00 000080000万08000 0000000080亿00 000080000万08000 RWIX0.8万 RWIX
    FLASHD 0.138万00 000020000万02000 0000006a0.2万 0000006a 00001f960.0006万 00001f96 RWIX0.0001万 RWIX
    FLASHC 0013a000 000020002亿00 000000000万00 000020000万02000 RWIX0.2万 RWIX
    FLASHA 0013e000 00001f80000001f80 00001f55000001f55 0000002b50000002b RWIX

    如果你在这里看到FLASHC,E,F,G是完全没有使用的。你可以尝试在这里使用。
    首先,您能否将FLASHC和FLASHA部分合并并尝试。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好Baskaran,

    在本例中,先前 使用的F28M35x_generic_wshared_C28_flash.cmd文件仅提及256kb闪存,而仅使用16k,因此我从项目中删除了此cmd文件,并在项目中添加了F28M35H52C1_c28 .cmd文件。此cmd文件提及512kb闪存。  

    我在 F28M35H52C1_c28 .cmd中做了一些更改,就像你提到的我使用了未使用的内存一样。这解决了内存不足的问题。

    但是在这一变化之后,ramfunction不能正常工作,ADC初始化中使用的延迟也不能正常工作。我认为ADC所使用的微秒延迟不能正常工作,因为它需要ramfunction。 因此,请告诉我,我必须进行哪些更改才能使ramfunction发挥作用。  

     

    此致,

    Sandeep

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

    TI团队中的任何其他人都可以在这方面提供帮助?

    谢谢,此致,
    Sandeep
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Sandeep,
    很抱歉错过了这个主题。 您是否可以共享修改后的链接命令文件。

    您之前还提到您已经对该代码进行了注释。现在是否未注释?

    #ifdef _flash
    memcpy (&RamfuncsRunStart,&RamfuncsLoadStart,(size_t)&RamfuncsLoadSize);
    InitFlash();
    #endif

    此致
    Baskaran