FreeRTOS 源码概述

1.1FreeRTOS目录结构

使用STM32CubeMX创建的FreeRTOS工程中,FreeRTOS相关的源码如下:

主要涉及2个目录

Core:

                Inc目录下的FreeRTOSConfig.h是配置文件

                Src目录下的freertos.c是STM32CubeMX创建的默认人物

Middlewares\Third_Party\FreeRTOS\Source:

                根目录下是核心文件,这些文件是通用的

                portable目录下是移植时需要实现的文件

                                目录名为:【compiler】/[architecture]

                                比如:RVDS/ARM_CM3,这表示cortexM3架构在RVDS工具上的移植文件

1.2核心文件

FreeRTOS的最核心文件只有2个:

FreeRTOS/Source/tasks.c

FreeRTOS/Source/list.c

其他文件的作用如下:

1.3移植时涉及的文件

移植FreeRTOS时涉及的文件放在

FreeRTOS/Source/portable/[compiler]/[architecture]目录下,

比如RVDS/ARM_CM3,这表示cortexM3架构在RVDS或keil工具上的移植文件。

里面有两个文件:

        port.c

        portmacro.h

1.4头文件相关

FreeRTOS需要3个头文件目录:

                FreeRTOS本身的头文件:Middlewares\Third_Party\FreeRTOS\Source\include

                移植时用到的头文件:Middlewares\Third_Party\FreeRTOS\Source\portable\[compiler]\[architecture]

                含有配置文件FreeRTOSConfig.h的目录:Core/Inc

1.5内存管理

文件在 Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang 下,它也是放
在“portable”目录下,表示你可以提供自己的函数。

1.6入口函数

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

1.7数据类型和编程规范

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

TickType_t:

◼ FreeRTOS 配置了一个周期性的时钟中断: Tick Interrupt
◼ 每发生一次中断,中断次数累加,这被称为 tick count
◼ tick count 这个变量的类型就是 TickType_t
◼ TickType_t 可以是 16 位的,也可以是 32 位的
◼ FreeRTOSConfig.h 中定义 configUSE_16_BIT_TICKS 时, TickType_t 就是 uint16_t
◼ 否则 TickType_t 就是 uint32_t
◼ 对于 32 位架构,建议把 TickType_t 配置为 uint32_t
 

BaseType_t:

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

变量名有前缀

相关推荐

  1. freertos 分析一 list链表数据结构

    2024-06-10 14:46:01       48 阅读
  2. freertos 分析六 任务调度二

    2024-06-10 14:46:01       56 阅读
  3. postgresql wal 核心模块概述

    2024-06-10 14:46:01       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-10 14:46:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-10 14:46:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-10 14:46:01       82 阅读
  4. Python语言-面向对象

    2024-06-10 14:46:01       91 阅读

热门阅读

  1. Linux常见命令

    2024-06-10 14:46:01       27 阅读
  2. C++——时间复杂度

    2024-06-10 14:46:01       34 阅读
  3. 为何数据仓库需要“分层次”?

    2024-06-10 14:46:01       28 阅读
  4. tensorRT 自定义算子plugin的实现

    2024-06-10 14:46:01       30 阅读
  5. 使用git stash暂存改动,并备注改动内容

    2024-06-10 14:46:01       43 阅读
  6. Vue3学习

    2024-06-10 14:46:01       29 阅读
  7. 使用c语言实字符串倒置及逆波兰数(栈)

    2024-06-10 14:46:01       30 阅读
  8. web前端报名点:深入探索与报名流程指南

    2024-06-10 14:46:01       24 阅读
  9. 深拷贝&浅拷贝解析,从原理理解深拷贝

    2024-06-10 14:46:01       35 阅读
  10. 不要使用业务键作为数据库主键

    2024-06-10 14:46:01       34 阅读
  11. C# WPF入门学习主线篇(十八)—— Border布局容器

    2024-06-10 14:46:01       14 阅读