基于STM32的简易RTOS分析-预备知识

本文是基于STM32的RTOS学习总结,主要介绍了Cortex-M3的寄存器、堆栈操作、汇编指令和中断基础知识,包括R0-R15寄存器、堆栈指针SP、LDR/STR、STMDB/LDMIA、B/BX/BL/BLX、MRS/MSR指令、中断响应过程以及SVC和PendSV中断。通过对这些概念的理解,为深入学习RTOS打下基础。
摘要由CSDN通过智能技术生成

写下这篇文章的主要目的是对自己学习RTOS的历程做一个记录和总结,方便以后回忆翻看。以下内容主要来自宋岩先生翻译的《Cortex-M3权威指南》。

目录

一、Cortex-M3寄存器简介

​二、堆栈操作简介

三、汇编指令简介

LDR和STR指令

STMDB和LDMIA指令

B、BX、 BL、 BLX指令

MRS 和 MSR指令

四、中断简介

    中断响应过程简介

SVC和PensSV中断简介

软件中断

五、汇编基础


一、Cortex-M3寄存器简介

Cortex‐M3 处理器拥有 R0‐R15 的寄存器组。R0‐R12都是32位通用寄存器,用于数据操作。R13-R15是专用寄存器。

R0-R3:用作传入函数参数,传出函数的返回值。在子程序运行时,可将R0-R3用于任何用途。被调用函数在返回之前不必恢复R0-R3,如果调用函数需要再次使用 r0-r3 的内容,则它必须保留这些内容。

R4-R11:被用来存放函数的局部变量。如果调用函数使用了这些寄存器,它在返回之前必须恢复寄存器的值。

R13是堆栈指针(SP),Cortex‐M3 拥有两个堆栈指针,但在同一时刻只能有一个可以看到,这也就是所谓的“banked”寄存器。需要注意的是堆栈指针的最低两位永远是 0,这意味着堆栈总是 4 字节对齐的。

  • 主堆栈指针( MSP):复位后缺省使用的堆栈指针,用于操作系统内核、异常处理例程(包括中断服务例程)以及所有需要特权访问的应用程序来使用
  • 进程堆栈指针( PSP):由用户的应用程序代码使用(不处于异常服务程序时)。

R14是链接寄存器(LR),当呼叫一个子程序时,由 R14 存储返回地址;例如,当你在使用 BL(分支并连接, Branch and Link)指令时,就自动填充 LR 的值。

main ;主程序
    …
    BL Task ; 使用“分支并连接”指令呼叫 Task,PC= Task,并且 LR=main 的下一条指令地址
    …
Task
    …       ; Task 的代码
    BX LR   ; 函数返回(如果 Task再次调用其他函数要使用 LR,必须在使用前 PUSH,否则返回时LR的值被改变程序就可能跑飞了)

R15是程序计数器(PC)指向当前的程序地址。如果修改它的值,就能改变程序的执行流程。

Cortex‐M3 还在内核水平上搭载了若干特殊功能寄存器,它们只能被专用的 MSR 和 MRS 指令访问,而且它们也没有存储器地址。这些寄存器包括:

  • 程序状态寄存器组( PSRs 或xPSR)
  •  中断屏蔽寄存器组( PRIMASK, FAULTMASK,以及 BASEPRI)
  • 控制寄存器( CONTROL)

程序状态寄存器PSR在其内部又被分为三个子状态寄存器:应用程序 PSR( APSR)、中断号 PSR( IPSR)、执行 PSR( EPSR)。通过 MRS/MSR 指令,这 3 个 xPSR 即可以单独访问,也可以组合访问( 2 个组合, 3 个组合都可以)。当使用三合一的方式访问时,应使用名字“xPSR”或者“ PSR”,合体后的xPSR如下图所示。

PRIMASK, FAULTMASK 和 BASEPRI这三个寄存器用于控制异常(中断)的使能和除能。

控制寄存器(CONTROL)控制寄存器用于定义特权级别,还用于选择当前使用MSP还是PSP。

由于RTOS需占用一定的系统资源(尤其是RAM资源),只有μC/OS-II、embOS、salvo、FreeRTOS等少数实时操作系统能在小RAM单片机上运行。相对于C/OS-II、 embOS等商业操作系统,FreeRTOS操作系统是完全免费的操作系统,具有源码公开、可移植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行,其最新版本为6.0版。 作为一个轻量级的操作系统,FreeRTOS提供的功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能等,可基本满足较小系统的需要。 FreeRTOS内核支持优先级调度算法,每个任务可根据重要程度的不同被赋予一定的优先级,CPU总是让处于就绪态的、优先级最高的任务先运行。 FreeRT0S内核同时支持轮换调度算法,系统允许不同的任务使用相同的优先级,在没有更高优先级任务就绪的情况下,同一优先级的任务共享CPU的使用 时间。 FreeRTOS的内核可根据用户需要设置为可剥夺型内核或不可剥夺型内核。当 FreeRTOS被设置为可剥夺型内核时,处于就绪态的高优先级任务能剥夺低优先级任务的CPU使用权,这样可保证系统满足实时性的要求;当 FreeRTOS被设置为不可剥夺型内核时,处于就绪态的高优先级任务只有等当前运行任务主动释放CPU的使用权后才能获得运行,这样可提高CPU的运行 效率。 FreeRTOS的移植:FreeRTOS操作系统可以被方便地移植到不同处理器上工作,现已提供了ARM、MSP430、 AVR、PIC、C8051F等多款处理器的移植。FrceRTOS在不同处理器上的移植类似于μC/0S一II,故本文不再详述FreeRTOS的移 植。此外,TCP/IP协议栈μIP已被移植到FreeRTOS上,具体代码可见FreeRTOS网站 相对于常见的μC/OS—II操作系统,FreeRTOS操作系统既有优点也存在不足。其不足之处, 一方面体现在系统的服务功能上,如FreeRTOS只提供了消息队列和信号量的实现,无法以后进先出的顺序向消息队列发送消息;另一方 面,FreeRTOS只是一个操作系统内核,需外扩第三方的GUI(图形用户界面)、TCP/IP协议栈、FS(文件系统)等才能实现一个较复杂的系统, 不像μC/OS-II可以和μC/GUI、μC/FS、μC/TCP-IP等无缝结合。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值