OpenEdv-开源电子网

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

Cortex-M3堆栈顺序

[复制链接]

24

主题

95

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2014-3-15
在线时间
0 小时
发表于 2014-5-2 13:07:23 | 显示全部楼层 |阅读模式
 在ucos移植代码中,OSTaskStkInit中的寄存器的入栈顺序(xPSR、PC、LR、R12、R3~R0、R11~R4)的依据在哪,为什么权威指南中没有看到?还有入栈时xPSR寄存器中位24为什么为1?谢谢!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-2 13:30:11 | 显示全部楼层
回复 支持 反对

使用道具 举报

24

主题

95

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2014-3-15
在线时间
0 小时
 楼主| 发表于 2014-5-2 13:32:03 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥,这难道你也不知道吗?
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2201
金钱
2201
注册时间
2012-2-8
在线时间
35 小时
发表于 2014-5-2 13:51:26 | 显示全部楼层
哥,你肯定没有认真看书,
http://www.openedv.com/posts/list/11005.htm
https://github.com/roxma
回复 支持 反对

使用道具 举报

24

主题

95

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2014-3-15
在线时间
0 小时
 楼主| 发表于 2014-5-2 14:37:52 | 显示全部楼层
回复【4楼】Pony279:
---------------------------------
非常感谢,我已经知道了!
回复 支持 反对

使用道具 举报

24

主题

95

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2014-3-15
在线时间
0 小时
 楼主| 发表于 2014-5-2 14:40:22 | 显示全部楼层
在权威指南第9章!
1.png
回复 支持 反对

使用道具 举报

54

主题

537

帖子

0

精华

高级会员

Rank: 4

积分
797
金钱
797
注册时间
2012-2-27
在线时间
7 小时
发表于 2014-5-2 17:42:14 | 显示全部楼层
回复【4楼】Pony279:
---------------------------------
请教个问题,里面不停的写进栈出栈,push ,pop。这个存储空间是STM32自带的?容量有多大
如果任务多,可能会存储多个寄存器的状态对吧。有啥限制么
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2201
金钱
2201
注册时间
2012-2-8
在线时间
35 小时
发表于 2014-5-2 20:54:57 | 显示全部楼层
回复【7楼】wwjdwy:
---------------------------------
push pop 的操作对象是 sp 指针指的位置,也就是RAM,是STM32自带的,理论上可以外部自己拓展RAM的,这个我没试过不太清楚,要看芯片支不支持。
任务多,需要消费的RAM空间也就多,RAM空间不够用或者某个任务分配的栈不够用就完蛋了。
https://github.com/roxma
回复 支持 反对

使用道具 举报

54

主题

537

帖子

0

精华

高级会员

Rank: 4

积分
797
金钱
797
注册时间
2012-2-27
在线时间
7 小时
发表于 2014-5-2 21:09:42 | 显示全部楼层
回复【8楼】Pony279:
---------------------------------

我就是好奇他存到哪里了,因为我看有push,把那些寄存器的值保存起来。那比如说你在push时候入栈,他是存到RAM哪里了,是在STM32的整个堆栈空间中刚好堆栈指针到达的地方?还是是特定已经预留的?
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2201
金钱
2201
注册时间
2012-2-8
在线时间
35 小时
发表于 2014-5-2 22:27:09 | 显示全部楼层
回复【9楼】wwjdwy:
---------------------------------
具体位置是由SP指针决定的,可以从汇编指令集的说明里面也可以看出来,找ARM官方出的cortex-m3的技术文档看看你就明白了。
https://github.com/roxma
回复 支持 反对

使用道具 举报

54

主题

537

帖子

0

精华

高级会员

Rank: 4

积分
797
金钱
797
注册时间
2012-2-27
在线时间
7 小时
发表于 2014-5-2 22:52:48 | 显示全部楼层
回复【10楼】Pony279:
---------------------------------
恩你们说的 cortex-m3 权威教程和百度都看了。看来就是根据SP当时地址去存取。你的文章我也看了。
PUSH,SP指针地址存,自减四个字节。POP SP指针读自增4个字节。SP指针的地址看来很重要了,如果任务多的时候再次读取存储
回复 支持 反对

使用道具 举报

54

主题

537

帖子

0

精华

高级会员

Rank: 4

积分
797
金钱
797
注册时间
2012-2-27
在线时间
7 小时
发表于 2014-5-2 22:55:12 | 显示全部楼层
回复【10楼】Pony279:
---------------------------------
SP指针的值除了PUSH OP外还有别的指令会改变它的值么?其他变量声明之类的会不会影响
回复 支持 反对

使用道具 举报

24

主题

95

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2014-3-15
在线时间
0 小时
 楼主| 发表于 2014-5-7 14:41:48 | 显示全部楼层
回复【12楼】wwjdwy:
---------------------------------
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-7 22:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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