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.

[参考译文] MSP430FR6928:FRAM 用作 RAM、从而增加 RAM 面积问题

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1041551/msp430fr6928-fram-usage-as-ram-increasing-ram-area-problem

器件型号:MSP430FR6928

您好!

我需要为项目提供更多 RAM 空间。 我应用了文档“slaa628b.pdf”中描述的方法,但有些问题是错误的。

在链接器中定义 RAM2、如下所示;

存储器

   TINYRAM                :origin = 0x0006、length = 0x001A

   外设_8位       :origin = 0x0020、length = 0x00E0

   peripherals_16BIT      :origin = 0x0100、length = 0x0100

   RAM                    :origin = 0x1C00,length = 0x0800

   RAM2                   :origin = 0x2400、length = 0x0800

   INFOA                  :origin = 0x1980,length = 0x0080

   INFOB                  :origin = 0x1900,length = 0x0080

   INFOC                  :origin = 0x1880,length = 0x0080

   INFOD                  :origin = 0x1800,length = 0x0080

   FRAM                   :origin = 0x4400,length = 0xBB80

 

。 。 。

 

构建后、一切看起来都正常、存储器配置由下面的映射文件给出;

 

存储器配置

 

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

------------  ----  ------  ----  ----  --------  

 TINYRAM              00000006  0000001a 00000000 0000001a RWIX

 外设_8位     00000020  000000e0 00000000 000000e0 RWIX

 外设_16BIT    00000100  00000100 00000000 00000100 RWIX

 INFOD                00001800  00000080 00000000 00000080 RWIX

 INFOC                00001880  00000080 00000000 00000080 RWIX

 INFOB                00001900  00000080 00000000 00000080 RWIX

 INFOA                00001980  00000080 00000000 00000080 RWIX

 RAM                  00001c00  00000800 00000638 000001c8 RWIX

 RAM2                 00002400  00000800 00000236 000005ca RWIX

 FRAM                 00004400  0000bb80 000068b2 000052ce RWIX

 。 。 。

但是、代码会崩溃、从而跳转不在代码范围内的地址。 我调试了代码并在内存浏览器中调查了 RAM2地址,我看到这些新地址范围(0x2400-0x2C00)被3FFF (JUMP)填充,所以代码从这些地址跳转到范围外的地址。

 

我错过了什么? 为什么会发生这种情况?

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

    0x3fff 是从没有任何内容的地址读取时得到的结果。 这由器件存储器映射确认。

    只有如此多的 SRAM 可用、您无法对手臂进行波形波形波形和创建更多内容。 也许您应该尝试使用 FRAM。

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

    我意识到了我的错误。 非常感谢。 如果我按如下方式配置存储器、它就可以正常工作。 我 假定之前的地址范围(0x2400-0x2C00)为 FRAM。 这是我的错误。

    存储器

    TINYRAM:origin = 0x0006、length = 0x001A
    外设_8位:origin = 0x0020、length = 0x00E0
    peripherals_16BIT:origin = 0x0100、length = 0x0100
    RAM:origin = 0x1C00,length = 0x0800
    RAM2:origin = 0x4400、length = 0x0800
    INFOA:origin = 0x1980,length = 0x0080
    INFOB:origin = 0x1900,length = 0x0080
    INFOC:origin = 0x1880,length = 0x0080
    INFOD:origin = 0x1800,length = 0x0080
    FRAM:origin = 0x4C00,length = 0xB380