公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

你好嵌入者,

我再次在这里寻求你的帮助! 这一次,我需要了解如何配置堆栈溢出检测。

我从 TLE9893 用户手册中收集到的

  • 需要启用用户堆栈溢出保护 (USOP),
  • 需要通过上限和下限 DSRAM 地址来建立所谓的保护频段

我的 startup_tle989x.s 文件为堆栈分配的大小为 512 字节:

FranzRibcek_0-1702562923133.png

此外,在主入口点,堆栈指针寄存器的值为 0x180023b0,所以我猜这是堆栈指针的初始值。

我写了以下代码来实现 USOP 用于测试目的:

FranzRibcek_1-1702563055225.png

 

因此,根据我的理解,警戒带的下限为0x18002 320 ,而上限为0x18002 390,总共为112字节。

现在,正如链接器报告的那样,最大堆栈使用量至少为 144 字节:

FranzRibcek_2-1702563308766.png

 

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

 

我错了什么?

亲切的问候,

法国

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/MOTIX-MCU/Stack-Overflow-Detection-Guard-Band-Region-Definition/td-p/660090

0 点赞
1 解答
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

@FranzRibcek

感谢您的耐心等待!!

我开发了一个示例示例,它可以检测堆栈溢出,并通过 TLE9893 Evalkit 上的 LED P0.2 给出指示。

摘要:

从 tle9883_93.sct 文件中选择堆栈大小为 0x200

堆栈起始地址为 0x1800 7C00。

STOF_ADDR_OFF_H = 0x16C8 和 STOF_ADDR_OFF_L = 0x16BF 在对齐寄存器后,这将在 0x18007B20 和 0x18007AFC 之间设置防护带。

 

在 ConfigWizard 中启用了堆栈溢出,如下所示。

Raj_C_0-1703139011362.png

 

如果您需要进一步的帮助,请告诉我们。

注意:此示例项目并不是堆栈溢出检测的确切用例。 它有助于触发和分析堆栈溢出。

谢谢

最好的问候

Raj Chaudhari

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/MOTIX-MCU/Stack-Overflow-Detection-Guard-Band-Region-Definition/m-p/664460

在原帖中查看解决方案

0 点赞
4 回复数
Translation_Bot
Community Manager
Community Manager
Community Manager

@FranzRibcek

 

请确认您是否启用了 NMICON(NMI 控制寄存器)中显示的堆栈溢出 NMI。

Raj_C_0-1702628544590.png

 

然后启用 STOF_EN。

 

Raj_C_1-1702629991372.png

 

还请告诉我们您是否开发了自定义启动文件或正在使用默认启动文件。

 

谢谢

最好的问候

Raj Chaudhari

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/MOTIX-MCU/Stack-Overflow-Detection-Guard-Band-Region-Definition/m-p/660727

0 点赞
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

你好 @Raj_C,感谢你的友好回复。

其实我还没启用 bit NMICON.NMISTOFEN。 它现在已启用。 尽管如此,堆栈溢出保护并未触发,我也从未进入我为测试而编程的 ISR。

我将上传我的启动文件供你检查,这应该是默认文件。 我得把它的扩展名改为 " .c " 否则我将无法上传。

亲切的问候,

法国

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/MOTIX-MCU/Stack-Overflow-Detection-Guard-Band-Region-Definition/m-p/660763

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

向上。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/MOTIX-MCU/Stack-Overflow-Detection-Guard-Band-Region-Definition/m-p/662782

0 点赞
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

@FranzRibcek

感谢您的耐心等待!!

我开发了一个示例示例,它可以检测堆栈溢出,并通过 TLE9893 Evalkit 上的 LED P0.2 给出指示。

摘要:

从 tle9883_93.sct 文件中选择堆栈大小为 0x200

堆栈起始地址为 0x1800 7C00。

STOF_ADDR_OFF_H = 0x16C8 和 STOF_ADDR_OFF_L = 0x16BF 在对齐寄存器后,这将在 0x18007B20 和 0x18007AFC 之间设置防护带。

 

在 ConfigWizard 中启用了堆栈溢出,如下所示。

Raj_C_0-1703139011362.png

 

如果您需要进一步的帮助,请告诉我们。

注意:此示例项目并不是堆栈溢出检测的确切用例。 它有助于触发和分析堆栈溢出。

谢谢

最好的问候

Raj Chaudhari

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/MOTIX-MCU/Stack-Overflow-Detection-Guard-Band-Region-Definition/m-p/664460

0 点赞