Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
栈stack
线程
请教线程堆栈的作用以及大小设置
发布于 2022-05-23 10:01:39 浏览:2817
订阅该版
```c rt_thread_create( "a", thread_entry, RT_NULL,256,4 ,20); ``` 中的256是堆栈空间。 这个堆栈是线程切换时保存现场用的吗?还是线程体中所用堆栈的大小。 如果是前者,那么即使线程体中用的堆栈大小超过256,也不会影响线程运行吧?
查看更多
lchnu
2022-05-23
Witness, Understand, Skill
栈 - Stack 堆 - Heap 它们是完全不同的概念。 **1.普通前后台系统** main函数的while(1)属于后台,isr属于前台。 在主循环中调用函数完成具体功能,发生中断,从主循环中切换到isr,处理完毕回到主循环。整个过程只有一个栈。我们不妨将它称之为`Main Stack`。 一般写函数,形参个数不超过4个,此时通过R0 ~ R3传递函数参数;如果形参超过4个,则使用栈传递参数。函数内部的临时变量,从栈中分配。 一段伪代码: main.c ```c void test_func1(void) { char str[128]; /* 数组占用128字节,调用函数时从Stack中分配 */ char *ptr; /* 指针变量占用4字节,调用函数时从Stack中分配 */ ptr = (char *)malloc(256); /* 分配的256字节来源于 Heap */ .... free(ptr); /* 用完释放,Heap看起来没有变化*/ } int main() { test_func1(); /* 函数调用前后,Stack看起来没有变化 */ } ``` **2.RTOS** 假设有2个线程。 系统启动,从启动代码中开始运行,直到进入到高优先级线程中,使用`Main Stack`。 进入高优先级线程,使用该线程的栈,我们称之为`Process Stack`,即你帖子中提到的`256`字节的Stack。在thread_entry中进行函数调用的开销,都在这256字节的栈中完成。 ```c rt_thread_create( "a", thread_entry, RT_NULL,256,4 ,20); ``` 由于有2个线程,所以RTOS下的Stack合计为: `Main Stack Size + Thread1 Process Stack Size + Thread2 Process Stack Size` Q: > 如果是前者,那么即使线程体中用的堆栈大小超过256,也不会影响线程运行吧? A: 线程中的栈是用来做现场保护的。`线程中的堆和栈是两个不同的概念,你可看前文的伪代码中的注释。` 如果线程中,函数调用深度较深,如 ```bash thread_entry --> func1 --> func2 --> func3 --> func4 ``` 而每个函数中都用了128字节的临时变量,所需要的栈远超过了256字节,导致栈溢出,可能破坏了其他线程的栈,可能导致某些变量的值异常,线程大概率就死掉了,一定会影响线程运行。
3
个回答
默认排序
按发布时间排序
出出啊
2022-05-23
恃人不如自恃,人之为己者不如己之自为也
https://club.rt-thread.org/ask/article/2460fcd7db4821ae.html 堆 栈分不清
小奶猫喝牛奶
2022-11-22
这家伙很懒,什么也没写!
`ptr = (char *)malloc(256);`这个用的是主堆里面的堆吗??
撰写答案
登录
注册新账号
关注者
0
被浏览
2.8k
关于作者
wushili
这家伙很懒,什么也没写!
提问
4
回答
2
被采纳
0
关注TA
发私信
相关问题
1
请问执行rt_thread_delete的操作后,线程还在运行是什么情况?
2
rtthread中,线程中的ADC采样率需求比时钟嘀嗒需求高怎么办?
3
有没有检测系统中有没有某个名字的线程的接口函数?
4
使用finsh 进行ota成功,线程里开ota失败
5
调度锁会引起线程内存不足
6
线程处于close状态消耗资源吗
7
paho_mqtt线程相关疑问
8
thread中不能使用rt_timer_start() 来开启定时器
9
线程递归是什么形成的?
10
程序运行一会儿报错,拜托拜托
推荐文章
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-Thread】记录一次对主仓的bsp进行修复并提交pr的总结
2
【请投票】嵌入式大赛Top10排名等你来选!
3
【24嵌入式设计大赛】HPM5300-EVK 网络测速仪
4
RT-Thread Nano 上线ST CubeMX
5
Nordic移植笔记: RT_Thread v5.1.0(基于Nordic nRF52840的ble_app_hids_mouse工程)
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
ART-Pi
FinSH
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
flash
packages_软件包
cubemx
PWM
freemodbus
BSP
潘多拉开发板_Pandora
定时器
ADC
socket
flashDB
中断
Debug
GD32
编译报错
msh
keil_MDK
C++_cpp
rt_mq_消息队列_msg_queue
ulog
at_device
SFUD
本月问答贡献
出出啊
1515
个答案
342
次被采纳
小小李sunny
1438
个答案
289
次被采纳
张世争
785
个答案
168
次被采纳
crystal266
546
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
6
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
2
次点赞
crystal266
2
篇文章
1
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部