WCH恒沁单片机-CH32V307学习记录2----FreeRTOS移植

RISC-V 单片机 FreeRTOS 移植

前面用了 5 篇博客详细介绍了 FreeRTOS 在 ARM Cortex-M3 MCU 上是如何运行的。

FreeRTOS从代码层面进行原理分析系列

现在我直接用之前的 RISC-V MCU 开发板子(CH32V307VCT6)再次对 FreeRTOS 进行移植,其实也不能说是从头到尾的移植,因为在官方的软件包中已经包含了对 FreeRTOS 移植的例子,但是这个软件包中很多通用的文件都是公用的,这样我们在实际使用的时候就不容易把某一个部分的功能处理的拉出来作为单独项目,这篇博客我就是打算帮助大家更快的解决这个问题。

将官方软件包中的例子抽出FreeRTOS部分

CH32软件包

官方软件包下载位置
在这里插入图片描述

在官方软件包中有这么一个文件叫做 CH32V30x_List.txt 这个里面就是软件包中各个文件夹中的内容的介绍。
在这里插入图片描述

这里,我的 CH32 库是目前(截至24年4月6日)最新的 2.4 版本。这里我使用的 IDE 是 MounRiver Studio,这个 IDE 也可以直接从官网获取。
MounRiver Studio 官网下载
在这里插入图片描述
对于 MounRiver Studio 的安装网上有很多,大家可以去网上找找,而且这并不是本篇的重点。

建立单独的项目文件夹

  1. 建立 FreeRTOS 文件夹,这里直接把 EVT 中也就是官方软件包中的 FreeRTOS 文件夹直接复制到,我们的想要的工程路径中。
  2. 在 FreeRTOS 中建立 SRC 目录,将 EVT\EXAM\SRC 文件夹中的 Core 和 Debug 目录也拷贝到 FreeRTOS 中的 SRC 中。
    在这里插入图片描述
  3. 在 FreeRTOS 中建立 Driver 目录,将 EVT\EXAM\SRC\Peripheral 文件夹拷贝到 Driver 目录中。
    在这里插入图片描述
  4. 在原本的 FreeRTOS_Core\Startup 中原本有两个 汇编 文件,这里我们把 D8 删掉,只保留 D8C 就可以,因为这个是匹配我们 CH32V307 MCU 的。
    在这里插入图片描述

简单配置 MounRiver Studio

经过上面的步骤我们已经把文件分门别类的放到文件夹中了,接下来配置一下 MounRiver Studio 让它能找到我们新加的文件。

右键项目,选择属性选项。
在这里插入图片描述

把本来出现在这里面的都删掉,我图片里面的删掉后自己自动生成的,这个不要再删除了。
在这里插入图片描述
刷新一下项目。
在这里插入图片描述
通过下面五步把咱们新加进去的文件告诉编译器,图片里面的不一定非常适合你的实际情况,你要根据的项目的路径进行填写。填的时候尽量像项目自带的几行一样,使用通配符的形式。 万一这里遇到报错也不要怕,一般都是没有找到文件,把 Error log 中提示找不到的文件全部添加以下就 ok 了。
在这里插入图片描述
现在让我们编译一下,看看有没有错误。

在这里插入图片描述

非常简单就搞定了~ 因为我们懂得了 FreeRTOS 的原理,在不同平台上移植都是很轻松的事情,在这里再次推荐大家看看之前关于 FreeRTOS 的五篇博客,已经会让你对 FreeRTOS 有一个原理上的认识,以后用起来都会特别的方便。

前五篇博客的 Link

现象确认

至此,我们利用官方的软件包已经非常轻松的把 FreeRTOS 的部分单独抽取出来作为一个新的项目并且编译成功了。
现在让我们看看官方软件包中例子都做了些什么事情,可以让我们可以很直观的看到 FreeRTOS 的运行时的情况。

在代码中,建立了两个任务去打印字符串和开关一个 GPIO,这个 GPIO 应该是控制灯的。这里我们先不管,直接从串口看字符串,这样更加直观。
在这里插入图片描述
在 main 函数中,有个叫做 USART_Printf_Init 的函数,这个从名字看就是知道是配置 printf 从串口进行输出的。

在这里插入图片描述
上面的代码看着很明显,是从 GPIOA 里面的 Pin 9 进行输出。让我们直接把串口的 RX 街道 PA9 上。
在这里插入图片描述
向板子上,下载一下我们刚才编译好的代码~ 从串口中的输出可以知道,我们的 FreeRTOS 已经跑起来了!

在这里插入图片描述


请添加图片描述

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

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

相关文章

【C语言自定义类型之----结构体,联合体和枚举】

一.结构体 1.结构体类型的声明 srruct tag {nemer-list;//成员列表 }varible-list;//变量列表结构体在声明的时候,可以不完全声明。 例如:描述一个学生 struct stu {char name[20];//名字int age;//年龄char sex[20];//性别 };//分号不能省略2.结构体…

C语言实现快速排序算法

1. 什么是快速排序算法 快速排序的核心思想是通过分治法(Divide and Conquer)来实现排序。 算法的基本步骤是: 1. 选择一个基准值(通常是数组中的某个元素),将数组分成两部分,使得左边的部分所有元素都小于…

Open CASCADE学习|在给定的TopoDS_Shape中查找与特定顶点 V 对应的TopoDS_Edge编号

enum TopAbs_ShapeEnum{TopAbs_COMPOUND,TopAbs_COMPSOLID,TopAbs_SOLID,TopAbs_SHELL,TopAbs_FACE,TopAbs_WIRE,TopAbs_EDGE,TopAbs_VERTEX,TopAbs_SHAPE}; 这段代码定义了一个名为 TopAbs_ShapeEnum 的枚举类型,它包含了表示不同几何形状类型的常量。这些常量通常…

刷题之Leetcode283题(超级详细)

283.移动零 283. 移动零https://leetcode.cn/problems/move-zeroes/ 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nu…

【了解下Oracle】

🌈个人主页:程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

golang 选择排序

学习笔记~ // Author sunwenbo // 2024/4/6 21:49 package mainimport "fmt"/* 选择排序基本介绍选择式排序也属于内部排序法,是从预排序的数据中按指定的规则选出某一元素,经过和其他元素重整,再依原则交换位置后达到…

快速了解FastAPI与Uvicorn是什么?

概念 什么是Uvicorn Python Uvicorn 是一个快速的 ASGI(Asynchronous Server Gateway Interface)服务器,用于构建异步 Web 服务。它基于 asyncio 库,支持高性能的异步请求处理,适用于各种类型的 Web 应用程序。 Uvi…

RUST语言值所有权之内存复制与移动

1.RUST中每个值都有一个所有者,每次只能有一个所有者 String::from函数会为字符串hello分配一块内存 内存示例如下: 在内存分配前调用s1正常输出 在分配s1给s2后调用报错 因为s1分配给s2后,s1的指向自动失效 s1被move到s2 s1自动释放 字符串克隆使用

窜天猴AI直播软件功能列表

迎新点名:新进直播间的用户随机指数级自由组合话术,并播报出来 礼物/关注:用户送礼物、关注以及灯牌事件同上根据话术指数级随机组合出来评论区关键字回复:用户评论后,根据预设置的关键字进行语音回复 自动寻品&…

IDEA2023创建SpringMVC项目

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 开发环境篇 ✨特色专栏: M…

【Redis】MISCONF Redis is configured to save RDB snapshots报错解决方案

【Redis】MISCONF Redis is configured to save RDB snapshots报错解决方案 大家好 我是寸铁👊 总结了一篇【Redis】MISCONF Redis is configured to save RDB snapshots报错解决方案✨ 喜欢的小伙伴可以点点关注 💝 前言 今天在登录redis时&#xff0c…

在GAZEBO中添加GPS模拟

文章目录 卫星导航能给机器人提供什么信息?gazebo测试环境 卫星导航能给机器人提供什么信息? 正常工作时,实际上可以提供机器人所需的所有定位信息,包括: 位置 姿态 速度等物理量 但是仅依靠卫星导航还不足以让机…