1、汇编启动代码中设置栈

- 这个栈空间只有300字节,是用于汇编启动代码早期,以及调用C语言的main函数(创建任务等)
 - 在创建好任务,启动调取器后,这个栈空间就被抛弃掉,后续不会使用到
 - 等调度器开启后,运行任务是使用每个任务自己的栈空间,进入中断也有中断专门的栈空间
 
2、中断处理中设置栈

- 在每次进入中断时,先保存任务执行现场到任务自己的栈空间
 - 保存好任务执行现场后,把中断特有的栈空间写到sp寄存器,整个中断处理都使用专门用于中断处理的栈空间
 
3、任务切换中设置栈
3.1、任务栈空间的申请
参考博客:《freertos任务调度机制深度分析(以RISC-V架构为例)》;
3.2、任务栈空间的切换

 
4、关于三处栈空间的思考?

- 启动时使用300字节的临时栈空间,当开启任务调度器后,这300字节的栈空间边被丢弃,后续不会再使用
 - 开启任务调度后,进入中断先把现场保存到任务栈空间,然后切换到中断独有的栈空间进行中断处理,在返回中断前,从任务栈空间恢复现场
 - 疑问: 
  
- 启动时的300字节临时栈空间,就在启动时使用过一次,这不是会造成300字节的资源浪费?为什么不在启动开始就直接使用中断独有的栈空间?
 - 我在启动代码里测试,在start.S中直接使用中断处理特有的栈空间,也是可以正常运行的,所以我认为是300字节的临时栈空间不是必须的
 
 

















