RT-Thread移植到STM32F407

1、获取RT-Thread源码

首先到rtthread官网下载rt-thread nano后解压

解压后打开后内容如下。

2、系统结构

各文件夹的作用如下:

Rt-Thread-nano源码结构
文件夹描述
bsp板级支持包
components/finshRT-Thread组件
docs文档信息
include头文件
libcpu/arm与arm处理器相关的接口文件
libcpu/risc-v与risc-v处理器相关的接口文件
srcRT-Thread内核源码

bsp里面存放了不同板子的示例,只需要保留board.crtconfig.h这两个配置文件即可,其他的均可删除。

docs存放了移植教程的地址,可以删掉。

libcpu里存放与处理器相关的接口文件,因为本次是移植到STM32F407,所以只需要保留libcpu/arm/cortex-m4这一个文件夹即可,其他皆可删除。

3、移植RT-Thread

3.1、添加源码

移植RT-Thread到keil的STM32407工程。首先打开STM32F407的keil工程,打开工程项目管理 Manage Project Items,新建文件夹,并将下列c文件添加到文件夹中。

  • 添加bsp文件中的board.c、rtconfig.h文件
  • 添加src文件夹中的所有.c文件
  • 添加libcpu\arm\cortex-m4文件夹下的context_rvds.S和cpuport.c文件

注:文件夹名称可以自己定义。

3.2、添加头文件目录

打开项目设置对话框,在C/C++选项卡中添加下图所示的头文件路径。

头文件路径如下:

  • \components\finsh
  • \include\libc
  • \includ
  • \bsp

注:如果board.c、rtconfig.h文件挪动到其它目录,确保将该目录添加进去。

4、编译工程

编译后发现没有RTE_Components.h这个文件,头文件 RTE_Components.h是在 MDK中添加 RT-Thead Package 时由 MDK 自动生成的,目前我们没有使用 MDK 中自带的 RT-Thread 的 Package,所以这个头文件不存在,如果包含了该头文件,编译的时候会报错,需要修改 rtconfig.h 头文件,将相关代码注释掉。

打开rtconfig.h找到#include "RTE_Components.h"将其注释

再编译,报告3个错误:

因为RT-Thread系统把这三个中断函数已经实现了,但是在stm32f10x_it.c这个文件中,也有这个三个中断函数,但是函数内是空的,没有实现。需要将 stm32f4xx_it.c 文件中的这个三个中断函数注释掉。

因为我的工程中原先移植了其它操作系统,所以要把原来操作系统中的对应函数注释掉。如果暂时未应用RT-Thread,也可以在context_rvds.S中注释掉这几个函数。

5、使用RT-Thread

5.1、添加头文件

在工程中应用RT-Thread系统的头文件。

#include <rthw.h>
#include <rtthread.h>

5.2、使能RT_USING_HEAP定义

RT-Thread中习惯使用动态内存堆新建线程,因此在rt_config.h中取消掉#define RT_USING_HEAP的注释。如果不取消,则任务和信号创建等函数都不会定义(h文件有声明)。

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

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

相关文章

根文件系统的其他测试

文章目录 一、hello测试程序编写二、程序后台运行1.在后台运行方法2.中文显示测试3.开机自动启动测试 一、hello测试程序编写 &#x1f4a6;我们使用 Linux 的目的就是运行我们自己的软件&#xff0c;我们编译的应用软件一般都使用动态库&#xff0c;使用动态库的话应用软件体…

vue 钩子函数updated什么时候触发

触发时机 updated是Vue生命周期钩子函数之一&#xff0c;在组件的数据变化导致虚拟DOM重新渲染并应用到实际DOM之后触发。具体来说&#xff0c;updated会在以下几种情况下被触发&#xff1a; 初始渲染完成后&#xff1a;当组件首次渲染完成并将虚拟DOM渲染到实际DOM之后&#…

获取两个时间之间的月份

工具类 public static List<String> getMonthBetweenDate(Date startDate, Date endDate) {ArrayList<String> result new ArrayList<String>();SimpleDateFormat sdf new SimpleDateFormat("yyyy.MM");//格式化&#xff0c;调整为自己需要的格…

摩菲Murphy显示器显示表 总线编程器维修PV780B

Murphy仪器维修包括&#xff1a;摩菲数字显示器&#xff1b;摩菲监视仪表&#xff1b;摩菲CAN总线控制器等维修 维修故障包括&#xff1a;黑屏、指示灯无显示&#xff0c;触摸屏上电无反应&#xff0c; 上电蓝屏、白屏&#xff0c;通电几分钟后屏幕变为蓝屏&#xff0c;主板故…

班级综合测评|基于Springboot+vue的班级综合测评管理系统(源码+数据库+文档)

目录 基于Springbootvue的“智慧食堂”系统 一、前言 二、系统设计 三、系统功能设计 1 管理员功能模块 2学生功能模块 3教师功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大…

应用系统集成企业微信的技术方案和最佳实践

本文以springbootvue技术开发的低代码平台为案例&#xff0c;介绍应用系统如何集成企业微信&#xff0c;包括同步企业微信组织用户、单点登录、消息发送等。 在线体验&#xff1a;http://www.yunchengxc.com 1、准备应用 1.1、注册企业微信账号 作为企业微信的企业管理员&a…

铅离子/镉离子绿色荧光探针,具有高特异性高灵敏度

基本信息&#xff1a; 中文名称&#xff1a;铅离子/镉离子绿色荧光探针 英文名称&#xff1a;Leadmium TM Green AM dye 外观&#xff1a;固体或粉末状 规格&#xff1a;10mg、25mg、50mg (可支持定制&#xff09; 纯度&#xff1a;95% 储存条件&#xff1a;-20C避光避湿…

46. UE5 RPG 增加角色受击反馈

在前面的文章中&#xff0c;我们实现了对敌人的属性的初始化&#xff0c;现在敌人也拥有的自己的属性值&#xff0c;技能击中敌人后&#xff0c;也能够实现血量的减少。 现在还需要的就是在技能击中敌人后&#xff0c;需要敌人进行一些击中反馈&#xff0c;比如敌人被技能击中后…

JVM中类加载过程中如何验证文件格式

在JVM中&#xff0c;类加载过程中的验证阶段主要是为了确保加载的Class文件是符合虚拟机规定的Class文件格式&#xff0c;并且没有安全方面的问题。验证阶段主要包括四个部分&#xff1a;文件格式验证、元数据验证、字节码验证和符号引用验证。 关于文件格式验证&#xff0c;这…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-10.1-NXP SDK 移植

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

夸克网盘拉新怎么做?分享网盘拉新攻略!

夸克网盘拉新怎么做&#xff1f;如何通过推广夸克网盘来赚佣金&#xff1f;相信大家应该都使用过夸克网盘&#xff0c;现在夸克网盘的拉新赚佣金活动开展的如火如荼&#xff0c;不少朋友通过夸克网盘拉新赚取收益&#xff0c;真的很香。还有一部分想要赚佣金但是不知道如何操作…

C语言例题39、输入一个正整数,将其反方向逆序输出

#include <stdio.h>void main() {int x;int ge; //个位int result 0;printf("请输入一个正整数&#xff1a;");scanf("%d", &x);while (x > 0) {//解题原理ge x % 10;//每次分解取得个位的数字result result * 10 ge;//个十百千万顺序向左…

给数据库贴标签

要给数据库中的文本贴标签&#xff0c;你需要创建一个新的表格来存储标签&#xff0c;并且与文本表进行关联。以下是一个示例的口语化的创建表格和查询示例&#xff1a; 创建标签表格&#xff1a; CREATE TABLE IF NOT EXISTS labels (标签ID INTEGER PRIMARY KEY,标签名称 T…

libcity 笔记:添加自定义dataset

假设我们把libcity/data/dataset/trajectory_dataset.py复制一份到libcity/data/dataset/dataset_subclass/GeolifeDM_dataset.py&#xff0c;里面内容不变&#xff0c;只是把class的名字换了 那其他需要修改哪些内容&#xff0c;使得这个dataset生效呢 libcity/data/dataset/d…

Python应用:让生活更智能

随着科技的进步&#xff0c;Python已成为一种非常受欢迎的编程语言&#xff0c;它在数据分析、人工智能、Web开发等领域有着广泛的应用。今天&#xff0c;我们将探讨一个Python应用的例子&#xff0c;这个应用将帮助我们更智能地管理日常生活。 应用名称&#xff1a;智能生活助…

福建 | 福建铭发用行动诠释“敢为天下先”的泉州精神

福建铭发 泉州TOP级企业 在福建&#xff0c;提到混凝土搅拌站&#xff0c;铭发是绕不开的一个存在。 他们是当地最早一批建成的商砼企业&#xff0c;也是如今发展规模最大的TOP级企业。 从2007年建站至今&#xff0c;近15年的发展&#xff0c;他们形成了一套铭发特色的企业经…

数据结构与算法|算法总结|滑动窗口篇

之前在用golang二刷代码随想录的时候&#xff0c;遇到209.长度最小的子数组竟然没想到应该用滑动窗口解题&#xff01;怒而猛刷&#xff0c;并结合各个博客和视频总结滑动窗口题型和模板如下 参考资料&#xff1a; 【精心总结滑动窗口代码模板, 直接搞定80道Leetcode算法题】 【…

根据token获取了username后,能否在其他地方使用这个获取的username,或者在其他地方如何获取username?

当然可以在其他地方使用获取到的用户名。一旦你从token中获取到用户名&#xff0c;你可以将其存储在能够在整个应用程序中访问的地方。 在你的代码中&#xff0c;你从token中获取用户名的地方是这里&#xff1a; String username getUsernameFromToken(token);在这行之后&am…

Windows平台PyCharm之PySide6开发环境搭建与配置

PySide6 是一个用于创建跨平台 GUI 应用程序的库&#xff0c;它是 Qt for Python 的官方库。Qt 是一个跨平台的 C 应用程序框架&#xff0c;用于开发具有图形用户界面&#xff08;GUI&#xff09;的应用程序。PySide6 允许开发者使用 Python 语言访问 Qt 的功能&#xff0c;从而…

数据结构(十一)----图的应用

目录 一.最小生成树 1.Prim算法&#xff08;普里姆&#xff09; 2.Kruskal算法(克鲁斯卡尔): 二.最短路径&#xff08;BFS算法&#xff09; 1.单源最短路径 &#xff08;1&#xff09;BFS算法&#xff08;无权图&#xff09; &#xff08;2&#xff09;Dijkstra算法&…