单片机/MCU论坛
直播中

张勇

7年用户 1460经验值
私信 关注
[问答]

TLE9893如何配置堆栈溢出检测?

我需要了解如何配置堆栈溢出检测。
我从 TLE9893 用户手册中收集到的

  • 需要启用用户堆栈溢出保护 (USOP),
  • 需要通过上限和下限 DSRAM 地址来建立所谓的保护频段
我的 startup_tle989x.s 文件为堆栈分配的大小为 512 字节:

此外,在主入口点,堆栈指针寄存器的值为 0x180023b0,所以我猜这是堆栈指针的初始值。
我写了以下代码来实现 USOP 用于测试目的:


因此,根据我的理解,警戒带的下限为0x18002 320 ,而上限为0x18002 390,总共为112字节。
现在,正如链接器报告的那样,最大堆栈使用量至少为 144 字节:


因此,可以得出结论,堆栈指针必须位于我定义的保护带区域内,但实际上没有检测到堆栈溢出!


回帖(1)

lotusp

2024-1-19 17:50:58
根据您提供的信息,以下是如何配置堆栈溢出检测的步骤:

1. 打开 TLE9893 用户手册,找到有关启用用户堆栈溢出保护 (USOP) 的章节。阅读相关内容以了解如何进行配置。

2. 在您的 startup_tle989x.s 文件中找到堆栈分配的大小。根据您提供的信息,堆栈大小为 512 字节。

3. 在主入口点处,查找堆栈指针寄存器的初始值。根据您提供的信息,堆栈指针的初始值为 0x180023b0。

4. 根据用户手册中的说明,通过上限和下限 DSRAM 地址来建立保护频段。根据您的理解,下限为 0x18002320,上限为 0x18002390,共计 112 字节。

5. 根据链接器报告的最大堆栈使用量,确定真正的堆栈使用量。根据您提供的信息,最大堆栈使用量至少为 144 字节。

6. 根据用户手册的说明,根据堆栈使用量将保护频段适当地移动到更高的地址位置。根据您提供的信息,您可能需要将保护频段上限移动到更高的地址。

7. 更新您的代码,将正确的保护频段地址值设置为 USOP 寄存器。

8. 编译和链接您的代码,并将生成的可执行文件烧录到 TLE9893。

9. 运行代码并监控堆栈溢出情况。如果有堆栈溢出发生,您将收到警告或错误消息。

请注意,这只是一个大致的步骤指南,具体的配置步骤可能会根据您的环境和需求而有所不同。强烈建议参考 TLE9893 用户手册中的详细说明来正确配置堆栈溢出检测。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分