打印

ARM的SP指针和UCOS的任务堆栈指针问题

[复制链接]
3120|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
e08610318|  楼主 | 2013-4-6 20:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ARM, ucos, ck, ST, AC
有人说,这两个指针是两码事,简单说就是一个硬件一个软件。
我现在还想不通:
1.如果是个裸机程序,子程序调用、变量传递,数据可能会放到main_stack或process_stack,在子程序中申请局部变量,汇编可能吧r0-r3压入堆栈,然后再使用R0-R3,作为局部变量。
2.如果是用UCOS,我还不能理解它是怎么让局部变量压入自己的任务堆栈的(我后来试了下发现SP的值不能人为改变的)?UCOS如何处理任务堆栈和硬件堆栈之间的关系?

小弟准备自己写汇编代码移植UCOS,望前辈不吝赐教

相关帖子

沙发
xinzha| | 2013-4-7 09:35 | 只看该作者
本身在这种risc架构中,提到硬件堆栈这种概念就不是很正确,堆栈都是软件操作的,而且sp就是人为修改的,只是只能用汇编去修改而已。

使用特权

评论回复
板凳
airwill| | 2013-4-7 14:04 | 只看该作者
这个问题不是三言两语的问题. 是内核的一个重要任务. 保证每个任务使用自己的任务堆栈.
要弄清楚它, 建议还是去啃 UCOS 的书籍吧, 搞明白这一点, 基本上 os 的内核也清楚得差不多了
SP的值不能随意改变, 这是最危险的操作.

使用特权

评论回复
地板
e08610318|  楼主 | 2013-4-7 15:01 | 只看该作者
airwill 发表于 2013-4-7 14:04
这个问题不是三言两语的问题. 是内核的一个重要任务. 保证每个任务使用自己的任务堆栈.
要弄清楚它, 建议 ...

现在在看UCOS第8章移植部分内容,里面讲的比较范范,因为它不针对某个平台,一时还不太明白。我用的是ARM7CM3,刚刚看到官方资料有关设置多个堆栈的内容,还在研究中。感觉这个的确不是三言两语的问题,只有自己慢慢去琢磨了

使用特权

评论回复
5
airwill| | 2013-4-7 15:05 | 只看该作者
我看, 你应该先看看前面讲内核调度的章节.
那里会详细讲任务切换和堆栈切换的.

使用特权

评论回复
6
e08610318|  楼主 | 2013-4-7 15:11 | 只看该作者
xinzha 发表于 2013-4-7 09:35
本身在这种risc架构中,提到硬件堆栈这种概念就不是很正确,堆栈都是软件操作的,而且sp就是人为修改的,只 ...

受教了,看来得好好学学ARM汇编。我想要修改SP应该有一个特定的过程吧。

使用特权

评论回复
7
airwill| | 2013-4-7 15:22 | 只看该作者
SP 可以用 C 修改.
关键是, 你得保证修改它不会崩溃系统

使用特权

评论回复
8
e08610318|  楼主 | 2013-4-10 17:45 | 只看该作者
airwill 发表于 2013-4-7 15:22
SP 可以用 C 修改.
关键是, 你得保证修改它不会崩溃系统

请教,怎么用C该?我只找到用__current_sp()来读取当前SP值的本质函数

使用特权

评论回复
9
airwill| | 2013-4-10 17:58 | 只看该作者
ARM 内核库里提供了函数。
void __set_MSP(uint32_t mainStackPointer);
void __set_PSP(uint32_t topOfProcStack);

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:你可能不知道今天所做的事情会对未来有多大的干预能力!

67

主题

310

帖子

12

粉丝