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.

[参考译文] TMS320F2812:从 L1 重新定位到 M0-M1 以平稳使用 CSM 安全特性后的堆栈问题

Guru**** 2796425 points

Other Parts Discussed in Thread: TMS320F2812, CCSTUDIO

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1620704/tms320f2812-stack-issue-after-relocating-from-l1-to-m0-m1-to-use-csm-security-feature-gracefully

器件型号: TMS320F2812
主题: CCSTUDIO 中讨论的其他器件

我的项目目标是 TMS320F2812、我正在使用 CCSTUDIO 12.0 进行开发。 有一个现有的工作系统。 在添加 CSM 功能时、我将堆栈从 L1 移动到 M0-M1、之后系统在使用更多堆栈的特定实例中会遇到堆栈溢出问题。 请在下面找到有关早期可正常工作的器件和最新更新更改的栈配置。  

早期工作配置:

在 CCStudio 中通过链接器设置设置设置系统堆栈大小:0x400

为 F2812.cmd 链接器存储器文件中的栈分配了 L1 位置。 除分配的 0x400 大小之外、没有其他代码和数据使用该位置(仅为堆栈分配 2KB、而块的实际大小为 4KB)

RAML1       :origin = 0x009000、length = 0x000800  /*片上 RAM 块 L1 */

.stack        :> RAML1    PAGE = 1

最新更改的配置:

在 CCStudio 中通过链接器设置设置设置系统堆栈大小:0x400

在 F2812.cmd 链接器存储器文件中为栈分配了组合的 M0-M1 位置。  

RAMM01      :origin = 0x000000、length = 0x000800  /*片上 RAM 块 M0 */

.stack        :> RAMM01    PAGE = 1

请查看以下查询:

1.由于工作系统分配的堆栈为 2KB,我想保持相同的堆栈大小。 现在、对于 M0 和 M1 不同的存储器块、我是否可以分配组合 这两个块的 2KB 栈而不会出现任何问题? 用于分配相同内容的链接器.cmd 的代码片段是正确的?

2.如果正确分配了 2KB 组合 M0-M1、则 L1 上现有 2KB 栈正常运行时可能会出现什么问题。

3、在现有的 L1 为 2KB、块物理长度为 4KB 的设置中、如果特定情况下发生堆栈溢出、则不会产生任何问题、因为 L1 的实际长度为 4KB、没有其他器件和代码正在使用该块?

4.除了 M0 和 M1 之外,哪些非安全存储器可用于堆栈,特别是在启用 CSM 时?

5.我们能否将 L1 用作堆栈,而 CSM 安全性仍然启用?

6、同系列中的任何其他设备,其中从 CSM 安全块中省略了 L0 和 L1 ,使得现有的硬件占用空间不需要更改,并且对固件/驱动程序的微小更改是可管理的?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于工作系统分配的堆栈为 2KB、我想保持相同的堆栈大小。 现在、对于 M0 和 M1 不同的存储器块、我是否可以分配组合 这两个块的 2KB 栈而不会出现任何问题? 用于分配相同内容的链接器.cmd 的代码片段是正确的?

    是的、这会起作用、链接器会将其视为一个大存储器

    除了 M0 和 M1 之外、哪个非安全存储器可用于堆栈、尤其是在启用 CSM 时?

    此器件上没有其他非安全存储器、因此 M0/M1 是唯一的选项

    [quote userid=“687071" url="“ url="~“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1620704/tms320f2812-stack-issue-after-relocating-from-l1-to-m0-m1-to-use-csm-security-feature-gracefully 我们是否可以将 L1 用作栈并且 CSM 安全性仍然启用?

    如果您的代码从非安全存储器(即 M0/M1/H0)执行、则在 CSM 处于活动状态时、此存储器的读取将失败。  如果代码从安全存储器(如 L0 或闪存)执行、那么没关系。

    [quote userid=“687071" url="“ url="~“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1620704/tms320f2812-stack-issue-after-relocating-from-l1-to-m0-m1-to-use-csm-security-feature-gracefully 同一系列中的任何其他器件、它从 CSM 安全模块中省略了 L0 和 L1、使得现有的硬件占用空间不需要更改、并且与固件/驱动程序有关的微小更改是可管理的?

    您必须迁移到较新的器件(如 F2837x)、从而为不同的存储器组提供可配置的 CSM 保护。

    是否可以确定加载代码中如此大量的栈?  M0 或 M1 是否 通过即时指针在代码中间接用于数组存储等?

    此致、

    Matthew

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

    感谢您的快速答复!

    关于“M0 或 M1 在您的代码中间接使用“、有任何关于如何快速找到这个问题的建议吗? 我认为存储器映射文件包含我们在 F2812.cmd 存储器链接器文件中分配的内容、而没有为 M0 和 M1 分配其他段。 是否知道如何快速检查?

    我将检查栈使用情况并返回。

    此外、连接到 ZONE6 的外部 SRAM 是否可用于堆栈?

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

    是的、.map 文件会快速告诉您 M0/M1 是否会用于其他任何用途。

    另外、连接到 ZONE6 的外部 SRAM 是否可用于堆栈?

    我不相信、SP(栈指针)的长度只有 16 位、区域 6 地址范围 (0x10000) 太远以至于无法到达。  不过、看起来您可以将其连接到区域 0 或区域 1。

    此致、

    Matthew