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.

[参考译文] MSP430FR5994:在 FRAM 中保存一个34K 字节阵列

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1212695/msp430fr5994-save-a-34k-byte-array-in-fram

器件型号:MSP430FR5994

我想将一个34K 字节的映像保存到256K FRAM、但是我的编译器给出以下错误:

第169行:错误#10099-D:程序无法放入可用内存中、或者该段包含的调用站点需要无法为此段生成 trampoline。 对齐放置在".cinit"段大小0x68d9中失败。  可用存储器范围:

我从来没有遇到过 "trampoline"或 Cinit 以前.   

我猜我会跨越某种页面边界吗?

可以存储一个34K 字节的数组吗?

我像这样创建了我的缓冲区

#pragma SET_DATA_SECTION (".fram_vars")//告诉编译器将缓冲区放在 FRAM 中
unsigned char display_buffer[33808]={.......................... 数据、数据............}

您可以帮助我或向我指出一些能够解释您需要做什么的文献吗?

谢谢

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

    是否有一个关闭的 SET_DATA_SECTION pragma? 《CCS 编译器用户指南》(SLAU132Y)第5.11.30节中的语法显示了正确的用法。 由于这是一段代码、无法判断您是否正确使用它。 对于单个变量、 更干净的做法是改用 DATA_SECTION pragma。

    我假设您没有修改链接器(.cmd)文件来定义"fram_vars"应该位于何处?

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

    谢谢 Seth

    我的确有结束语句、但我没有使用  "fram_vars"修改.cmd 文件

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

    您遇到的一个问题就是 新项目、"display_buffer"占据了 FRAM 段的69%。 由于您似乎还要使用您在上面共享的代码片段为缓冲区设置初始值、因此所有这些值都必须存储在".cinit"段中、以便可以在 C 运行时初始化期间填充这些值。 该初始数据会进行压缩、但仍会占用空间。 遗憾的是、".cinit"与"display_buffer"分配到的同一 FRAM 段中、

    打开 lnk_msp430fr5994.cmd 文件。 向下滚动一点、直到找到 SECTIONS 指令;您将看到一些声明、例如".cinit"、".text:_isr"等 在同一个块中、按照类似的格式添加".fram_vars"条目、但也允许其适应213k FRAM2段。

    由于这是如此大的内存块、您还需要更改项目设置、以便它能够实际正确构建。

    "Project"->"Properties"->"Build"->"MSP430 Compiler"->"Processor Options"

    确保将数据内存模型设置为两者之一 受限 ,并将 near_data 设置为  

    这将允许您的程序进行编译和链接。

    [编辑]:附录、如果启用了 MPU、您可能仍会遇到问题。 查看此帖子: https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/589551/reading-and-writing-to-fram2-on-msp430fr5994

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

    Seth、您好

    感谢您对所发生的事情的真正清楚的解释我感谢您对此的帮助

    我仍然收到错误。

    "../lnk_msp430fr5994.cmd"、第169行:错误#10099-D:程序无法装入可用内存、或者该段包含一个需要 trampoline 但无法为此段生成的调用站点。 对齐放置在".cinit"段大小0x68d9中失败。 可用存储器范围:

    FRAM 大小:0xbf80未使用:0x3b4c 最大空洞:0x3b4c

    我的编辑:


    #pragma SET_DATA_SECTION (".display_buffer")  
    unsigned char display_buffer[33808]={0X41,0X10,0X82,0X00,0X82,0X00,0X1,0X1B,............................... };

    #pragma Set_data_section()    

    谢谢  

    奈杰尔

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

    Seth、您好

    感谢您对所发生的事情的真正清楚的解释我感谢您对此的帮助

    我仍然收到错误。

    "../lnk_msp430fr5994.cmd"、第169行:错误#10099-D:程序无法装入可用内存、或者该段包含一个需要 trampoline 但无法为此段生成的调用站点。 对齐放置在".cinit"段大小0x68d9中失败。 可用存储器范围:

    FRAM 大小:0xbf80未使用:0x3b4c 最大空洞:0x3b4c

    我的编辑:


    #pragma SET_DATA_SECTION (".display_buffer")  
    unsigned char display_buffer[33808]={0X41,0X10,0X82,0X00,0X82,0X00,0X1,0X1B,............................... };

    #pragma Set_data_section()    

    谢谢  

    奈杰尔

    阅读更多内容后、我找到一篇包含示例的 TI 博客。  现在、FRAM 中有115208字节、我的 LCD 上有一个外观精美的位图。

    我做过这样的事:

    #pragma persistent(display_buffer)
    unsigned char display_buffer[115208]={0X010X10、0XF0、0X00、0XF0、0X00、0X010x1B、...}

    已取消勾选启用存储器保护单元

    添加了.TI.servant 的注释

    添加了以下内容:

    设置此项: