pxCurrentTCB指向的任务块中,有2个和栈相关的变量pxTopOfStack和pxStack。

pxTopOfStack指向当前堆栈栈顶,随着进栈出栈,pxTopOfStack指向的位置是会变化的;

pxStack指向当前堆栈的起始位置,一经分配后,堆栈起始位置就固定了,不会被改变了。

pxEndOfStack 标记着栈结束位置,任务创建完成后就固定了。

   /*_pxCurrentTCB 为其在rom中data段的物理地址*/mov _pxCurrentTCB, r2         # pxCurrentTCB->pxTopOfStack = SP/*将r2也就是pxCurrentTCB地址中的值赋值给R2*/ld.w 0[r2], r2/*将sp中的值存入r2, 其中r2时pxTopOfStack的值,下面这句就是将当前栈指针sp存入到pxTopOfStack这个地址中,以便下次任务恢复时,直接拿pxTopOfStack,即可找到任务被切换前的sp。*/st.w sp, 0[r2]

不知道这样理解可对。

通过单步运行验证下:

mov _pxCurrentTCB, r2 --->这里pxCurrentTCB在内存中的地址为为fede927c,_pxCurrentTCB在map文件中的位于data段的物理地址,存入到r2

ld.w 0[r2], r2 --->取出r2中地址对应的数据存入到r2,也就是0xfede9ff8这个值赋值给r2,pxCurrentTCB的地址值(注意是地址)。

st.w sp, 0[r2] -->上面一句拿到了pxCurrentTCB指向的pxTopOfStack的地址,存在了r2,进而将TCB任务上下文中的SP赋值给当前TCB的pxTopOfStack,该sp为当前pxCurrentTCB运行的任务栈指针,这句完成了任务切换前的任务栈保存,下面可以进行任务切换了。

以上过程通过GHS单步调试可以跟踪

该任务执行完了,sys tick 1ms重新检测,如果高优先级任务执行完成,会继续执行被打断的低优先级的任务(个人理解)

RH850 F1L freeRTOS 任务栈的切换相关推荐

  1. FreeRTOS 任务栈大小确定及其溢出检测

    以下转载自https://www.cnblogs.com/yangguang-it/p/7123727.html FreeRTOS 的任务栈设置 不管是裸机编程还是 RTOS 编程,栈的分配大小都非常 ...

  2. FreeRTOS任务调度与任务切换 | FreeRTOS八

    目录 说明: 一.任务调度器 1.1.开启任务调度器函数 1.2.任务调度器实现步骤 1.3.xPortStartScheduler()函数 二.启动一个任务 2.1.prvStartFirstTas ...

  3. freeRTOS系统栈与任务栈

    中断过来之后,由任务栈切换到main stack(系统栈) 任务栈保存 系统栈的地址范围为0xfede8000 4K,向下生长,所以按照ld的定义,0xfede9000 开始,切换到系统栈 这样可以减 ...

  4. RH850 F1L text段代码与S19文件解析

    前言 我们知道写的代码中,函数.变量名在编译过后都是以地址的形式存在内存中,变量名.函数地址是具体内存地址的一个名字罢了,想个问题 工程编译完成,最后烧写到mcu中都是以S19的文件格式,变量名--& ...

  5. FreeRTOS任务切换过程深层解析

    FreeRTOS 系统的任务切换最终都是在 PendSV 中断服务函数中完成的,uCOS 也是在 PendSV 中断中完成任务切换的. [为什么用PendSV异常来做任务切换] PendSV 可以像普 ...

  6. 瑞萨RH850 CS+环境下设置堆和栈空间

    目录 1.设置栈空间 2.设置堆空间 嵌入式软件开发离不开对堆和栈的操作. 栈由操作系统自动分配和释放 ,存放函数的参数值.局部变量的值等.通常都是被调用时处于存储空间中,调用完毕立即释放. 堆由开发 ...

  7. 嵌入式RTOS的 任务栈 和 系统栈

    对于初学者来说,对于RTOS经常提到的任务栈和我们裸机编程说的栈经常傻傻分不清楚 虽然我其他博文在有些地方提到过他们的区别,但还是单独写一篇文章描述一下,本文以FreeRTOS为例 ...更新一下 R ...

  8. 正点原子FreeRTOS(上)

    更多干货推荐可以去牛客网看看,他们现在的IT题库内容很丰富,属于国内做的很好的了,而且是课程+刷题+面经+求职+讨论区分享,一站式求职学习网站,最最最重要的里面的资源全部免费!!!点击进入------ ...

  9. 10、RH850 CAN通讯功能和配置

    前言: CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO国际标准化的串行通信协议. 在当前的汽车产业中,出于对安全性.舒适性.方便性.低公害.低成本的 ...

  10. cortex-m3 freertos

    cortex-m3 & freertos 小狼@http://blog.csdn.net/xiaolangyangyang ARMv7-M架构 Thumb2指令集 操作模式/特权模式 内建的嵌 ...

最新文章

  1. js 日历插件开发
  2. 模板引擎(smarty)知识点总结II
  3. 在下列选项中,没有构成死循环的程序的是?
  4. OO设计原则总结[转载]
  5. Algorithm之PrA:PrA之nLP非线性规划算法+Matlab 优化工具箱的GUI求解非线性规划
  6. WEB页面多语言支持解决方案(转自CSDN)
  7. String equals()方法 源码分析
  8. linux程序改ip地址吗,如何在Linux中从C设置IP地址
  9. 备份文件时,添加时间戳
  10. Mybatis的直接执行SQL
  11. 暴力破解WiFi密码
  12. python的debug为什么点第一行直接运行结束了_Python 代码调试工具 pdb 快速入门
  13. java封装-猫狗宠物店案例
  14. 【小白米日志】树莓派3b+四位共阴数码管的连接和驱动
  15. visio画卷积核,网格
  16. STEP标准描述方法-EXPRESS语言
  17. TCP的长连接与短连接
  18. sql substr oracle,Substr也可以使用索引吗?
  19. python中re.match和re.search和re.findall的用法
  20. 10.1-10.31推荐文章汇总

热门文章

  1. yyuc php,yyuc 开发手册.zip 框架 说明指南 Windows Develop 238万源代码下载- www.pudn.com...
  2. Java集合基础练习题
  3. 大学生IT创业计划书
  4. linux内核编译串口驱动,ARM Linux下安装CH341串口驱动
  5. 《九阴真经:iOS黑客攻防秘籍》新书发布
  6. 《黑客攻防技术-系统实战》开篇讲解
  7. 基于51单片机的电子时钟
  8. 【数据库】数据库系统
  9. Smarty自学笔记
  10. 对比Cnblogs.com、CSDN.net和Javaeye.com的人气