FreeRTOS
以下内容是根据野火的FreeRTOS内核实现与应用开发实战指南 以及AI搜索进行集合的记录。
为什么学习RTOS
我们进入嵌入式这个领域开始,首先在大学时开始接触电路、汇编以及51单片机,后来是stm32,在到操作系统RTOS、linux等。stm32和51都是裸机编程。常见的RTOS有国外的FreeRTOS、μC/OS、RTX和国内的FreeRTOS、Huawei LiteOS和AliOS-Things等,其中,开源且免费的FreeRTOS的市场占有率最高。
在裸机系统中,所有的程序都是自己来完成的,并且所有的操作或者实现的工程都是在一个无线的循环中的,但是现在的生活中的电子产品不在满足裸机开发,更加多的功能,更加复杂的需求,这些都需要由操作系统来实现。
第一章 初识FreeRTOS
FreeRTOS于2018年被亚马逊收购,改名为AWS FreeRTOS,版本号升级为V10,且开源协议也由原来的GPLv2+修改为MIT,与GPLv2+相比,MIT更加开放,你完全可以理解为完全免费。V9以前的版本还是维持原样,V10版本相比于V9就是加入了一些物联网相关的组件,内核基本不变。亚马逊收购FreeRTOS也是为了进军物联网和人工智能领域。本书还是以V9版本来讲解。
第二章 新建FreeRTOS工程
1、新建本地工程文件
在开始创建工程之前,我们现在本地中新建一个文件夹用于存放工程,在该文件夹中新建各个文件夹和文件,下面是文件夹的包含关系和具体的作用。
2、使用keil创建工程
3、在keil工程中新建文件组
在工程中添加user、FreeRTOS/Posrt、FreeRTOS/source、doc这个几个文件组。
4、在keil工程中添加文件
在工程中添加组后,需要将本地工程中新建的文件添加到工程中。
第三章 裸机系统与多任务系统
1、裸机系统
裸机系统通常分为轮询系统和前后台系统。
轮询系统
轮询系统就是在裸机编程中,先编写硬件的相关初始化,然后在mian主程序中的while死循环中不断的循环,依次的实现功能。例如LED灯反转、串口输出等,只是按照顺序执行的功能;但是要是实现按键等操作,就需要检测外部信号,这时在用轮询系统,就会实时性大大降低。
前后台系统
相对于轮询系统,前后台系统就是在其基础上加入中断,前台依然按照顺序执行,但是当后台由中断产生时,前台就要停止手上的任务,执行后台的任务,只有当中断任务执行完成后,再返回执行刚才放下的前台任务。
2、多任务系统
相对于轮询系统、前后台系统,多任务系统优化的是前台。再前台按顺序执行的基础上,我们增加一个优先级功能。在多任务系统中,任务和中断都具有优先级,但是普遍中断的优先级都比任务的优先级高。所以当中断信号产生时,还是优先执行中断。而前台执行的任务那,就也有紧急的和不紧急的区别,高优先级的比低优先的任务优先执行。
除了优先级还有优化了循环的问题。在前后台系统中,依然是在一个大循环中执行,而多任务系统中,我们可以根据程序的功能,把程序主体分为一个k一个独立的、互不干扰的的小任务。每个任务都具备优先级,由操作系统调度管理。