区块链技术博客
www.b2bchain.cn

FreeRTOS_第7章_任务的定义与任务切换的实现_一些小要点

这篇文章主要介绍了FreeRTOS_第7章_任务的定义与任务切换的实现_一些小要点的讲解,通过具体代码实例进行16650 讲解,并且分析了FreeRTOS_第7章_任务的定义与任务切换的实现_一些小要点的详细步骤与相关技巧,需要的朋友可以参考下https://www.b2bchain.cn/?p=16650

本文实例讲述了2、树莓派设置连接WiFi,开启VNC等等的讲解。分享给大家供大家参考文章查询地址https://www.b2bchain.cn/7039.html。具体如下:

目录

 

简介:

要点一,两个堆栈指针:

主堆栈指针和进程堆栈指针使用范围:

CM3权威指南CnR2书中3.7.1节谈论双堆栈的好处,这里截取重要部分:

要点二,堆栈的区域:

系统的栈区域

用户的堆栈区域

要点三,主堆栈指针和进程堆栈指针怎么切换,详情查看CM3权威指南CnR2书中9.6异常返回值:


简介:

本文是 [野火®]《FreeRTOS 内核实现与应用开发实战—基于STM32》 这本书第7章任务的定义与任务切换的实现的一些资料整理。

参考书籍有CM3权威指南CnR2

要点一,两个堆栈指针:

主堆栈指针和进程堆栈指针使用范围:

Cortex-M3 拥有两个堆栈指针,然而它们是 banked,因此任一时刻只能使用其中的一个。

1)主堆栈指针(MSP):复位后缺省使用的堆栈指针,用于操作系统内核以及异常处理例程(包括中断服务例程)

2) 进程堆栈指针(PSP):由用户的应用程序代码使用。

CM3权威指南CnR2书中3.7.1节谈论双堆栈的好处,这里截取重要部分:

在使用 OS 的环境下,只要 OS 内核仅在 handler 模式下执行,用户应用 程序仅在用户模式下执行,这种双堆栈机制派上了用场——防止用户程序的堆栈错误破坏 OS 使用的堆栈。

FreeRTOS_第7章_任务的定义与任务切换的实现_一些小要点

要点二,堆栈的区域:

系统的栈区域

系统的栈区域,是用来存放变量和一些特殊寄存器的,如下所示:

FreeRTOS_第7章_任务的定义与任务切换的实现_一些小要点

用户的堆栈区域

用户的堆栈区域,用来保存单独任务运行的变量和一些特殊寄存器的,通用寄存器的排列分布如下所示:

FreeRTOS_第7章_任务的定义与任务切换的实现_一些小要点

FreeRTOS_第7章_任务的定义与任务切换的实现_一些小要点

 在FreeRTOS中,有时候任务还没运行完就要进行切换,可以使用任务堆栈对每个任务的通用寄存器进行保存,这样当任务切回来的时候,只要恢复这些通用寄存器到系统寄存器中就可以使任务函数继续执行。

其中xPSR,PC(任务入口地址),R14,R12,R3,R2,R1,R0(任务的形参)这些寄存器系统栈和任务栈中都会同步更新,不需要手动保存,但是R4到R11就需要手动操作了,所以任务调度的时候需要多注意。

要点三,主堆栈指针和进程堆栈指针怎么切换,详情查看CM3权威指南CnR2书中9.6异常返回值:

在进入异常服务程序后,将自动更新LR的值为特殊的EXC_RETURN。这是一个高 28位全为1的值,只有[3:0]的值有特殊含义,如表9.3所示。当异常服务例程把这个值送往PC时,就会启动处理器的中断返回序列。因为LR的值是由CM3自动设置的,所以只要没有特殊需求,就不要改动它。

FreeRTOS_第7章_任务的定义与任务切换的实现_一些小要点

 例如在__asm vPortSVCHandler(void)(port.c )中就使用这种方法切换MSP到PSP,如下代码所示:

 __asm void vPortSVCHandler( void ) { 	//更新系统栈为pxCurrentTCB 	//这边用于第一次启动任务的时候,将MSP切到PSP 	     ... ...    //		表9.4 合法的EXC_RETURN值及其功能 //		数值			功能 //		0xFFFF_FFF1 返回handler模式 //		0xFFFF_FFF9 返回线程模式,并使用主堆栈(SP=MSP) //		0xFFFF_FFFD 返回线程模式,并使用线程堆栈(SP=PSP) // //		这个是第一次任务是MSP进来的所以进入异常服务程序后,LR的为 0xFFFF_FFF9 //      通过向r14寄存器最后4位按位或上0x0D,LR的值为0xFFFF_FFFD  	orr r14, #0xd            	bx r14                  }                           

 

 

本文转自互联网,侵权联系删除FreeRTOS_第7章_任务的定义与任务切换的实现_一些小要点

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » FreeRTOS_第7章_任务的定义与任务切换的实现_一些小要点
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们