RTthread之手动移植

RT-Thread系统移植 本文以正点原子W601开发板为例,讲解如何移植配置RT-Thread 阅读详情

为什么手动移植?

  • 了解系统文件组成和结构
  • 发现问题并解决
  • 文字记录

1. 新建一个基础工程

使用STM32F103ZET6芯片
创建一个工程

  1. 打开STM32cubeMX
  2. 使用HSI
  3. 使用UART1
  4. 配置时钟树
  5. 工程基本信息
  6. 生成工程打开
  7. 编译报错
  8. 使用arm compiler: version 6
  9. 编译完成
  10. 串口重定向
int fputc(int ch, FILE *f)
{
    /* 发送单个字节到USART */
    HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
    return ch;
}
  1. 增加 头文件 #include <stdio.h>

  2. 添加微库 Use MicroLIB
    microlib 是缺省 C 库的备选库。 它旨在与需要装入到极少量内存中的深层嵌入式应用程序配合使用。 这些应用程序不在操作系统中运行

  3. 编译错误把这两个注释编译然后取消注释重新编译
    f103xe.s 启动文件中332行

     EXPORT  //__initial_sp
     EXPORT  __heap_base
     EXPORT  __heap_limit
    
     ELSE
    
     IMPORT  //__use_two_region_memory
     EXPORT  __user_initial_stackheap
  1. 主函数循环串口打印日志 间隔一秒
  2. 基础工程完成

2. KEIL安装包

arm_keil网站

  1. 进入网站点击 CMSIS PACKS
  2. 搜索框输入 RT-Thread
  3. 下载安装包
  4. 下载完成点击根据提示安装
  5. 在keil select software packs 这个倒数第二个按钮可以看到安装完成

3. RT_thread 源码

  1. 进入官网下载RT_THREAD NANO 源码
  2. 解压后可以看到结构
  3. bsp 是各芯片的板级支持包,关注里面的rtconfig.h和board.c 文件
  4. components是各扩展组件
  5. include 是系统需要的头文件
  6. include/libc 是系统需要的头文件
  7. libcpu 是各芯片的接口文件
  8. src 是rtthread内核文件
  9. 将rt_thread目录整个复制到工程文件目录中
  10. 删除掉bsp目录中无效文件

4. KEIL 添加源码文件

  1. keil groups 下新建 几个文件目录
  2. user里面添加board.c
  3. port里面添加 cpuport.c 和 context_rvds.s
  4. source 里面添加src全部源码文件
  5. 魔术棒里添加各头文件路径
  6. 添加完成编译
  7. 报错显示几个函数重复定义
  8. 把stm32f1xx_it.c 里面几个函数注释掉
  9. 编译后通过

5. 修改rt_config.h

  • 在官网文档中心找到内核基础,配置文件那一个章节
  • 根据说明每一个仔细配置
    配置完成编译通过

6. 修改board.c

  1. 修改一下堆的大小
  2. 新建一个board.h 文件
#ifndef __BOADR_H
#define __BOARD_H


#includt <rtthread.h>

void rt_hw_board_init();
void SysTick_Handler(void);

#endif

编译完成

7. 测试RTthread

  1. 主函数添加# include <rtthread.h>
  2. 使用系统延时 rt_thread_mdelay(1000)
  3. 间隔输出日志
  4. 成功
  5. 在主函数主轮询之前创建一个动态线程1
  6. 线程1中间隔输出日志
  7. 编译运行可以看到线程1启动成功
  8. 正常日志输出
    在这里插入图片描述

8. 基本工程移植完成

具体资料详见网络》》》》》》

RT-thread是一个软件 单片机是一个硬件 软件硬件关联的文件叫接口文件 通常由C和汇编编写 不同的硬件接口文件是不一样的
通常由RTthread和原厂的人编写 内核: cortex-m0 m3 m4 m7 只要是使用这些内核的mcu都可以使用对应接口文件

网友参考链接

配置文件:

#ifndef __RTCONFIG_H
#define __RTCONFIG_H

//内核

/* 表示内核对象的名称的最大长度,若代码中对象名称的最大长度大于宏定义的长度,
 * 多余的部分将被截掉。*/
#define RT_NAME_MAX 8

/* 字节对齐时设定对齐的字节个数。常使用 ALIGN(RT_ALIGN_SIZE) 进行字节对齐。*/
#define RT_ALIGN_SIZE 4

/* 定义系统线程优先级数;通常用 RT_THREAD_PRIORITY_MAX-1 定义空闲线程的优先级 */
#define RT_THREAD_PRIORITY_MAX 32

/* 定义时钟节拍,为 1000 时表示 1000 个 tick 每秒,一个 tick 为 1ms */
#define RT_TICK_PER_SECOND 1000

/* 检查栈是否溢出,未定义则关闭 */
//#define RT_USING_OVERFLOW_CHECK

/* 定义该宏开启 debug 模式,未定义则关闭 */
//#define RT_DEBUG
/* 开启 debug 模式时:该宏定义为 0 时表示关闭打印组件初始化信息,定义为 1 时表示启用 */
//#define RT_DEBUG_INIT 0
/* 开启 debug 模式时:该宏定义为 0 时表示关闭打印线程切换信息,定义为 1 时表示启用 */
//#define RT_DEBUG_THREAD 0

/* 定义该宏表示开启钩子函数的使用,未定义则关闭 */
//#define RT_USING_HOOK

/* 定义了空闲线程的栈大小 */
#define IDLE_THREAD_STACK_SIZE 256





//线程间通信

/* 定义该宏可开启信号量的使用,未定义则关闭 */
#define RT_USING_SEMAPHORE

/* 定义该宏可开启互斥量的使用,未定义则关闭 */
#define RT_USING_MUTEX

/* 定义该宏可开启事件集的使用,未定义则关闭 */
#define RT_USING_EVENT

/* 定义该宏可开启邮箱的使用,未定义则关闭 */
#define RT_USING_MAILBOX

/* 定义该宏可开启消息队列的使用,未定义则关闭 */
#define RT_USING_MESSAGEQUEUE

/* 定义该宏可开启信号的使用,未定义则关闭 */
//#define RT_USING_SIGNALS





//内存管理

/* 开启静态内存池的使用 */
//#define RT_USING_MEMPOOL

/* 定义该宏可开启两个或以上内存堆拼接的使用,未定义则关闭 */
//#define RT_USING_MEMHEAP

/* 开启小内存管理算法 */
#define RT_USING_SMALL_MEM

/* 关闭 SLAB 内存管理算法 */
//#define RT_USING_SLAB 

/* 开启堆的使用 */
#define RT_USING_HEAP





//内核设备对象

/* 表示开启了系统设备的使用 */
//#define RT_USING_DEVICE

/* 定义该宏可开启系统控制台设备的使用,未定义则关闭 */
//#define RT_USING_CONSOLE
/* 定义控制台设备的缓冲区大小 */
//#define RT_CONSOLEBUF_SIZE 128
/* 控制台设备的名称 */
//#define RT_CONSOLE_DEVICE_NAME "uart1"




//自动初始化

/* 定义该宏开启自动初始化机制,未定义则关闭 */
#define RT_USING_COMPONENTS_INIT

/* 定义该宏开启设置应用入口为 main 函数 */
#define RT_USING_USER_MAIN
/* 定义 main 线程的栈大小 */
#define RT_MAIN_THREAD_STACK_SIZE 1024


//finsh

/* 定义该宏可开启系统 FinSH 调试工具的使用,未定义则关闭 */
//#define RT_USING_FINSH

/* 开启系统 FinSH 时:将该线程名称定义为 tshell */
//#define FINSH_THREAD_NAME "tshell"

/* 开启系统 FinSH 时:使用历史命令 */
//#define FINSH_USING_HISTORY
/* 开启系统 FinSH 时:对历史命令行数的定义 */
//#define FINSH_HISTORY_LINES 5

/* 开启系统 FinSH 时:定义该宏开启使用 Tab 键,未定义则关闭 */
//#define FINSH_USING_SYMTAB

/* 开启系统 FinSH 时:定义该线程的优先级 */
//#define FINSH_THREAD_PRIORITY 20
/* 开启系统 FinSH 时:定义该线程的栈大小 */
//#define FINSH_THREAD_STACK_SIZE 4096
/* 开启系统 FinSH 时:定义命令字符长度 */
//#define FINSH_CMD_SIZE 80

/* 开启系统 FinSH 时:定义该宏开启 MSH 功能 */
//#define FINSH_USING_MSH
/* 开启系统 FinSH 时:开启 MSH 功能时,定义该宏默认使用 MSH 功能 */
//#define FINSH_USING_MSH_DEFAULT
/* 开启系统 FinSH 时:定义该宏,仅使用 MSH 功能 */
//#define FINSH_USING_MSH_ONLY




//mcu

/* 定义该工程使用的 MCU 为 STM32F103ZE;系统通过对芯片类型的定义,来定义芯片的管脚 */
//#define STM32F103ZE

/* 定义时钟源频率 */
//#define RT_HSE_VALUE 8000000

/* 定义该宏开启 UART1 的使用 */
//#define RT_USING_UART1




#endif

【未解决的问题】STM32F103移植rt-thread nano版本出现的问题。 技术小白白最近心血来潮研究了一下rt-thread,即嵌入式实时操作系统,于是我去官网下载Nano版本(极简版本)压缩包,按照网上的方法手动移植到我的STM32F103C8T6板子上(移植后结构如下图),进行了一个点灯操作,但是编译时发现报错。意思是头文件rtthread.h中的va_list没有被定义。 阅读详情

相关推荐

从零开始用makefile 构建rtthread 工程

从零开始用makefile 构建rtthread 工程前言一.构建裸机工程二.加入 rtthread 源码三.修改 makefile 并尝试编译四.启动系统五.总结 前言 Rtthread 作为国产的一个操作系统,在国内一直有不俗的声名度,但是其工程用 scons 构建,对于喜欢从零开始构建工程的人来说可能不是很友好,尤其是对于喜欢用 gcc 来编译工程的人更是如此,且国内喜欢用 makefile...

goodmorning的博客 3567

【STM32】RT-thread、手把手教学RTOS移植stm32过程

把系统时钟初始化放到void rt_hw_board_init()下面的时钟宏定义,以及系统内核时钟函数也注释掉。把stm32的系统时钟放到board.c后面。首先将rtconfig.h里面的宏定义打开。在board.c添加GPIO初始化函数。将这里系统时钟初始化注释掉。也可以看到LED正常闪烁。it.h头文件也要注释。可以看到LED正常闪烁。

qq_54656363的博客 3848

告别手动移植!用Env工具5分钟搞定RT-Thread到MDK的工程配置(附完整流程)

本文详细介绍了如何使用RT-Thread官方Env工具快速将RT-Thread移植到MDK开发环境,5分钟内完成工程配置。通过一键生成、智能配置等核心功能,大幅提升嵌入式开发效率,特别适合需要频繁切换硬件平台的开发者。

weixin_29162439的博客 260

手把手教你移植RT-Thread系统

学习RT-Thread系统有一段时间了,感觉RT-Thread系统使用起来很简单,也很方便。但是在最开始移植的时候网上的教程很多,也很杂乱。比如可以使用官方的软件RT-Thread Studio 直接创建工程,创建好了之后系统就可以用了。也可以直接在Keil MDK下载RT-Thread RTOS,下载完成后默认就会添加到工程中,系统直接也可以用了。还可以使用CubeMX 移植 RT-Thread Nano,在创建工程的时候,直接将RT-Thread就添加进去了,工程创建完了之后,系统就...

HXYDJ的博客 4万+

【RT-thread】STM32F103C8T6手动移植RT-thread。

在标准库下,手动移植嵌入式实时操作系统。

lzhlzh111的博客 773

stm32 移植 rt-thread

既然我们要移植Rt-thread 首先就要了解RT-thread RT-Thread Nano 简介 RT-Thread Nano 是一个极简版的硬实时内核,它是由 C 语言开发,采用面向对象的编程思维,具有良好的代码风格,是一款可裁剪的、抢占式实时多任务的 RTOS。其内存资源占用极小,功能包括任务处理、软件定时器、信号量、邮箱和实时调度等相对完整的实时操作系统特性。适用于家电、消费电子、医疗设备、工控等领域大量使用的 32 位 ARM 入门级 MCU 的场合。 下图是 RT-Thread Na..

位文杰的博客 9748

手把手教你移植rt-thread到stm32f10x(keil)

rtthread移植指南

nayuta0728的博客 7214

IntelliJ IDEA 中git使用说明书

IntelliJ IDEA 中git使用说明书

junyang2012的博客 5390

【超级详细!】手把手教你STM32移植RT-Thread Nano操作系统!

本文详细介绍了将RT-Thread Nano 4.1.1操作系统移植到STM32F407ZGT6开发板的过程。主要内容包括:1)获取源码并裁剪bsp、libcpu等核心文件;2)通过Keil MDK环境添加必要文件并解决编译错误;3)实现系统心跳和串口打印功能;4)增加Finsh组件实现命令行交互;5)提供完整的rtconfig.h配置模板。文章详细记录了移植过程中的具体操作和常见问题解决方法,最终成功实现RT-Thread Nano在标准库环境下的移植验证,为后续RT-Thread应用开发奠定了基础。

2301_80348599的博客 2747

告别设备管理器混乱!3分钟学会用STM32CubeMX+Zadig定制专属虚拟串口名称

本文详细介绍了如何利用STM32CubeMX和Zadig工具,为STM32的USB虚拟串口(VCP)定制专属设备名称,从而彻底解决多设备连接时设备管理器端口混乱的难题。通过修改产品字符串描述符并替换驱动,开发者可以在设备管理器中清晰识别不同开发板,显著提升调试效率,尤其适用于多设备协同的竞赛或项目开发场景。

a2b3c4d5e的博客 478

华为灵衢UB总线介绍

华为发布"灵衢"(UB)超节点互联协议,旨在构建支持AI大模型计算的基础设施。该协议采用统一内存语义和对等架构,使设备可直接访问远程内存,实现资源池化。技术突破包括2.1微秒超低时延和TB级带宽,支持64节点、52万张昇腾卡的集群互联。相比传统RDMA,"灵衢"更注重系统级资源调度,而非单纯数据传输。华为开放技术规范,推动生态建设,已有厂商开发兼容IP核。"灵衢"可适应x86、RISC-V等架构,未来将扩展至百万卡规模集群。

技术引领业务创新 4427

STM32CubeMX | STM32F1系列使用HAL库手动移植RTThread-Nano实时操作系统

STM32CubeMX | STM32使用HAL库手动移植RTThread-Nano实时操作系统 目录STM32CubeMX | STM32使用HAL库手动移植RTThread-Nano实时操作系统1、基础工程建立2、移植rtthread-nano 1、基础工程建立 首先通过STM32CubeMX建立基础工程,首先开启RCC并将时钟配置到72M主频: 配置串口1并开启接收中断: 在配置个LED灯的IO: 将HAL用到的系统滴答定时器切换成定时器7,因为SysTick定时器我们要给rtthread

^_^ 4259

abaqus运行报错 WindowsError:[Error 2]

abaqus提交job总是提示“WindowsError [Error 2”,报这个错误,可能是由于安装其他软件改变了abaqus软件的路径导致,总结了看到的教程,按照下面的方法可以解决这个问题。 步骤一:找到你的abaqus安装路径(我是按照一个安装视频安装的,安装路径为SIMULI1),然后找到SIMULIA文件夹,点击进入后找到commands文件夹,将这个路径复制下来。 步骤二:我的电脑右键属性,在左侧中找到高级系统设置并...

az101za的博客 1万+

(个人记录)移植RT_Thread到f103c8t6板子上

RT-thread的STM32f103c8t6移植_stm32f103c8t6 rtthread-优快云博客!主要分为两个部分:第一部分正点原子找的代码原先应用于f103zet6,修改到f103c8t6上;第二部分进行RTThread的移植。提示:以下是本篇文章正文内容,下面案例可供参考个人的一次学习的总结,仅供参考,本人很菜,如果有问题很抱歉。移植部分主要参考了上文链接中的大佬的步骤。

rsrzrcj147的博客 1546

GD32F303开发实战(一):从零搭建MDK工程与时钟配置详解

本文详细介绍了如何从零开始为GD32F303微控制器搭建一个清晰、可维护的MDK工程模板。内容涵盖开发环境准备、工程目录结构规划、文件分组管理、关键工程配置,并重点解析了时钟树原理,手把手指导配置108MHz系统时钟。通过实战步骤与常见问题排查,帮助开发者构建一个稳定可靠的开发基础,便于后续功能扩展。

weixin_29174141的博客 271

【滤波跟踪】多雷达协同下的多目标跟踪:航迹管理优化与卡尔曼滤波融合策略

本文深入探讨了多雷达协同下的多目标跟踪技术,聚焦于航迹管理优化与卡尔曼滤波融合策略两大核心。通过分析分布式融合架构、航迹关联算法(如匈牙利算法)以及应对非线性与机动目标的扩展卡尔曼滤波(EKF)与无迹卡尔曼滤波(UKF)等方法,旨在解决多源信息融合难题,提升复杂环境下目标跟踪的精度与鲁棒性。

weixin_29214199的博客 281

RT thread 中 LVGL 动画效果不起作用的原因及解决办法

最近在将LVGL移植到GD32的过程中发现动画效果在RT thread 上运行的不好,非常卡顿,似乎是没有起作用。先看一下错误的使用方法。 注意以下是LVGL 定时器的错误用法 在配置文件中将 LV_TICK_CUSTOM 选项打开,将获取时钟间隔的函数配置为 rt thread 操作系统的 rt_tick_get() 函数 /*Use a custom tick source that tells the elapsed time in milliseconds. *It removes th.

cc电子世界 6086

基于simulink的BMS系统中电池单体故障隔离与恢复建模

本文介绍了使用Simulink构建BMS电池单体故障诊断与容错控制模型的方法。主要内容包括:1)搭建12串锂电池组模型;2)实现单体故障注入(过压、断线等);3)设计故障诊断与隔离模块(采用Stateflow状态机);4)开发恢复判断逻辑(需满足电压、温度等条件);5)系统监控与仿真设置。文章还提供了工程实践建议,如防环流设计、通信冗余等,并指出进阶方向(多故障处理、AI预警等)。该模型适用于新能源汽车、储能系统的BMS设计,可提高系统可靠性和安全性。

xiaoheshang_123的博客 140

移植RTThread-nano内核

概述 本文基于MDK移植RTThread-nano内核到F103工程。 步骤 一、nano源码下载 点击Nano源码下载。 二、移植 在F103工程文件夹内,新建rtthread文件夹,然后从Nano源码文件夹内添加以下文件。 include文件夹、libcpu文件夹、src文件夹 bsp文件夹下的rtconfig.h、board.c 打开MDK工程,在工程添加以下文件。 rtthread/src文件夹下所有文件 rtthread/libcpu文件下对应文件 rtthread文件夹下board.c、rt

SammySum的博客 782

图神经网络实战——利用节点回归预测网络流量

在机器学习中,回归指的是对连续值的预测。通常与分类形成鲜明对比,分类的目标是找到正确的类别(即离散值,而非连续值)。在图数据中,分类和回归分别对应于节点分类和节点回归。在本节中,我们将尝试预测每个节点的连续值,而非分类变量。

盼小辉丶的博客 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

RTThread-Nano学习一-基于MDK移植

关于RTThread-nano的介绍,这里不做过多解释,官方文档已经介绍的非常详细了,有兴趣的可以参考如下文档

qq_26226375的博客 1943

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

RT-Thread Nano版本从零开始手动移植EasyFlash软件包

该命令临时调试使用,由于该组件大约占用15k的flash和5k的RAM,调试正常后建议关闭。

henan_zhang的博客 191

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【RT-Thread】基于STM32+HAL库的RT-Thread移植(纯手动)

RT-Thread是一款中国团队开发的开源嵌入式实时操作系统(RTOS),具有高可靠性、轻量级、易移植等特点。文章介绍了RT-Thread的核心特性,包括开源许可证、丰富的组件、多架构支持以及开发工具RT-ThreadStudio。详细讲解了如何手动移植RT-Thread到STM32平台,包括源码复制、文件配置、编译环境设置等步骤,并展示了通过线程控制实现LED闪烁的示例代码。该RTOS适用于工业控制、消费电子、物联网等领域,拥有活跃的社区和完善的生态支持。

qq_73648789的博客 3615

LittlevGL2RTT:为RTThread带来高效GUI开发

LittlevGL2RTT:为RTThread带来高效GUI开发 项目介绍 LittlevGL2RTT 是一个基于 RTThread 操作系统的图形用户界面(GUI)开发中间件。它旨在简化 LittlevGL GUI 框架在 RTThread 上的集成过程,使得开发者能够快速开发出美观、响应快速的图形界面。通过 LittlevGL2RTT,开发者无需进行复杂的移植工作,即可将 LittlevGL ...

gitblog_01067的博客 707

STM32F103移植RT-Thread完整过程

RT-Thread官网有很多通过IDE一键移植的方法,本文选择的是手动移植,文末提供移植好的完整工程。

qq_36973838的博客 5640

vs移植的.exe再编译无法更新_【视频】05MQTT移植到stm32开发板——使用RTThread操作系统...

ENV介绍env 是 RT-Thread 推出的开发辅助工具,针对基于 RT-Thread 操作系统的项目工程,提供编译构建环境、图形化系统配置及软件包管理功能。其内置的 menuconfig 提供了简单易用的配置剪裁工具,可对内核、组件和软件包进行自由裁剪,使系统以搭积木的方式进行构建。env 工具包含了 RT-Thread 源代码开发编译环境和软件包管理系统。env工具下载安装从 R...

weixin_39876650的博客 135
上一篇: 【随手笔记】环形缓冲区之覆盖读写
下一篇: 【随手笔记】三轴:ADXL345
Long-Run
博客等级 码龄3年 4602粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值