首页 > 其他分享 >freertos-内部机制:栈和寄存器变化

freertos-内部机制:栈和寄存器变化

时间:2022-10-28 16:59:55浏览次数:52  
标签:R0 freertos System 任务 Handler LR 寄存器 机制

首先为了不会绕晕,需要明确概念:寄存器是公用的,栈是私有的,因为寄存器轮着用所以才需要将寄存器值压入栈,当压入栈后,寄存器就可以进行值的更新。

 

创建任务

  创建任务本质是伪造现场,由于之后的启动任务需要进行现场的保存,但在没有任务即任务现场不存在的情况下需要进行伪造。

  具体是栈的创建分配和寄存器值的写入:如下图,比较重要的是任务函数的地址(写入返回地址,因为中断切换任务时,主要就是切入到任务函数中)和传参R0

  然后需要将这个栈的地址R4如图中200003CC保存在一个记录栈地址的数组中

 

启动任务

  主栈

    启动任务或者任务调度本身是一个死循环while,通过中断进行任务调度。按程序顺序分析,在main函数中调用任务启动start_task函数,此时由于从main函数进入了子函数,LR寄存器记录了start_task函数的下一条指令;在start_task中进入while死循环,当任务1启动即出现中断时,“返回地址”寄存器记录了中断返回地址为while,即中断结束回到while循环;产生中断时,硬件自动将包含LR和“返回地址”等寄存器压入主栈;同时LR被赋予一个特殊值(EXC_RETURN);进入中断,首先进入System_Handler_asm,这里软件将R4~R11寄存器和LR压入主栈,同时LR写入R0,R1指向主栈。

  任务1栈

    进入System_Handler,传参为R0,R1,此时由于进入子函数LR赋值为System_Handler下一条指令;System_Handler中,有三条分支,其中分支2为启动任务,首先找出任务1栈的地址,进入函数StartTask_asm,传参为任务1栈和R0,根据任务1栈软件恢复R4~R11寄存器,同时BX R0指令实现硬件恢复剩余寄存器。

  

 

 

切换任务

  任务1栈:
    硬件自动将包含LR和“返回地址”等寄存器压入任务1栈,同时LR被赋予一个特殊值(EXC_RETURN);进入中断,首先进入System_Handler_asm,软件保存任务1的R4~R11寄存器值到任务1栈,同时LR写入R0,R1指向任务1栈。

  任务2栈:

    进入System_Handler,传参为R0,R1,此时由于进入子函数LR赋值为System_Handler下一条指令;System_Handler中,有三条分支,其中分支3为切换任务,首先记录任务1栈进入数组,找出任务栈2的地址,进入函数StartTask_asm,传参为任务2栈和R0,根据任务2栈软件恢复R4~R11寄存器,同时BX R0指令实现硬件恢复剩余寄存器。

 

标签:R0,freertos,System,任务,Handler,LR,寄存器,机制
From: https://www.cnblogs.com/toriyung/p/16836318.html

相关文章

  • 从新开始学JAVA - Hello World与Java运行机制
    代码publicclassHello{publicstaticvoidmain(String[]args){System.out.print("Hello,World!");}}注意类的名字大些分号Java是大小写......
  • Java - 类加载机制
    加载=>验证、准备、解析(链接)=>初始化类初始化时机1. 遇到new,getstatic,putstatic,invokestatic这四条字节码指令时,如果类没有进行过初始化,需要进行初始化......
  • 浏览器背后的运行机制
    浏览器渲染过程什么是渲染过程?简单来说,渲染引擎根据HTML文件描述构建相应的数学模型,调用浏览器各个零部件,从而将网页资源代码转换为图像结果,这个过程就是渲染过程(如下图......
  • 【黑客攻防技术宝典】01-安全风险与核心防御机制
    黑客攻防技术宝典——安全风险与核心防御机制阅读范围:黑客攻防技术宝典(web实战篇)第一、二章内容1-Web应用程序安全与风险没有绝对安全​ 使⽤SSL(SecureSocket......
  • 浏览器缓存机制的理解
    缓存可以减缓网络OI消耗,提高访问速度。通过网络获取内容速度慢而且开销巨大。大的响应需要在客户端和服务器之间进行多次来回的通信,就导致延迟了浏览器获取和处理内容的时间......
  • 事件监听机制、事件-概述、常见事件演示
    事件监听机制概念:某些组件被执行了某些操作后,触发某些代码的执行。事件:某些操作。如:单击,双击,键盘按下了,鼠标移动了事件源:组件。如:按钮文本输入框.........
  • vue源码分析-事件机制
    这个系列讲到这里,Vue基本核心的东西已经分析完,但是Vue之所以强大,离不开它提供给用户的一些实用功能,开发者可以更偏向于业务逻辑而非基本功能的实现。例如,在日常开发中,我们......
  • FreeRTOS 实时操作系统应用入门
    一、FreeRT基本知识1.FreeRT中的链表(1)链表节点数据结构structxLIST_ITEM{configLIST_VOLATILETickType_txItemValue;/*<Thevaluebeingl......
  • Java异常处理机制
    程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常。异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误给用户?或者用C语言风格:用函数返回......
  • Gitea 1.18 功能前瞻(其三):增强文本预览效果、继续扩展软件包注册中心、增强工单实用功
    今天是10月26日星期三,Gitea周期性地发布了1.18的第一个RC0版本,在此阶段会收集一些功能和使用上的问题,随后还会发布RC1,新功能的完整性和健壮性会逐步趋近正式版......