FREERTOS学习笔记,初始化第一个任务相关

注意:LR与R14表同一个寄存器。

FREERTOS任务切换过程

系统在进入中断前会先依次把xPSR, PC, LR, R12以及R3‐R0由硬件自动压入适当的堆栈中,之后在进入中断函数执行响应中断内容。当中断执行完后再将上述入栈数据依次出栈。

关于上述寄存器:
xPSR:状态字寄存器。

PC:表被打断前任务指令即将执行指令的的地址,用于返回原来地址继续执行。

LR:表示本次任务执行完退出后该执行的地址,举例如下:若函数A调用了函数B,则在进入函数B之前PC内存了函数A下次将执行指令的地址,LR存储了函数A结束时该执行的地址。此时要进入B执行,在进入B执行前会将包括LR(但不包括PC)在内的部分寄存器入栈,然后进入函数B,此时LR更新为进入函数前的PC需要指的下一个指令地址,PC更新为函数B起始指令,LR会一直保持下去直到在调用其他函数,从而再次进栈,然后更新为B函数若不调用其他函数的话,下一个该执行的指令地址。当函数退出时,LR内存的指令地址会传给PC,从而PC接着调用函数B之前的指令执行。然后LR的值出栈。
对于中断则有所不同,当函数A正在执行时,中断来临,此时会类似于调用函数B,会将寄存器入栈,但此时入栈的寄存器不仅包含LR还包含了PC,进入中断不同于调用函数B,LR会更新为一个表示中断结束后返回用户模式还是特权模式的等等的值,当任务结束后向LR跳转就会根据LR的值到响应模式运行,其对应的值类型如下:
在这里插入图片描述
然后中断结束,原来入栈的寄存器返回,PC的值从入栈时PC的值获取,不再通过LR来获取。

代码详解

任务堆栈初始化:

StackType_t *pxPortInitialiseStack(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值