嵌入式技术论坛
直播中

贾桂林

7年用户 1478经验值
私信 关注
[问答]

为什么基于rt_thread的程序相较于裸机程序需要大得多的栈空间?

刚刚上手rt_thread Nano,尝试将以前写的一个裸机程序改成基于rt_thread的应用程序,为什么基于rt_thread的程序相较于裸机程序需要大得多的栈空间?

回帖(3)

mintsy

2022-5-19 10:46:24
每个线程栈都要保存线程的上下文(CPU 全部寄存器),用于线程的切换,这属于线程管理的开销吧。
举报

贾小龙

2022-5-19 10:46:33
你用的是nano版么,具体占了多少空间?
nano占用的空间不大。

举报

贾飞小

2022-5-19 10:46:49
个人理解,如有错误,欢迎批评指正。
以Cortex M3为例,栈指针有两个:
  • MSP,Main Stack Pointer
  • PSP,Process Stack Pointer
两个SP物理地址相同,同一时刻,只能使用其中一种。
  • 在裸机开发下,系统启动,首先取出MSP,然后运行。裸机的前后台运行中,始终使用MSP。
  • 在RTOS下,每个线程都是while(1)无限循环。系统启动,首先取出MSP,此时是主栈;进入到优先级最高的线程前,切换到该线程的PSP。发生中断,用MSP。再发生线程切换,PSP又指向新线程的栈。
在RTOS下,MSP和PSP在切换使用;并且,每个线程都拥有独立的栈,通过PSP的不停切换达到无缝切换线程的目的。
综上:
  • 裸机,Main_Stack单独使用;
  • RTOS,Main_Stack + (n * Process_Stack),其中,n是线程的个数。
RTOS的栈 >> 裸机的栈。
PS:希望有一天,论坛支持Tex公式输入。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分