32F103C8T6基于HAL库移植uC/OS-III及逻辑分析仪波形观测
前言
举个例子让你了解裸机与RTOS区别
while(1)
{
吃一口饭();
喝一口水();//处于同一优先级
}
对于裸机,一口水一口饭一口水一口饭
对于RTOS,可以让你实现这一毫秒吃饭,下一毫秒喝水,再一毫秒吃饭,下一毫秒喝水
这体现实时性
还可以设置优先级
裸机的特点
1、实时性差,应用程序轮流执行
2、delay空等待,CPU不执行其他代码
3、结构臃肿,实现功能都放在无限循环
RTOS特点
1、分而治之,实现时间分片,任务分解为多个任务
2、延时函数,任务调度Delay的时候其他任务可以执行
3、抢占式,高优先级任务抢占低优先级任务,
4、任务堆栈,当任务被打断,任务相关寄存器值会被保存到任务堆栈,每个任务都有自己的栈空间,从而实现高优先级任务执行后被打断的任务不从头开始而是接着执行
一、UCOSIII简介
UCOSIII是一个可裁剪、可剥夺型的多任务内核,而且没有任务数限制。UCOSIII提供了实时操作系统所需的所有功能,包括资源管理、同步、任务通信等。
UCOSIII是用C和汇编来写的,其中绝大部分都是用C语言编写的,只有极少数的与处理器密切相关的部分代码才是用汇编写的, UCOSIII结构简洁,可读性很强!非常适合初次接触嵌入式实时操作系统学生、嵌入式系统开发人员和爱好者学习。
1、任务
任务(线程)是简单的程序。单CPU 中,在任何时刻只能是一个任务被执行。
任务看起来像C 函数。在大多数嵌入式系统中,任务通常是无限循环的。任务不能像C 函数那样,它是不能return 的。
在UCOSIII中任务是以何种面貌存在的呢?
在UCOSIII中任务就是程序实体,UCOSIII能够管理和调度这些小任务(程序)。UCOSIII中的任务由三部分组成:任务堆栈、任务控制块和任务函数。
- 任务堆栈:上下文切换的时候用来保存任务的工作环境,就是STM32的内部寄存器值。
任务堆栈是任务的重要部分,堆栈是在RAM中按照“先进先出(FIFO)”的原则组织的一块连续的存储空间。为了满足任务切换和响应中断时保存CPU寄存器中的内容及任务调用其它函数时的需要,每个任务都应该有自己的堆栈。
2、前后台系统
早期嵌入式开发没有嵌入式操作系统的概念 ,直接操作裸机,在裸机上写程序,比如用51单片机基本就没有操作系统的概念。通常把程序分为两部分:前台系统和后台系统。
简单的小系统通常是前后台系统,这样的程序包括一个死循环和若干个中断服务程序:应用程序是一个无限循环,循环中调用API函数完成所需的操作,这个大循环就叫做后台系统。中断服务程序用于处理系统的异步事件,也就是前台系统。前台是中断级,后台是任务级。
3、RTOS系统
RTOS全称为:Real Time OS,就是实时操作系统,强调的是:实时性。实时操作系统又分为硬实时和软实时。硬实时要求在规定的时间内必须完成操作 ,硬实时系统不允许超时,在软实时里面处理过程超时的后果就没有那么严格。
在实时操作系统中,我们可以把要实现的功能划分为多个任务,每个任务负责实现其中的一部分,每个任务都是一个很简单的程序,通常是一个死循环。
4、可剥夺型内核
RTOS的内核负责管理所有的任务,内核决定了运行哪个任务,何时停止当前任务切换到其他任务,这个是内核的多任务管理能力。多任务管理给人的感觉就好像芯片有多个CPU,多任务管理实现了CPU资源的最大化利用,多任务管理有助于实现程序的模块化开发,能够实现复杂的实时应用。可剥夺内核顾名思义就是可以剥夺其他任务的CPU使用权,它总是运行就绪任务中的优先级最高的那个任务。
二、过程记录
设置PA3和PC13推挽输出
具体详细keil配置以及代码修改参考
三、实验结果
LED_RT_thread
https://blog.csdn.net/weixin_56102526/article/details/121952050
https://blog.csdn.net/K1253042283/article/details/108913938