硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1377|回复: 4
收起左侧

[ThreadX全家桶] 问几个任务栈的问题

[复制链接]

3

主题

6

回帖

15

积分

新手上路

积分
15
发表于 2021-10-26 10:48:52 | 显示全部楼层 |阅读模式
我使用stm32cubeMX生成的代码,为什么实际的栈空间比定义的少4个字节,还有最大栈使用有时比当前使用栈小,是哪里出问题了。不解,问问各位大佬
图里栈实际定义的大小是2048


cde1fcd0b243611255016a85483994d.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115834
QQ
发表于 2021-10-26 11:07:22 | 显示全部楼层
正常,这个我倒腾的一个统计方式,有效地方可能要完善下。
回复

使用道具 举报

3

主题

6

回帖

15

积分

新手上路

积分
15
 楼主| 发表于 2021-10-26 13:00:40 | 显示全部楼层
eric2013 发表于 2021-10-26 11:07
正常,这个我倒腾的一个统计方式,有效地方可能要完善下。

大佬,再问个问题。我程序一开始正常,跑十几个小时后就硬件错误。有没有什么方法可以定位到程序出错的地方。设备是移动式的,而且时间又比较久,不方便接着调试器调试
回复

使用道具 举报

2

主题

23

回帖

29

积分

新手上路

积分
29
发表于 2021-10-26 13:50:48 | 显示全部楼层
z940939971 发表于 2021-10-26 13:00
大佬,再问个问题。我程序一开始正常,跑十几个小时后就硬件错误。有没有什么方法可以定位到程序出错的地 ...

1.常规方法可以自己改写下 hardfault handle,把错误信息保存或者发出来,可以参考开源项目 cm backtrace,或者rtthread里的错误写法,或者m3m4 权威手册里的写法
2. 你这种工况,骚操作也可以把 st link 设置成热插拔模式,直接就能连上看寄存器和内存信息,分析二进制去搞逆向,比如了解异常机制,可以反推异常发生的 pc 位置来定位;分析内存也能分析出一些问题,比如程序里_tx_thread_current_ptr 这个变量是指向当前线程控制块,可以通过看map等文件得到这个变量的地址,从这里找到线程控制块,看name成员也可以推出是什么线程了
3. 想向linux内核一样dump打印栈追溯函数调用信息,会更麻烦些,一般stm32的工程也用不到
回复

使用道具 举报

354

主题

2167

回帖

3234

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3234
发表于 2021-10-26 16:03:20 | 显示全部楼层
z940939971 发表于 2021-10-26 13:00
大佬,再问个问题。我程序一开始正常,跑十几个小时后就硬件错误。有没有什么方法可以定位到程序出错的地 ...

这种bug特别难搞。。。可以尝试一下以下几个方法:
1. 把每个任务的剩余缓存空间显示出来,方便随时查看。看看有没有缓慢占满的趋势。
2. 在故障的中断函数中,打印重要的参数,怀疑的参数,甚至可以是故障处的代码地址。
3. 敏感函数增加输入输出数据的范围检查。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-21 16:43 , Processed in 0.468492 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表