OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3283|回复: 3

关于启动文件中定义的栈和我们自己给任务分配的栈

[复制链接]

94

主题

260

帖子

0

精华

高级会员

Rank: 4

积分
650
金钱
650
注册时间
2013-10-23
在线时间
48 小时
发表于 2015-9-21 11:19:17 | 显示全部楼层 |阅读模式
5金钱
启动文件中的设置的栈空间是让编译器给每个函数体分配的,用来存放函数参数,局部变量,以及函数调用,函数被中断时保存现场数据。当使用RTOS时,我们也给每个任务分配了栈空间,那么我的疑问是:我们给任务分配了栈空间后,编译器还会给任务函数分配栈空间吗?任务函数体的参数,局部变量是放在哪个位置的。小白还请多多指教。

最佳答案

查看完整内容[请看2#楼]

编译器并不分配栈,仅是从栈中索取。 栈的分配是由程序员去做,其实就是一片内存空间(一个数组或malloc出来的空间)。 然后把SP设置为这片空间的地址而已,这样程序从SP中索取的空间就是有效的。 不同的是默认的栈一般放在汇编文件中或在链接脚本中定义,所以看起来觉得是编译器分配的。 实际上和RTOS里面为线程分配栈是一回事。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

1044

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3722
金钱
3722
注册时间
2011-5-23
在线时间
2013 小时
发表于 2015-9-21 11:19:18 | 显示全部楼层
编译器并不分配栈,仅是从栈中索取。

栈的分配是由程序员去做,其实就是一片内存空间(一个数组或malloc出来的空间)。
然后把SP设置为这片空间的地址而已,这样程序从SP中索取的空间就是有效的。

不同的是默认的栈一般放在汇编文件中或在链接脚本中定义,所以看起来觉得是编译器分配的。
实际上和RTOS里面为线程分配栈是一回事。
RT-Thread RTOS 音频,WIFI,蓝牙
回复

使用道具 举报

94

主题

260

帖子

0

精华

高级会员

Rank: 4

积分
650
金钱
650
注册时间
2013-10-23
在线时间
48 小时
 楼主| 发表于 2015-9-21 13:55:08 | 显示全部楼层
回复【2楼】aozima:
---------------------------------
谢谢你的回答,再问一下,是不是线程的栈空间编译器从我们为线程分配的空间去索取,而不从启动文件里面定义的栈空间索取,启动文件里面定义的的栈空间只用作非线程的函数体。
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13129
金钱
13129
注册时间
2012-11-26
在线时间
3814 小时
发表于 2015-9-21 14:12:58 | 显示全部楼层
任务分配的空间是给每个任务用的
启动文件的堆栈是给函数用的
学无止境
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-18 01:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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