FreeRTOS实战——一、基于HAL库项目的FreeRTOS移植步骤

FreeRTOS实战——一、基于HAL库项目的移植步骤


文章目录

  • FreeRTOS实战——一、基于HAL库项目的移植步骤
  • 前言
  • 一、下载和移植FreeRTOS
  • 二、系统文件配置
    • 2.1 FreeRTOSConfig.h中添加如下3个配置:
    • 2.2 修改stm32f1xx_it.c


前言

废话不多说,在FreeRTOS基础:核心概念与入门指南中我们学习了FreeRTOS的概念,Github目录结构,如何创建一个新的项目。但是如何进行实际电脑操作呢,这里我们一起学习如何一步步配置,放心,以下流程在本机电脑上编译通过,0错误


一、下载和移植FreeRTOS

下载链接:FreeRTOS Github

  1. 学到了FreeRTOS,相信大家已经有了点灯的项目文件。我们在根目录下创建文件夹FreeRTOS,里面创建两个文件夹为portablesource
    在这里插入图片描述
    在这里插入图片描述

  2. 复制FreeRTOS的Source文件夹的7个.c文件到你的source文件夹下
    在这里插入图片描述

  3. 复制FreeRTOS源码portable文件夹下的Keil、RVDS、MemMang到你的portable文件夹下
    在这里插入图片描述

  4. 其中RVDS文件夹下保留对应你的开发芯片内核,复制FreeRTOS源码include文件夹到你的FreeRTOS文件夹下
    在这里插入图片描述

  5. 复制源码目录..\FreeRTOS\Demo\CORTEX_STM32F103_Keil中的FreeRTOSConfig.h到你喜欢的位置,我的是Core\Inc
    在这里插入图片描述

  6. 将FreeRTOS/Source和FreeRTOS/Portable添加到工程中
    在这里插入图片描述

  7. Source添加你的FreeRTOS中source的.c文件
    在这里插入图片描述

  8. Portable添加portable/MemMang中的heap_4.c和RVDS最里面的port.c文件

在这里插入图片描述

  1. 添加FreeRTOSConfig.h头文件
    在这里插入图片描述
  2. 添加以下两个目录,指定头文件目录
    在这里插入图片描述
    在这里插入图片描述

二、系统文件配置

2.1 FreeRTOSConfig.h中添加如下3个配置:

#define xPortPendSVHandler  PendSV_Handler
#define vPortSVCHandler     SVC_Handler
#define INCLUDE_xTaskGetSchedulerState   1

2.2 修改stm32f1xx_it.c

  1. 引入头文件
    #include “FreeRTOS.h”
    #include “task.h”
  2. 注释两个函数
    SVC_HandlerPendSV_Handler
  3. 添加SysTick函数
    申明extern void xPortSysTickHandler(void);
    SysTick_Handler中添加
if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) 
{xPortSysTickHandler();
}

完成
在这里插入图片描述

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

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

相关文章

编程初学者使用 MariaDB 数据库反射生成

编程初学者使用 MariaDB 数据库反射生成 数据库反射生成,是动词算子式通用代码生成器提供的高级功能,可以利用已有的数据库,反射生成相应数据库的前端和后端项目。此功能自动化程度很高,并且支持完善的元数据和数据编辑&#xff…

yolov6算法及其改进

yolov6算法及其改进 1、YOLOV6简介2、RepVGG重参思想3、YOLOv6架构改进3.1、Backbone方面3.2、SPP改进3.3、Neck改进3.4、Head改进 4、正负样本匹配与损失函数4.1、TaskAligned样本匹配4.2、VFL Loss分类损失函数4.3、SIOU损失函数4.4、DFL损失函数 1、YOLOV6简介 YOLOv6设计主…

Redis字符串底层结构对数值型的支持常用数据结构和使用场景

字符串底层结构 SDS (Simple Dynamic Strings) 是 Redis 中用于实现字符串类型的一种数据结构。SDS 的设计目标是提供高效、灵活的字符串操作,同时避免传统 C 字符串的一些缺点。 struct sdshdr {int len; // 已使用的长度int free; // 未使用的长度char bu…

面试241228

面试可参考 1、cas的概念 2、AQS的概念 3、redis的数据结构 使用场景 不熟 4、redis list 扩容流程 5、dubbo 怎么进行服务注册和调用,6、dubbo 预热 7如何解决cos上传的安全问题kafka的高并发高吞吐的原因ES倒排索引的原理 spring的 bean的 二级缓存和三级缓存 spr…

小程序配置文件 —— 13 全局配置 - window配置

全局配置 - window配置 这里讲解根目录 app.json 中的 window 字段,window 字段用于设置小程序的状态栏、导航条、标题、窗口背景色; 状态栏:顶部位置,有网络信号、时间信息、电池信息等;导航条:有一个当…

深度解析:Maven 和 Gradle 的使用比较及常见仓库推荐

Maven 和 Gradle 是 Java 项目中最常用的构建工具。它们各有优势,适用于不同的场景。本文将对两者进行详细的对比,并推荐一些常用的 Maven 和 Gradle 仓库,帮助开发者高效管理依赖。 一、Maven 和 Gradle 的使用比较 1.1 基本介绍 Maven 基…

STM32 与 AS608 指纹模块的调试与应用

前言 在嵌入式系统中,指纹识别作为一种生物识别技术,广泛应用于门禁系统、考勤机、智能锁等场景。本文将分享如何在 STM32F103C8T6 开发板上使用 AS608 指纹模块,实现指纹的录入和识别功能。 硬件准备 STM32F103C8T6 开发板AS608 指纹模块…

3GPP R18 MT-SDT

Rel-17 指定MO-SDT允许针对UL方向的数据包进行小数据包传输。对于DL,MT-SDT(即DL触发的小数据)可带来类似的好处,即 通过不转换到 RRC_CONNECTED来减少信令开销和UE功耗,并通过允许快速传输(小而少见的)数据包(例如用于定位)来减少延迟。 在R17中,NR_SmallData_INACTIVE的工…

微信小程序打印生产环境日志

微信小程序打印生产环境日志 新建一个log.js文件,写入以下代码: let log wx.getRealtimeLogManager ? wx.getRealtimeLogManager() : nullmodule.exports {debug() {if (!log) returnlog.debug.apply(log, arguments)},info() {if (!log) returnlog.i…

Flutter路由工具类RouteUtils,可二次开发,拿来即用

一、RouteUtils路由核心类 /*** 路由封装*/ class RouteUtils {RouteUtils._();static final navigatorKey GlobalKey<NavigatorState>();// App 根节点Contextstatic BuildContext get context > navigatorKey.currentContext!;static NavigatorState get navigato…

小程序基础 —— 02 微信小程序账号注册

微信小程序账号注册 小程序开发与网页开发不一样&#xff0c;在开始微信小程序开发之前&#xff0c;需要访问微信公众平台&#xff0c;注册一个微信小程序账号。 有了小程序的账号以后&#xff0c;才可以开发和管理小程序&#xff0c;后续需要通过该账号进行开发信息的设置、…

分類タスクの評価指標をわかりやすく解説!

分類タスクの評価指標をわかりやすく解説&#xff01; 1. 正解率&#xff08;Accuracy&#xff09;2. 適合率&#xff08;Precision&#xff09;3. 再現率&#xff08;Recall&#xff09;4. F1スコア&#xff08;F1 Score&#xff09;まとめ こんにちは&#xff01;今日は、機械…

两个链表的第一个公共结点

输入两个链表&#xff0c;找出它们的第一个公共结点。 当不存在公共节点时&#xff0c;返回空节点。 数据范围 链表长度 [1,2000] 保证两个链表不完全相同&#xff0c;即两链表的头结点不相同。 算法思想描述 如上图所示&#xff0c;两种链表的出现的情况只有图中2中&…

4.基于 Couchbase 构建数据仓库的元数据管理方案

在基于 Couchbase 构建数据仓库时&#xff0c;元数据管理至关重要&#xff0c;它能够帮助跟踪数据结构、数据源、ETL作业、分区、索引等信息。以下是几个关键步骤和实现思路&#xff1a; 1. 元数据的定义范围 元数据在数仓中的主要用途包括&#xff1a; 数据库和表的组织&…

OpenAI 12天发布会:AI革命的里程碑@附35页PDF文件下载

在人工智能的浪潮中&#xff0c;OpenAI的12天发布会无疑是2024年科技界的一场盛宴。从12月5日开始&#xff0c;OpenAI连续12天每天发布一个新应用或功能&#xff0c;标志着AI技术的又一次飞跃。本文将梳理这些激动人心的发布&#xff0c;带你一探究竟。 OpenAI发布会概览 Ope…

MMaudio AI:如何通过 AI 实现精准的视频到音频合成

1. 引言&#xff1a;视频音效制作的新纪元 无论是短视频创作者还是电影后期制作团队&#xff0c;音效始终是提升作品质量的关键。然而&#xff0c;手动调整音效不仅耗时&#xff0c;还容易出错。试想&#xff0c;如果一项 AI 技术能够根据视频内容自动生成与画面完美同步的音效…

理解数列和函数的极限

什么是数列 数列就是按照1定顺序排列的数字&#xff0c; 也可以理解为包含数字元素的队列 格式: a 1 , a 2 , a 3 , . . . , a n a_1, a_2, a_3, ..., a_n a1​,a2​,a3​,...,an​, n ∈ N n \in N n∈N 或者 { a n } \{ a_n \} {an​}, n ∈ N n \in N n∈N 其中 a n…

TOP K问题:利用堆排序找出数组中最小的k个数

设计一个算法&#xff0c;找出数组中最小的k个数。以任意顺序返回这k个数均可。 找小的数需要建大堆来解决&#xff0c;首先将数组中前K个数建成一个大堆&#xff0c;将从k1个数直到数组结束的所有数与堆顶的数进行比较&#xff0c;如果比堆顶的数小&#xff0c;则替换堆顶的数…

6-Gin 路由详解 --[Gin 框架入门精讲与实战案例]

Gin 是一个用 Go 语言编写的 HTTP Web 框架&#xff0c;以其高性能和简洁的 API 而闻名。它提供了一套强大的路由功能&#xff0c;使得开发者可以轻松地定义 URL 路由规则&#xff0c;并将这些规则映射到具体的处理函数&#xff08;handler&#xff09;。以下是关于 Gin 路由的…

【数据库初阶】Linux中库的基础操作

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; 数据库初阶 &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 亲爱的小伙伴们&#xff0c;大家好&#xff01;在这篇文章中&#xff0c;我们将深入浅出地为大家讲解 Linux…