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:读取和写入 FRAM2

Guru**** 1623435 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/1250164/msp430fr5994-reading-and-writing-to-fram2

器件型号:MSP430FR5994

您好!  

我需要一些帮助来修改  lnk_msp430fr5994.cmd 文件、以便能够将 FRAM2用于 persistent 变量。  

我在这里已经看到了这个主题: 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

但所描述的解决方案并不是更灵活的解决方案。 我想实施  、"修改链接器文件中控制 MPU 设置的一些区域、使其适应读取/写入区域的增长/收缩"

谢谢!

LC

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

    请检查这是否可以提供一些帮助:

    https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/643170/ccs-msp430fr5969-understanding-mpu

    www.ti.com/.../slaa628b.pdf

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

    感谢您的回答。 不幸的是、我仍然迷路了。  

    我看不出可以采用哪种策略、因为 我的 代码(.text) 太大以至于无法放入 FRAM 中 、所以我不能简单地使用 FRAM2仅用于 TI.persistent、.TI.persistent 和 .text 需要共享 FRAM2。  OR/和、我需要找到一种方法 在 FRAM 和 FRAM2之间拆分 TI.persistent。

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

    如果您可以使用此方法直接将变量保存到 FRAM2位置、请进行综合检查?

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

    我建议你将高端 FRAM2细分为一个新的内存段、并将 TI.persistent 字段。 然后使用 CCS MPU 编辑器使这个较高部分为 RW (读取/写入)。 这不是非常动态的、但它允许您根据 MPU 的需要对齐它。

    这里讨论的是 NOINIT、但原理是相同的:

    https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1219351/msp430fr6007-large-fram-arrays/4602954?tisearch=e2e-sitesearch&keymatch=fram%2520noinit#4602954

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

    好的、让我们想象一下、我将 FRAM2拆分成 FRAM2、例如 FRAMPERSISTENT、我不知道如何为这个新存储器段提供 RW 访问权限。 因为根据我的理解、只有3个段:RW、R 和 RX、它们 必须是连续的。

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

    这3个段可以彼此独立地设置访问和边界。 (段始终从低内存到高内存编号为1-3。) 我建议您打开 MPU 编辑器[Project->Build Settings->General->MPU[tab]"以查看其功能。  

    传统的做法是将第1段设置为 R 或 RW (用于 Persistent 等人)。 以及段2 RX (代码)、但这不是必需的。

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

    好的,所以我做了这个:

    ...

    ...

    ...

    它似乎是工作的,但正如你所说,它不是 很动态...

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

    1)不,它不是非常动态,但它非常简单(和容易得到正确)。 一个动态/复杂度更高的解决方案可以在用于自动配置 MPU 的连接器/C-库合作机制内工作。 几个月前,我整理了一下,并得出结论,我只会尝试,如果我是非常低的记忆。

    2)通常我建议不要将.cio 和.sysmem 移动到高(>64KB)的内存,主要是因为我不知道有什么依赖性。 (我认为.cio 用于 stdio 半主机,特别是 printf()。 我不知道是谁使用.sysmem。) 说着,我就朝厨房走去。

    3) 3) MPU 要求1K (0x400)对齐;低位不会存储在任何位置。 我建议您将 FRAM3的基地址设置为与 MPU 编辑器所需的地址(0x25C00)相匹配。 实际上、您(可能)将0x390字节的代码存储在 MPU 段3中、这是 RW 而非 RX。  

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

    好的、感谢您的帮助。