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.

[参考译文] MSP430FR5964:代码一个更高内存段的问题(gt;0xFFFF)

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1025011/msp430fr5964-issues-with-code-an-higher-memory-segments-0xffff

器件型号:MSP430FR5964
主题中讨论的其他器件:MSP430F149

我正在将代码从旧 的 MSP430F149迁移到新的 MSP430FR5964。 由于这款较新的处理器具有更多的 IO 和更多的 RAM、因此第一个存储器"存储"(0000-FFFF)中的代码空间更小。 到目前 为止、我已设法通过将代码(.text)放置在第一个"存储区"(FRAM)中、并将常量(.const)放置在第二个"存储区"(0x10000-0x1FFFF)(FRAM2)中来缓解这种情况。

然后代码不再适合第一个段、所以我觉得很简单:我将常量放置在 FRAM 中、将代码放置在 FRAM2中。 然后我的程序停止工作。

因此、我尝试了另一种方法来尝试隔离和了解 Group 链接器指令的问题、例如:

    GROUP 0x10000:
    {
        .framework
        {
        	"Constants.obj"(.text)
        	"TActor.obj"(.text)
            ...
        }
    }

这适用于某些模块、而不适用于其他模块。

我已经能够识别一个案例、在这个案例中、对一个对象方法的调用工作两次、并且第三次它似乎跳转到地址0xFFFFFFF。 该处理器使用(看起来) VMA 中断标志重新启动。 这还不是很清楚到底发生了什么...

我的理解是、代码与位置无关、至少在(TI)编译器文档中有相关说明。 当然、我负责将 ISR 放在第一个内存段中。

是否有将代码从较低的内存段迁移到较高内存段的指南? 这不是一个傻瓜吗? 是否有任何编译器设置(代码(大)和数据(受限)存储器模型除外)应该处理? 感谢您的任何帮助...

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

    哦,我亲爱的,我可以这么愚蠢。 原因是我的程序会部分擦除第二个段以存储数据。 现在我调整了该数据区域的设置、一切都好了...