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.

[参考译文] 编译器/RM48L952:在 RM48L952和 TM4C123GH6PZ 上启用-stack_overflow_check 时出现问题

Guru**** 2614185 points
Other Parts Discussed in Thread: RM48L952, TM4C123GH6PZ, HALCOGEN

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/647526/compiler-rm48l952-trouble-enabling---stack_overflow_check-on-rm48l952-and-tm4c123gh6pz

器件型号:RM48L952
主题中讨论的其他器件: TM4C123GH6PZHALCOGEN

工具/软件:TI C/C++编译器

您好!

我正在项目中使用 RM48L952和 TM4C123GH6PZ、并希望启用动态堆栈溢出检查。 我使用的是 TI ARM C/C++编译器版本16.9.4.LTS

当我添加--stack_overflow_check 标志并添加我的项目编译的 void handle_stkovf (void)函数时、在 RM48上运行代码时、代码不会超过 prefetchEntry。

您可以在下面找到 RM48 gdb 会话和主文件。

-stack_overflow_check 与 TM4C123GH6PZ 搭配使用、但调用 FaultISR()而不是调用 handle_stkovf (来自编译器随附的 tm4c123gh6pz_startup_ccs.c)。

是否有关于如何使用--stack_overflow_check 选项的全面说明?

谢谢、

Karel

RM48 GDB 会话:

(gdb)目标远程 localhost:55001

使用 localhost:55001进行远程调试
警告:未指定可执行文件、目标不支持
自动确定可执行文件。 尝试使用"file"命令。
0x0000598c 输入?? ()
(gdb)监视器复位
正在重置目标
(gdb)文件 fpmain.elf
正在调试一个程序。
是否确定要更改文件? (Y 或 n) y
从 fpmain.elf...done 读取符号。
(gdb) b main
0x5978处的断点1:文件/home/karel/Documents/stmatb_sourcecode/src/STMATB/functional_processor/fpmain.c、第13行。
(gdb) b handle_stkovf
0x59f8处的断点2:文件/home/karel/Documents/stmatb_sourcecode/src/STMATB/functional_processor/fpmain.c、第30行。
(gdb) b 递归
0x5984处的断点3:文件/home/karel/Documents/stmatb_sourcecode/src/STMATB/functional_processor/fpmain.c、第17行。
(gdb)负载
正在加载.intvecs 段、大小为0x20 lma 0x0
正在加载段.text、大小为0x5c58 lma 0x20
正在加载段.const、大小为0x23c lma 0x5c78
正在加载段.cinit、大小为0x24 lma 0x66b8
起始地址0x5a6c、加载大小为24280
传输速率:78KB/秒、4856字节/写入。
(gdb) c
继续。
^C
对接收到的信号 SIGTRAP、跟踪/断点陷阱进行编程。
PrefetchEntry () at /home/karel/Documents/herculeshallib/src/hal/sys_intvecs.asm:59
59b 预取指令


RM48主文件

#include
#include "hal_stdtypes.h"

extern void recurse (void);
extern void handle_stkovf (void);

int main (空)

递归();
返回0L;

void recurse (void){

uint8_t maan[100];

uint8_t roos = 0;
for (roos = 0;roos < 100;roos++){

Maan[roos]= roos;
递归();
if (maan[roos]=99){

Roos = 0;

void handle_stkovf (void){

while (1);

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

    堆栈溢出检查功能未与任何其他 TI 提供的软件(如 Halcogen)集成。  我怀疑这是您尝试做的事情。

    堆栈溢出功能之前已导致问题。  它在这一领域几乎没有用处。  考虑到所有事项、我想提出从编译器中删除堆栈溢出功能的请求。  您认为这是怎样的?

    谢谢、此致、

    乔治

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

    嗨、George、

    你是对的、在 RM48上、我尝试将它与 HalCoGen 结合(几乎没有成功)。 这里的标志看起来关闭似乎是正确的做法、我想我必须使用 MPU 来检测堆栈溢出。

    我已经认为、该功能的使用不多、因为您可以在其中找到的唯一文档是"启用动态堆栈溢出检查"。

    它似乎是一个很好的功能、因为它看起来比 MPU 更易于使用、但在当前状态下、它似乎几乎不可能使用它。

    谢谢、

    Karel

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

    我在 SDOWP 系统中提交 CodeGen-4062以请求删除堆栈溢出功能。  欢迎您在我的签名中使用下面的 SDOWP 链接进行访问。

    谢谢、此致、

    乔治