一.单片机和RTOS区别
单片机是一种集成了处理器、内存、输入输出接口和外围设备控制器等功能的微型计算机系统。它通常用于控制简单的嵌入式系统,如家电、汽车电子、工业控制等。单片机具有低功耗、低成本和高可靠性等特点。
而RTOS(Real-Time Operating System)是一种实时操作系统,专门设计用于处理实时任务的操作系统。实时任务是指对实时性要求比较高,需要在规定的时间内完成的任务。RTOS为开发者提供了一套轻量级的任务调度、中断处理、内存管理和通信机制等,以满足实时任务的需求。
在嵌入式系统开发中,通常将RTOS和单片机结合使用。RTOS负责管理系统的实时任务,提供任务调度和中断处理等机制,而单片机则负责执行实时任务的具体操作。通过使用RTOS,开发者可以更好地管理系统资源,提高系统的稳定性和可靠性,并且更容易编写和维护实时任务代码。
!
二.什么是任务
一段代码+运行位置+运行环境
在计算机科学中,任务(Task)指的是一个需要计算机系统执行的工作单元或操作。任务可以是一个指令序列、函数、进程、线程或任何需要计算机执行的可定义的工作。
任务是计算机系统中的基本单位,通过将大型任务分解为更小的子任务,可以简化系统的设计和管理。每个任务通常有特定的输入、处理逻辑和输出。任务可以并行执行(在多个处理器或核心上同时执行)或顺序执行(按照特定的顺序依次执行)。
在操作系统中,任务通常是指进程或线程,它们是并发执行的实体。每个任务都有自己的代码、数据和运行环境。任务调度器负责按照一定的策略决定任务的执行顺序和分配系统资源。
在实时操作系统(RTOS)中,任务的概念更加重要,因为实时任务对于按时响应和满足时间限制非常关键。RTOS通过任务管理器来分配系统资源、调度任务并确保按时执行高优先级任务。
总而言之,任务是一个计算机系统中需要执行的工作单元,它可以是指令序列、函数、进程、线程或其他定义的操作单元。任务可以并行或顺序执行,是计算机系统的基本单位之一。
三.函数运行环境
LDR 读
STR 写
R13 sp 栈
R14 LR 返回地址
R15 PC 当前指令地址
四.栈的作用
任务切换需要保存所有寄存器,函数调用有些寄存器不需要保存,硬件中断,硬件和软件各保存一部分。
在使用STM32微控制器时,中断处理函数会自动将当前的现场信息保存到特定的栈中,这个栈被称为“中断栈”或者“内核栈”。当中断触发时,当前执行的指令会被中断处理函数替代,中断处理函数会将当前寄存器的值、标志位以及自动保存的其他相关信息保存在中断栈中。
具体来说,在STM32中,当发生中断时,处理器会自动完成以下步骤:
- 将当前正在执行指令的PC(程序计数器)压入中断栈。
- 保存当前执行指令的状态寄存器值(如CPSR/PSR)到中断栈。
- 保存其他相关寄存器的值,如R0-R12、LR(链接寄存器)等到中断栈。
- 将中断入口地址加载到PC中,开始执行中断服务程序。
- 中断服务程序执行完毕后,通过执行特定的中断返回指令(如“BX LR”)恢复现场。
- 恢复保存在中断栈中的相关寄存器的值,并将程序计数器(PC)指向之前保存的PC值,从中断处继续执行被中断的程序。
需要注意的是,不同的中断可能会有不同的优先级和特定的处理程序,因此对于每个中断,中断处理函数需要按照特定的处理方式进行编程,以确保正确保存和恢复现场。
在编程时,通常可以使用CMSIS(Cortex Microcontroller Software Interface Standard)提供的相关宏和函数来简化中断处理的实现,例如NVIC_SetPriority()
来设置中断优先级,NVIC_EnableIRQ()
来使能中断等。