FreeRTOS 简单内核实现1 前言

news/2024/10/6 8:34:59

0、写在前面

为深入理解 RTOS 内核工作机制,笔者制作了名为 “FreeRTOS 内核简单实现” 的项目专栏 ,目标为自己动手从 0 到 1 编程一个简单的 RTOS 内核,从而实现任务并行工作的效果,主要实现了以下功能

  1. 静态创建任务
  2. 临界段保护
  3. 支持任务多优先级
  4. 任务阻塞延时
  5. 时间片轮询

注意:本项目不是仿真,而是基于 STM32F407 开发板从 0 到 1 编程实现的 RTOS 简单内核,最终会使用 GPIO 输出作为各种效果的演示,支持 Keil 与 CLion 两种开发环境,两者项目流程几乎一致,只是在汇编程序与工程配置上存在区别,不同之处会在教程中做明确说明

1、参考资料

  1. FreeRTOS内核实现_忆昔z的博客-CSDN博客
  2. GitHub - aeneag/FreeRTOS_kernel: 深入理解FreeRTOS内核,从零开始实现内核
  3. FreeRTOS内核实现与应用开发实战指南

2、准备工作

2.1、STM32 空工程

参考 STM32CubeMX教程1 工程建立 文章创建一个 STM32F407VGT6 空工程

参考 STM32CubeMX教程2 GPIO输出 - 点亮LED灯 文章初始化 4 个 LED 灯用于对本项目实现的 RTOS 内核验证

注意:空工程中 NVIC 选择 4 位抢占优先级,并应将 SysTick 和 PendSV 中断设置为最低优先级

2.2、创建 RTOS 文件目录

工程根目录下创建一个 RTOS 目录,目录结构如下

  1. RTOS
    1. Inc
      1. FreeRTOS.h,用来包含 RTOS 所有的头文件
      2. FreeRTOSConfig.h,用来配置裁剪 RTOS 的功能
      3. list.h,双向链表数据结构头文件
      4. portMacro.h,用来统一 RTOS 中用到的类型和定义一些功能宏
      5. task.h,任务管理头文件
    2. Src
      1. list.c,双向链表数据结构源文件
      2. prot.c,用来定义与底层芯片架构有关的函数和中断服务函数
      3. task.c,任务管理源文件

如果使用 Keil 则需要将上面创建的文件添加到 Keil 工程中,并在设置中增加头文件路径,具体步骤如下图所示

如果使用的 CLion 需要在 CMakeLists_template.txt 模板文件中添加 RTOS 目录下的源文件目录和头文件目录,具体如下所示

// 增加头文件目录
include_directories(${includes} RTOS/Inc)
// 增加源文件目录
file(GLOB_RECURSE SOURCES ${sources} "RTOS/*.*")

FreeRTOS.h

#ifndef INC_FREERTOS_H
#define INC_FREERTOS_H#include "FreeRTOSConfig.h"
#include "portMacro.h"
#include "list.h"
#include "task.h"
// 如果后续编程提示找不到 __DSB() 等汇编,可添加该 MCU 头文件
#include "stm32f4xx_hal.h"#endif //INC_FREERTOS_H

FreeRTOSConfig.h、list.h、portMacro.h 和 task.h

// XXX 替换为对应头文件名称
#ifndef XXX_H
#define XXX_H#include "FreeRTOS.h"#endif //XXX_H

list.c、prot.c 和 task.c

/*list.c*/
#include "list.h"/*prot.c*/
#include "FreeRTOS.h"/*task.c*/
#include "task.h"

按照上述列出的文件添加内容,添加完成后编译整个工程应该不会有错误发生,之后将在各个文件中添加程序逐步实现 RTOS 简单内核

3、约定

整个专栏文章做如下约定

  1. 代码段开头会添加该代码段中函数 / 定义所处的文件位置,如下所示代码段表示变量 xTickCount 应该在 task.c 文件中定义
/* task.c */
// 滴答定时器计数值
static volatile TickType_t xTickCount = (TickType_t)0U;
  1. 请自行安排本专栏文章中各个代码段在工程文件中的位置

4、专栏目录

如下所示为 "FreeRTOS 简单内核实现" 专栏所有文章链接

  1. FreeRTOS 简单内核实现1 前言
  2. FreeRTOS 简单内核实现2 双向链表
  3. FreeRTOS 简单内核实现3 任务管理
  4. FreeRTOS 简单内核实现4 临界段
  5. FreeRTOS 简单内核实现5 阻塞延时
  6. FreeRTOS 简单内核实现6 优先级
  7. FreeRTOS 简单内核实现7 阻塞链表
  8. FreeRTOS 简单内核实现8 时间片轮询

5、项目仓库

项目 github 工程代码链接如下 FreeRTOS 简单内核实现,标 Star 防丢失!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/43747.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

异常处理记录

异常处理过程: 当我们遇到异常时,我们首先需要把当前程序P的状态保存起来,而后跳到异常处理程序进行诊断。这里我们从指令集状态机S = {<R,M>}的视角来讨论咯 R为寄存器,M为内存。异常处理程序和P事两个不同的程序,它们使用不同的M,所以:只要异常处理程序不随意修…

kali

1.下载kali下载地址:Get Kali | Kali Linux 我们直接下载已经搭建好的kali虚拟机 ​​根据你的需求选择版本下载,一般都是选择64位的,点击VMware ​​直接开始下载,如果下载速度慢,请自行挂代理加速下载! 2.安装Kali下载完成之后是一个压缩包文件,请将其解压在无中文目录…

《操作系统原理》读书笔记

《操作系统原理》读书笔记信息 《操作系统原理(第4版)》 庞丽萍 华中科技大学出版社 摘录 绪论 存储程序式计算机冯诺依曼计算机体系结构从20世纪40年代至今,计算机体系结构不断地发展变化,但冯诺依曼计算机体系结构定义的一个存储程序式计算机的家族,几乎是当代所有计算机系…

SAP: SALV Grid 单元格颜色

SALV GRID 单元格颜色1、SAP: SALV Grid 单元格颜色 2、详细程序代码*&---------------------------------------------------------------------* *& Report Z17_43 *& *&---------------------------------------------------------------------* *& SA…

编程学习MarkDown学习

软件 Typora 标题 几个#代表几级标题,最多6级 基本操作 粗体 斜体 划线 分割线图片超链接 百度 列表 有序列表1, 2, 3. 无序列表 减号加空格 引用

GIT版本管理规范

版本管理规范文档编写中1. Git版本管理 1.1 分支命名先来一张典中典分支生命周期 以上生命周期仅作参考,不同开发团队可能有不同的规范,可自行灵活定义。 例如我们团队在开发时,至少需要保证以下流程: develop 分支和 hotfix 分支,必须从 master 分支检出 由 develop 分支…

基于禁忌搜索算法的TSP路径规划matlab仿真

1.程序功能描述 基于禁忌搜索算法的TSP路径规划,输出优化收敛曲线以及路线规划图。2.测试软件版本以及运行结果展示 MATLAB2022a版本运行3.核心程序for it = 1:Iterationit% 初始化本次迭代的最佳新解代价为正无穷 bestnewsol.Cost = inf;% 遍历所有动作并尝试应用它们 for …

Typora 样式

1:修改主题 可以根据 官方文档 修改主题 CSS。 配合左上角菜单 视图》开发者工具 来修改 CSS 效率更高。 2:我的主题 2.1:黑暗主题 根据自己的喜好在 night-new 主题上修改了点 https://blog.csdn.net/weixin_52023681/article/details/1202515232.2:光明主题 根据自己的喜…