裸机系统和多任务系统
我们一般在接触到操作系统之前,使用的系统都是用裸机来跑的,什么意思呢?就是我们所有的处理程序的内容都是放在一个大的while循环当中的。裸机系统通常分成轮询系统和前后台系统。
轮询系统:轮询系统即是在裸机编程的时候,先初始化好相关的硬件,然后让主程序在一个死循
环里面不断循环,顺序地做各种事情
前后台系统:相比轮询系统,前后台系统是在轮询系统的基础上加入了中断。外部事件的响应在中
断里面完成,事件的处理还是回到轮询系统中完成,中断在这里我们称为前台, main 函数里面的无限循环我们称为后台。
多任务系统:相比前后台系统,多任务系统的事件响应也是在中断中完成的,但是事件的处理是在
任务中完成的。在多任务系统中, 任务跟中断一样,也具有优先级,优先级高的任务会被优先执行。当一个紧急的事件在中断被标记之后,如果事件对应的任务的优先级足够高,就会立马得到响应。相比前后台系统,多任务系统的实时性又被提高了。
上面提到的多任务系统就是我们要使用的操作系统,使用操作系统的主要目的是提高我们任务的实时性和提高我们CPU的利用率。
如何开始使用RTOS?
我们可以在官网选择下载好别人已经写好的RTOS我们直接拿来移植行了,像国内外的操作系统都有很多例如FreeRTOS、RT-Thread、UCOS、LiteOS.....,我们只需要选择一款进行学习,其实在都学习之后我们会发现他们的原理其实是差不多的,可以说学懂一款其他的实时操作系统学习来也快得很。
FreeRTOS
这里我选择的是FreeRTOS,主要是我最早接触的操作系统是这个,并且CubeMX支持使用FreeRTOS创建工程(简直不要太方便)。
上面是官方的源码
我们可以看到这层目录有很多.c文件像这些文件都是为了帮我们实现RTOS里面要使用到的工具而创建的,例如链表、队列、任务管理、软定时器,这些内容可以说我们在之后使用RTOS当中是会用到非常多的。
Portable文件
点击进入portable文件,可以看到 FreeRTOS 针对不同的芯片架构和不同的编译器提供了不同的移植文件,这里我们打开RVDS,为什么不选择Keil这个文件呢?因为当你打开的时候你会发现里面有这么一句话“See-also-the-RVDS-directory.txt”。
打开之后我们会发现这个文件夹里针对了ARM很多不同版本
这里我使用时M3
继续打开
“port.c”与“portmacro.h”
两个文件, port.c 文件里面的内容是由 FreeRTOS 官方的技术人员为 Cortex-M3 内核的处理 器写的接口文件,里面核心的上下文切换代码是由汇编语言编写而成。这两个文件是很关键的我RTOS处理任务进行任务切换都是要靠它实现的。
这两个函数就是实现任务切换的关键,主要是使用汇编写的,这两个函数主要是为了操作我们的系统服务调用和“可悬挂请求”
MemMang
这个文件夹里面涉及到的内容就主要是和我们的内存有关的,因为我们在使用操作系统的时候都涉及到一个给线程分配内存的这样一个问题,所以我们需要一个内存管理,五个文件夹都是实现了内存管理
可裁剪的操作系统
实际上我们使用到的FreeRTOS是一个可以裁剪的实时操作内核,应用于不同的处理器平台,用户可以通过修改这个 FreeRTOS 内核的配置头文件来裁剪 FreeRTOS 的功能。
我们可以选择自己去实现这个文件,当然这个难度会稍微有一点大,所以我们可以直接复制FreeRTOS提供的demo上面的配置文件
我们可以看到这里可以配置我们的时钟,任务调度器.....,以及后期我们可以添加一些宏进去
小结
在搞清楚FreeRTOS各个文件夹的作用之后,我们在移植的时候如果报错也可以迅速地定位问题查找问题所在。
我们在学习的时候总是要学习高级的一些东西,之前我觉得操作系统太难了,太高级了,裸机对我们来说完全够用了。如果这么想的话,我们的技术很难再上一层楼,所以要不断挑战新技术(对于我们个人而言的“新”)。