第三章 FreeRTOS源码概述

由浅入深学习FreeRTOS-系列文章目录

第一章 汇编指令以及堆栈概念
第二章 RTOS如何使用栈
第三章 FreeRTOS源码概述



前言

我们为什么要使用 FreeRTOS?为什么要进行移植?

为什么要使用 FreeRTOS?
实时性: 提供实时调度和中断管理,满足嵌入式应用的实时要求。
多任务管理: 允许并发运行多个任务,提高代码可维护性和可读性。
资源管理: 提供队列、信号量、互斥量等机制,高效管理系统资源。
便携性: 易于移植到不同硬件平台,方便代码迁移。
社区和支持: 拥有活跃的社区和丰富的文档资源,便于开发者获取帮助。

为什么要移植?
硬件差异: 适配不同硬件平台的寄存器、指令集和内存布局。
中断处理: 编写特定架构的中断处理代码,确保正确处理硬件中断。
上下文切换: 实现特定架构的上下文切换代码,保证任务调度正确。
定时器和时钟: 配置和管理硬件定时器,生成时钟滴答(tick)。
堆栈和内存管理: 配置堆栈和内存分配策略,适应不同硬件平台的内存布局。


先了解下FreeRTOS源码


一、FreeRTOS目录结构

1)FreeRTOSConfig.h: FreeRTOS 的配置文件,包含了许多 FreeRTOS 的配置选项,如任务优先级、堆大小、钩子函数等。
freertos.c: STM32CubeMX 创建的默认任务文件,通常包含任务创建和调度器启动代码。

CMSIS_RTOS_V2下的函数是FreeRTOS 的 CMSIS 封装,这些文件提供了基于 CMSIS-RTOS 标准的 API,使得 FreeRTOS 可以兼容 CMSIS-RTOS 标准。
include: FreeRTOS 的头文件目录,包含 FreeRTOS 内核及其他组件的头文件。

2)核心代码:
croutine.c: 协程实现文件,包含了 FreeRTOS 协程(coroutines)的实现。
event_groups.c: 事件组实现文件,用于管理事件组(event groups)。
list.c: 列表实现文件,FreeRTOS 内部使用的链表实现。
queue.c: 队列实现文件,包含了队列的实现和管理。
stream_buffer.c: 流缓冲区实现文件,用于管理流缓冲区。
tasks.c: 任务管理实现文件,包含了任务创建、删除、调度等功能。
timers.c: 软件定时器实现文件,包含了软件定时器的实现和管理。

3)portable: 移植层文件,包含特定架构和编译器的移植文件。
RVDS: 针对 RVDS、MAK-ARM 编译器的移植文件。
ARM_CM3: 针对 ARM Cortex-M3 架构的移植文件。
port.c, portmacro.h: 移植层核心文件,包含了 FreeRTOS 在 ARM Cortex-M3 上运行所需的特定实现。

4)MemMang: 内存管理文件,包含不同的堆实现。
heap_1.c, heap_2.c, heap_3.c, heap_4.c, heap_5.c: 不同的堆管理实现文件。每个文件提供一种不同的内存分配策略,用户可以根据需求选择合适的堆实现。


二、入口函数

在Core\Src\main.c的main函数里,初始化了FreeRTOS环境、创建了任务,然后启动调度器。源码如下:

/* Init scheduler */
  osKernelInitialize();  /* 初始化FreeRTOS运行环境 */
  MX_FREERTOS_Init();    /* 创建任务 */

  /* Start scheduler */
  osKernelStart();       /* 启动调度器 */

三、数据类型

1.数据类型

每个移植的版本都含有自己的portmacro.h头文件,里面定义了2个数据类型:

1)TickType_t:
配置一个周期性的时钟中断(Tick Interrupt)是为了实现任务调度和时间管理。这种中断被称为“时钟滴答”(Tick),每隔一个固定的时间间隔发生一次,而每发生一次中断,中断次数累加,这被称为tick_count。
TickType_t可以是16位的,也可以是32位的
FreeRTOSConfig.h中定义configUSE_16_BIT_TICKS时,TickType_t就是uint16_t
否则TickType_t就是uint32_t。

2)BaseType_t:
这是该架构最高效的数据类型
32位架构中,它就是uint32_t
16位架构中,它就是uint16_t
8位架构中,它就是uint8_t
BaseType_t通常用作简单的返回值的类型,还有逻辑值,比如pdTRUE/pdFALSE

2.变量名前缀

在这里插入图片描述

3.函数名前缀

在这里插入图片描述

4.宏名

宏的名字是大小,可以添加小写的前缀。前缀是用来表示:宏在哪个文件中定义。
在这里插入图片描述


通用的宏定义:
在这里插入图片描述

总结

以上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值