本质上,FreeRTOS是一种多任务系统,通过对中断的灵活运用,进而达到能够实时响应并处理事件的功能。
首先,列表构建FreeRTOS的基本。列表即链表,FreeRTOS中的链表都是首尾相连的环形链表,链表上还可以如果把FreeRTOS比作人,那么列表就像骨骼一样,操作系统的血肉都需要以列表为基础进行构建。
列表实现之后,就需要创建任务,就像人有了骨头之后,还要要有肌肉才能完成动作。说到任务就需要先定义任务控制块。通过任务控制块能够实现对任务的所有操作。定义好任务控制块之后就要配置动态或者静态的任务创建结构体。
之后我们定义一个任务创建函数,将所有的任务创建都放在里面统一管理,再将创建任务。我们还需要将任务塞进就绪列表,然后启动调度器。
当FreeRTOS中正在执行的任务暂时都不需要执行的时候,我们使用阻塞延时函数将他们挂起。但是操作系统不允许CPU等待,所以需要进入空闲任务。
因为是多任务系统,所有需要执行的任务都会放在就绪列表里,因此任务之间肯定会有优先级的区分。优先级会帮助操作系统确定哪个任务需要优先执行,如果有任务优先级相同,那么按优先级排序轮到他们这个优先级执行的时候,会轮流执行一段时间。当然,优先级高的随时都是最优先被执行的。
上面说到任务会在延时的时候挂起,这个时候我们会将需要挂起的任务从就绪列表中拿走而不是移除,因为这个任务还需要执行。因此我们需要将挂起的任务放到延时列表里,在延时结束后再放回就绪列表。
有了操作系统专用的挂起延时函数和延时列表、就绪列表等东西,就能实现就绪、运行、阻塞、挂起等四种状态的切换。
以上内容除了我们需要手动添加和创建任务以及硬件初始化,剩下的东西基本上不需要我们去修改。
到这里为止,操作系统最基础的东西就搭建完成了。