FreeRTOS逻辑梳理

        本质上,FreeRTOS是一种多任务系统,通过对中断的灵活运用,进而达到能够实时响应并处理事件的功能。

        首先,列表构建FreeRTOS的基本。列表即链表,FreeRTOS中的链表都是首尾相连的环形链表,链表上还可以如果把FreeRTOS比作人,那么列表就像骨骼一样,操作系统的血肉都需要以列表为基础进行构建。

        列表实现之后,就需要创建任务,就像人有了骨头之后,还要要有肌肉才能完成动作。说到任务就需要先定义任务控制块。通过任务控制块能够实现对任务的所有操作。定义好任务控制块之后就要配置动态或者静态的任务创建结构体。

        之后我们定义一个任务创建函数,将所有的任务创建都放在里面统一管理,再将创建任务。我们还需要将任务塞进就绪列表,然后启动调度器。

        当FreeRTOS中正在执行的任务暂时都不需要执行的时候,我们使用阻塞延时函数将他们挂起。但是操作系统不允许CPU等待,所以需要进入空闲任务。

        因为是多任务系统,所有需要执行的任务都会放在就绪列表里,因此任务之间肯定会有优先级的区分。优先级会帮助操作系统确定哪个任务需要优先执行,如果有任务优先级相同,那么按优先级排序轮到他们这个优先级执行的时候,会轮流执行一段时间。当然,优先级高的随时都是最优先被执行的。

        上面说到任务会在延时的时候挂起,这个时候我们会将需要挂起的任务从就绪列表中拿走而不是移除,因为这个任务还需要执行。因此我们需要将挂起的任务放到延时列表里,在延时结束后再放回就绪列表。

        有了操作系统专用的挂起延时函数和延时列表、就绪列表等东西,就能实现就绪、运行、阻塞、挂起等四种状态的切换。

        以上内容除了我们需要手动添加和创建任务以及硬件初始化,剩下的东西基本上不需要我们去修改。

        到这里为止,操作系统最基础的东西就搭建完成了。

        

FreeRTOS 是一个基于优先级的实时操作系统(RTOS),它提供了许多 API,用于任务管理、内存管理、定时器、队列和信号量等。FreeRTOS底层逻辑主要由以下几个方面组成: 1. 任务调度:FreeRTOS 采用优先级抢占式调度策略,当有多个任务处于就绪状态时,FreeRTOS 会根据任务优先级决定当前执行哪个任务。当一个更高优先级的任务处于就绪状态时,FreeRTOS 会立即暂停当前任务并转而执行更高优先级的任务。 2. 内存管理:FreeRTOS 支持动态内存分配和静态内存分配两种方式。动态内存分配使用 C 语言标准库中的 malloc() 和 free() 函数,而静态内存分配则要求用户在编译时为每个任务分配一定的内存空间。 3. 定时器:FreeRTOS 提供了多种定时器,包括软件定时器和硬件定时器。软件定时器是基于系统时钟的,可以在任意任务中创建和删除。硬件定时器则是通过系统时钟和硬件计数器结合使用实现的,可以精确地计算时间。 4. 队列和信号量:FreeRTOS 提供了队列和信号量两种 IPC 机制。队列是一种先进先出(FIFO)的数据结构,用于在任务之间传递数据。信号量则是一种计数器,用于实现任务之间的同步和互斥。 5. 中断处理:FreeRTOS 支持中断处理。当中断发生时,FreeRTOS 会根据中断优先级暂停当前任务并转而执行中断服务程序。在中断服务程序中,可以使用 FreeRTOS 提供的 API 实现任务之间的通信和同步。 总之,FreeRTOS底层逻辑涉及到任务管理、内存管理、定时器、IPC 机制和中断处理等多个方面,这些方面共同构成了 FreeRTOS 的核心功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值