3 FreeRTOS移植(从FREERTOS官网移植进自己的工程)

3 FreeRTOS移植

  • 1 获取FreeRTOS源码(熟悉)
    • 1.1 介绍源码内容
    • 1.2 FreeRTOS内核
      • 1.2.1 Demo文件夹
      • 1.2.2 Source文件夹
        • 1.2.2.1 portable文件夹
  • 2 FreeRTOS手把手移植(掌握)(重要)
    • 2.1 移植步骤
  • 3 系统配置文件说明(熟悉)
  • 4 课堂总结(掌握)

P6-P8

1 获取FreeRTOS源码(熟悉)

途径:
1 FreeRTOS官网
2 正点原子开发板的资料 A盘 V10.4.6的版本

1.1 介绍源码内容

在这里插入图片描述

注:
1 FreeRTOS-Plus中,多使用第三方的组件。不使用FreeRTOS的。
2 只关心内核即可。

1.2 FreeRTOS内核

内核文件夹中
在这里插入图片描述

1.2.1 Demo文件夹

Demo文件夹就是FreeRTOS的演示例程
在这里插入图片描述

1.2.2 Source文件夹

FreeRTOS源码本尊(内容比UCOS少很多)(FreeRTOS是轻量级,可被裁剪的)
在这里插入图片描述

列表、队列、任务相关的文件是3个核心典型文件。
加上前两个文件夹,共5个。
其他,按需要添加。

1.2.2.1 portable文件夹

FreeRTOS操作系统是一个软件层面的东西,是如何于硬件联系在一起的呢?
对硬件操作就需要操作寄存器。
portable文件夹里面的东西,就是连接“软件”与“硬件”的桥梁。
在这里插入图片描述

2 FreeRTOS手把手移植(掌握)(重要)

  目的:实现正点原子所有开发板的FreeRTOS移植。(没有使用CubaMX,手动移植后,也加深对工程文件的理解)
移植准备:
  1 FreeRTOS源码(FreeRTOS 202112.00)
  2 基础工程
  由于后续实验需使用LED、LCD定时器、内存管理等,所以使用阿波罗F429HAL库版本的“内存管理”的实验工程为基础工程,进行FreeRTOS的移植。

也就是将FreeRTOS移植进自己的工程。

自己使用阿波罗F767的内存管理实验和定时器实验,进行复刻。
FreeRTOS源码版本是FreeRTOS 202212.01。官网和Github都有下载。
按照STM32F767FreeRTOS开发手册V1.1进行移植复刻。
注:这个开发手册不是开发指南。跟视频里用的教程(开发手册)有出入。

详细移植步骤见"3.1 FreeRTOS详细移植步骤"

2.1 移植步骤

1 添加FreeRTOS源码
  将FreeRTOS源码添加至基础工程、头文件路径等。
2 添加FreeRTOSConfig.h配置文件。
  该文件是拆分FreeRTOS的功能,以及API函数的使能。
3 修改SYSTEM文件夹
  修改其中的sys.c、delay.c、uart.c。这几个文件是基于裸机和UCOS实现的。要应用到FreeRTOS是不能直接使用的,要进行修改。
4 修改中断相关的文件
  修改Systick中断(提供时间片)、SVS中断、PendSV中断。(这三个中断,是与任务切换相关的)
通过条件编译#if(!SYSTEM_SUPPORT_OS) #endif 将stm32f7xx_it.c中的三个函数处理掉。
5 添加应用程序
  验证移植是否成功。

详细移植步骤的细节,根据《FreeRTOS开发指南》的第二章操作。
按照第二章进行操作
后面自己移植时,可以来补充适用自己的文档。

3 系统配置文件说明(熟悉)

  FreeRTOSConfig.h配置文件的作用:
  对FreeRTOS进行功能配置和裁剪(通过宏),以及API函数的使能。
学习途径:
1 官方在线文档,查看每个宏的说明(全英文)。
2 正点原子《FreeRTOS开发指南》第三章的内容,FreeRTOS系统配置。
相关宏大致可分为三大类:
1 INCLUDE 配置FreeRTOS中可选的API函数。
2 config 完成FreeRTOS的功能配置和裁剪
3 其他配置项 对PendSV中断服务函数进行宏定义 对SVC中断服务函数进行宏定义,宏定义后,与port.c进行连接。(两个中断服务函数)

宏很多,目前只需要有感性的认识即可,随着后面宏的使用,就会逐渐熟悉起来。
浅识

下面根据移植的工程,进行说明。

位、字节、字的关系
位(bit):一位二进制数
字节(Byte):8位
字(Word):计算机进行数据储存和数据处理的运算单位。
32位计算机,1字=32位(=4字节)
64位计算机,1字=64位(=8字节)

1 CPU不能闲置,需创建“空闲任务”,优先级为0,最低。
2 动态分配内存时,从总堆栈(定义为10k,10x1024Byte=10KB)分配。静态时,定义数组,进行分配。
3 HOOK(钩子)函数,回调函数。类似于中断服务函数,里面的内容需要自己写。
4 “断言?” 打印错误信息的宏定义。

4 课堂总结(掌握)

4分钟总结。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GraphHopper-map-navi_路径规划、导航(web前端页面版)

文章目录 一、项目地址二、踩坑环境三、问题记录3.1、graphhopper中地图问题3.1.1. getOpacity不存在的问题3.1.2. dispatchEvent不存在的问题3.1.3. vectorLayer.set(background-maplibre-layer, true)不存在set方法3.1.4. maplibre-gl.js.map不存在的问题3.1.5. Uncaught Ref…

学习记录:ESP32控制舵机 FREERTOS BLE

控制舵机 PWM信号 PWM信号是一种周期性变化的方波信号,它有两个关键参数: 周期(Period):一个完整的PWM信号的时间长度,通常用秒(s)或毫秒(ms)表示。占空比…

【音视频SDL2入门】创建第一个窗口

文章目录 前言创建窗口的流程需要使用的函数1. 初始化 SDL 库2. 创建 SDL 窗口3. 获取与窗口关联的表面SDL_FillRect 函数介绍4. 更新窗口表面5. 延迟一定时间6. 销毁窗口并退出 SDL 库示例代码总结 前言 SDL2(Simple DirectMedia Layer)是一个跨平台的…

Flask jsonify 格式化 DateTime

前言 搜索发现 提供的 代码都不能实现 以下 是我的环境 Python 3.10.14 Flask 3.0.3 Werkzeug 3.0.3 解析 Flask 的 Json 方法是由 flask.json.provider.DefaultJSONProvider 代理实现 调用 flask.json.provider._default 做具体的格式化 思路: 掩盖原方法 指向 …

C++ STL remove, remove_if 用法

一&#xff1a;功能 移除序列中&#xff08;满足给定条件&#xff09;的元素&#xff0c;该操作并不是真的将元素删除&#xff0c;而是序列的size不变&#xff0c;只是更新了迭代器&#xff0c;该函数会返回最后一个未删除元素的位置。 二&#xff1a;用法 #include <vect…

FFmpeg解复用器如何从封装格式中解析出不同的音视频数据

目录 1、ffmpeg介绍 2、FFMPEG的目录结构 3、FFmpeg的格式封装与分离 3.1、数据结构 3.2、封装和分离(muxer和demuxer) 3.2.1、Demuxer流程 3.2.2、Muxer流程 4、总结 4.1、播放器 4.2、转码器 C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续…

微服务上(黑马)

文章目录 微服务011 认识微服务1.1 单体架构1.2 微服务1.3 SpringCloud 2 微服务拆分2.1 熟悉黑马商城2.2 服务拆分原则2.2.1.什么时候拆2.2.2.怎么拆 2.3 拆分服务2.3.1 拆分商品管理功能模块2.3.2 拆分购物车功能模块 2.4 远程调用2.4.1 RestTemplate2.4.2.远程调用 2.5 总结…

顺序表算法题

在学习了顺序表专题后&#xff0c;了解的顺序表的结构以及相关概念后就可以来试着完成一些顺序表的算法题了&#xff0c;在本篇中将对三道顺序表相关的算法题进行讲解&#xff0c;希望能对你有所帮助&#xff0c;一起加油吧&#xff01;&#xff01;&#xff01; 1.移除元素 2…

nginx转发netty长链接(nginx负载tcp长链接配置)

首先要清楚一点&#xff0c;netty是长链接是tcp连接不同于http中负载在http中配置server监听。长连接需要开启nginx的stream模块(和http是并列关系) 安装nginx时注意开启stream&#xff0c;编译时加上参数 --with-stream &#xff08;其他参数根据自己所需来加&#xff09; …

如何做code review(嵌入式行业)

1. 什么是Code Review 2. Code Review利弊 2.1. 利 降低错误风险提升编码能力方便负责人把控项目 2.2. 弊 影响工作效率执行不到位&#xff0c;反而导致意义缺失 3. 代码规范 code review的标准体现 4. Code Review流程 5. 问题与规避方案

把本地项目推送到远程仓库

笔记背景&#xff1a;刚刚在本地创建了一个新项目 project&#xff0c;需要推送到git 在git上创建一个名为 project 的远程仓库&#xff0c;创建完成后现在远程仓库是空的本地打开 project 项目&#xff0c;初始化git仓库 git init把当前工作目录中所有变动&#xff08;包括新…

脊髓损伤的小伙伴锻炼贴士

Hey小伙伴们~&#x1f44b; 今天要跟大家聊一个超燃又超温馨的话题&#xff01;&#x1f31f; 对于我们脊髓损伤的小伙伴们来说&#xff0c;保持身体活力&#xff0c;不仅是健康的小秘诀&#xff0c;更是拥抱美好生活的超能量哦&#xff01;&#x1f4aa; #脊髓损伤# 首先&…

Cache 替换策略--PLRU算法详解

一、引言 LRU&#xff08;Least Recently Used&#xff09;是 cache 的经典替换策略之一&#xff0c;但当 Cache 的路数比较大时&#xff08;多路组相连结构&#xff09;&#xff0c;实现 LRU 的硬件开销就会变得很大。现代处理器一般会考虑使用 PLRU&#xff08;pseudo-LRU&a…

一文带你搞懂C++运算符重载

7. C运算符重载 C运算符重载 什么是运算符重载 运算符重载赋予运算能够操作自定义类型。 运算符重载前提条件&#xff1a; 必定存在一个自定义类型 运算符重载实质: 就是函数调用 友元重载 类重载 在同一自定义类型中&#xff0c;一个运算符只能被重载一次 C重载只能重载…

人工智能与机器学习原理精解【5】

文章目录 最优化基础理论特征值&#xff08;Eigenvalue&#xff09;特征向量&#xff08;Eigenvector&#xff09;特征值和特征向量的重要性计算方法特征值一、特征值分解的定义二、特征值分解的算法三、特征值分解的例子 正定矩阵Hessian矩阵的特征值Hessian矩阵的含义Hessian…

记Redis 被攻击,数据被定时清除的问题

问题描述 搞自己项目的时候&#xff0c;在云服务器上部署了redis&#xff0c;没有设密码&#xff0c;结果用了几天发现数据老是丢失&#xff0c;排查了过期时间以及内存大小都没有问题&#xff0c;然后注意到了几个陌生的backup1、buckup2、backup3、backup4数据&#xff1a; …

vue element-ui日期控件传参

前端&#xff1a;Vue element-ui <el-form-item label"过期时间" :rules"[ { required: true, message: 请选择过期时间, trigger: blur }]"><el-date-picker v-model"form.expireTime" type"date" format"yyyy-MM-dd&…

FastGPT部署和接入使用重排模型bce-reranker-base

bce-reranker简介 bce-reranker 是一种专门用于信息检索和自然语言处理领域中的重排序(reranking)模型。这种模型由北京智源人工智能研究院(BAAI)开发,是 BGE(BAAI General Embedding)系列的一部分。BGE 系列模型专注于提供通用的嵌入表示,而 bce-reranker 则更进一步…

【C++】透析类和对象(下)

有不懂的可以翻阅我之前文章&#xff01; 个人主页&#xff1a;CSDN_小八哥向前冲 所属专栏&#xff1a;CSDN_C入门 目录 拷贝构造函数 运算符重载 赋值运算符重载 取地址运算符重载 const成员函数 取地址重载 再探构造函数 初始化列表 类型转换 static成员 友元 内…