Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
请问一个thread所用到的static size如何定?
发布于 2009-10-25 22:54:04 浏览:9713
订阅该版
我创建了一个thread,里面只有一个64字节的变量,rt_thread_create时,参数stack_size为128时就运行不正常,而大于192就运行正常了,所以想了解这个stack_size如何定? 谢谢! ![TEST.jpg](https://oss-club.rt-thread.org/uploads/414_ce76b32939793810008d54adf15d2207.jpg)
查看更多
15
个回答
默认排序
按发布时间排序
aozima
2009-10-25
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
>我创建了一个thread,里面只有一个64字节的变量,rt_thread_create时,参数stack_size为128时就运行不正常,而大于192就运行正常了,所以想了解这个stack_size如何定? > >谢谢! --- 这个得需要你跟综调试下 不过你这个明显小了,光可预计的变量就有64了,还有那么多寄存器 变量虽然只有64字节 可是运行时还要很多空间的 比如原来int a; a = b; c = a; 和直接c =b ;比,并不会因为有int a;就省了空间 一般,我都是512 1024这样设置的 FINSH可以看到SP使用的最大值 ,但这个值 估计是只在切换的时候检查 并不是实际的最大值 ,实际的可能略大 所以,一般,要高出这个很多才行,都用OS了,不必太抠吧? [s:179] [s:179]
ffxz
2009-10-26
这家伙很懒,什么也没写!
finsh显示的就是实际最大的栈使用值,和那个栈溢出检查无关
aozima
2009-10-26
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
那不知FINSH中显示的那个值是怎么取来的呢? 比如刚好运行中都没有切换任务, 程序调用一个子函数,往STACK里面压了好多数据,然后返回时又弹出了,还是原样,这样,那个max used是当前的SP还是子函数里面的SP最大值呢?
bernard
2009-10-26
这家伙很懒,什么也没写!
栈开始有个初始值,在finsh里调用list_thread函数,会去读取线程栈,如果不是初始值就认为已经使用。 所以finsh里显示的max used是历史上线程栈使用的最大栈值。
zhangzq71
2009-10-28
这家伙很懒,什么也没写!
我设定了一个thread的stack大小,让其可以正常运行了,但这个thread运行了几分钟后就报 warning: trd_Read stack is close to end of stack address. 再过两秒就报 thread:trd_Read stack overflow 请问这是什么原因呢?
bernard
2009-10-29
这家伙很懒,什么也没写!
栈溢出了,线程栈不够大,被RTT的调度器检测到了,需要加大栈。
zhangzq71
2009-10-29
这家伙很懒,什么也没写!
但为何不在第一次调度时就检测出来,要运行一段时间才报呢?而我在这个thread中只是开始声明了变量后就一直没再声明了.
aozima
2009-10-29
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
>但为何不在第一次调度时就检测出来,要运行一段时间才报呢?而我在这个thread中只是开始声明了变量后就一直没再声明了. --- 你要知道的是并不是只有你定义变量才会增加栈的大小..... 有些运算是非常耗费资源的,栈在运行中是变化的. 你最好用JTAG来单步调试这个线程,看看是不是正常运行的时候栈溢出还是调度器把栈弄错了. 另外,你也太抠门了吧??????变量就有64字节的线程你竟然才给开128.... 而且,这个线程还会调用子函数....子函数的栈你有考虑没有? 另外,栈还要要保存寄存器,有十多个,每个4字节,不知道算下来有多大了... 你可以试下这个程序,在PC上面编译运行....每次都申请256K的栈,我在的电脑上,输入6还可以,输入7就溢出了 ``` #include
void fun(unsigned int i) { volatile unsigned char test[1024*256];//stack 256K if (i>0) { fun(--i); printf("addr : 0x%08X ",test); printf("%d ",i); } } int main(int argc,char * argv[]) { if (argc == 2) { printf("argv[1]:%s ",argv[1] ); fun(atoi(argv[1])); } else { printf("have no argv[1] "); } return 0; } ```
zhangzq71
2009-10-29
这家伙很懒,什么也没写!
你这个程序在每次递归中就声明了一次变量,跟我的情况好象有点不一样。我是只声明了一次变量。如果在thread中的大循环中,执行步骤都一样,只要第一次循环不出错,就应该一直不会出错,是否可以这样说?
aozima
2009-10-29
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
发一下你那个线程的代码看看
撰写答案
登录
注册新账号
关注者
0
被浏览
9.7k
关于作者
zhangzq71
这家伙很懒,什么也没写!
提问
4
回答
10
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
RT-thred的stm32h723对应bsp包CubeMX添加其他外设报错
2
RT-Thread中的time溢出问题,时间戳溢出,解决方法
3
ART-PI使用env驱动ETH网卡,pc和板子可以ping通
4
SystemView线程名字不显示
5
只用网页也能跑RT-Smart 无门槛腾讯Cloud studio + smart-build快速构建
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
I2C_IIC
ESP8266
UART
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
RTT_逍遥
8
个答案
2
次被采纳
三世执戟
7
个答案
1
次被采纳
KunYi
6
个答案
1
次被采纳
winfeng
2
个答案
1
次被采纳
chenyaxing
2
个答案
1
次被采纳
本月文章贡献
catcatbing
2
篇文章
5
次点赞
swet123
1
篇文章
3
次点赞
YZRD
1
篇文章
2
次点赞
Days
1
篇文章
2
次点赞
阳光的掌控者
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部