RT-Thread 的一些疑问和理解

  • 2020-9-17
    眼看他起朱楼,眼看他宴宾客,眼看他楼塌了。
    – 孔尚任《桃花扇》

  • 线程控制块是线程切换的核心,通过线程创建 rt_thread_create/线程初始化rt_thread_init函数将线程栈与线程入口函数绑定在线程控制块。

  • 线程切换主要靠的是线程栈,切换时将当时线程运行的数据保存在线程栈,线程恢复时将线程栈的内容再恢复到线程栈中。
    线程栈的内容如下,值得注意的是,运行过程中,R15存储的不一定是入口地址(由于入口函数运行到一半,此时切换的话,线程栈对应到pc寄存器的位置保存的是此时程序运行到的地址)
    (图片来源于 野火书籍)
    在这里插入图片描述

  • RTOS的局部变量如何加载到线程栈中?
    在加载前,将psp寄存器改写成该线程栈指针,进入线程入口函数,局部变量都是由编译器分配在栈中,然后在运行的过程中变量改变,其实就是修改对应栈位置的内容。

  • 为什么要手动保存寄存器的值呢?
    因为此时寄存器有些值还没有更新到线程栈,所以需要手动更新。(其实保存当前寄存器的值,就是保护此时函数运行的状态)

  • 栈的高地址分配给寄存器,且位置固定(寄存器对应具体位置)是架构的安排吗?
    是的,看rtt手册和m3权威指南

  • 中断栈的变量存储在那里呢?
    RT-thread的中断和不用rtos是一样的,由系统直接放入系统分配的栈中,使用的是msp.也是系统启动时用的那个(在启动文件定义的那个),跟跑裸机一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值