【MCU学习】RTthread工程介绍

news2024/11/23 2:02:21

RT-Thread架构

RT-Thread诞生于2006年,是一款以开源、中立、社区化发展起来的物联网操作系统。 RT-Thread主要采用 C 语言编写,浅显易懂,且具有方便移植的特性(可快速移植到多种主流 MCU 及模组芯片上)。RT-Thread把面向对象的设计方法应用到实时系统设计中,使得代码风格优雅、架构清晰、系统模块化并且可裁剪性非常好。

RT-Thread有完整版和Nano版,对于资源受限的微控制器(MCU)系统,可通过简单易用的工具,裁剪出仅需要 3KB Flash、1.2KB RAM 内存资源的 NANO 内核版本;而相对资源丰富的物联网设备,可使用RT-Thread完整版,通过在线的软件包管理工具,配合系统配置工具实现直观快速的模块化裁剪,并且可以无缝地导入丰富的软件功能包,实现类似 Android 的图形界面及触摸滑动效果、智能语音交互效果等复杂功能。
RT-Thread是一个集实时操作系统(RTOS)内核、中间件组件的物联网操作系统,架构如下:
在这里插入图片描述

APP:
业务层代码库,主要代码为业务逻辑。例如LCD控制板业务,超声波板业务,拖地机业务,扫地机业务,吹风机业务,等。

Board:
项目配置;每一个项目,都会根据需求,针对bsp,app,components进行组件选择,然后生成统一的rtconfig.h,以及board_xxx_config.h;

Bsp:
不同的芯片平台,例如GD32F103,STM32F407等;

Components:
硬件无关的纯软代码;设备抽象的纯软代码;

Include:
Src:rtthread操作系统源代码(不需要阅读);

名称描述
BSPBoard Support Package(板级支持包)基于各种开发板的移植
componentsRT-Thread 的各个组件代码,例如 finsh,gui 等。
documentation相关文档,如编码规范等
examples相关示例代码
includeRT-Thread 内核的头文件。
libcpu各类芯片的移植代码。
srcRT-Thread 内核的源文件。
toolsRT-Thread 命令构建工具的脚本文件。

系统编译

首先,安装env,下载源代码,进入board的项目目录下:

menuconfig               //选择组件,配置参数
scons --target=mdk5      //生成keil5的工程
scons                    //使用scons工具链编译

Menuconfig

menuconfig用于配置模块是否编译进系统,以及选择模块参数

主菜单:

在这里插入图片描述

选择BSP:

if RT_USING_BSP_STM32
        choice
        prompt "choice chip name"
        default y
        default RT_USING_CHIP_STM32F103RC
        
        config RT_USING_CHIP_STM32F103RC
                bool "STM32F103RC"
                default "STM32F103RC"
        config RT_USING_CHIP_STM32F103VC
                bool "STM32F103VC"
                default "STM32F103VC"
        config RT_USING_CHIP_STM32F103VE
                bool "STM32F103VE"
                default "STM32F103VE"
        config RT_USING_CHIP_STM32F407ZG
                bool "STM32F407ZG"
                default "STM32F407ZG"
        endchoice
endif

在这里插入图片描述

配置参数:

在这里插入图片描述

Scons

scons用于建立构建关系,并进行构建的一套环境,scons环境也是采用python语言编写。
根据rtconfig.h文件的解析,SConscript 对所有的系统文件建立构建关系,和makefile类似,根据所有的SConscript,将所有的工程文件组织在一起,与makefile不同的是,sconscript的包含关系,是需要手动在父目录包含字目录的。
每个模块都是单独编译自己的c文件,包含自己需要的h文件,编译成独立的o文件。

SconsStruct 编译过程

import os
import sys

print("#########Sconstruct##########")

#设置工程名称
PROJECT_NAME = os.path.basename(os.getcwd())
PROJECT_INC_DIR = os.path.normpath(os.getcwd() + '/board_config')

print("Project name is", PROJECT_NAME)
print("Project include dir is", PROJECT_INC_DIR)

if os.getenv('RTT_ROOT'):
    RTT_ROOT = os.getenv('RTT_ROOT')
else:
    RTT_ROOT = os.path.normpath(os.getcwd() + '/../..')

#设置使用的BSP目录
sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')]
sys.path = sys.path + [os.path.join(RTT_ROOT, 'bsp/stm32f10x')]  


# 导入全局配置文件
import rtconfig  


try:
    from building import *
except:
    print('Cannot found RT-Thread root directory, please check RTT_ROOT')
    print(RTT_ROOT)
    exit(-1)

#配置target文件名词
TARGET = 'bin/' + 'rtthread.' + rtconfig.TARGET_EXT 




# 配置编译工具链,Keil,iar,gcc
DefaultEnvironment(tools=[])
env = Environment(tools = ['mingw'],
    AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS,
    CC = rtconfig.CC, CCFLAGS = rtconfig.CFLAGS,
    AR = rtconfig.AR, ARFLAGS = '-rc',
    LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS)
env.
('PATH', rtconfig.EXEC_PATH)

if rtconfig.PLATFORM == 'iar':
    env.Replace(CCCOM = ['$CC $CCFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES'])
    env.Replace(ARFLAGS = [''])
    env.Replace(LINKCOM = env["LINKCOM"] + ' --map project.map')

Export('RTT_ROOT')
Export('rtconfig')
Export('PROJECT_NAME')
Export('PROJECT_INC_DIR')

# 根据 rtconfig.h ,生成构建依赖关系
# prepare building environment
objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False)

# 编译和链接,生成target文件
# make a building
DoBuilding(TARGET, objs)

目标文件:

rtthread.axf :调试文件,包含bin,map,以及所有调试需要的信息,使用axf文件可以直接进行调试
rtthread.bin:烧录使用的二进制文件
rtthread.map:map文件,用于分析Flash和内存分布

Total RO  Size (Code + RO Data)               104364 ( 101.92kB)
Total RW  Size (RW Data + ZI Data)             19624 (  19.16kB)
Total ROM Size (Code + RO Data + RW Data)     104832 ( 102.38kB)

RO:Const段
RW:初始化的全局变量
ZI:未初始化或初始化为0的全局变量;
RAM:RW + ZI
ROM:Code + RO + RW

设备驱动框架

IO设备注册流程:

在这里插入图片描述

IO设备操作流程:

//电机MOS控制
p_robot_ctrl->h_mos_gpio = rt_pin_get("PA.13");
rt_pin_mode(p_robot_ctrl->h_mos_gpio, PIN_MODE_OUTPUT);
rt_pin_write(p_robot_ctrl->h_mos_gpio, PIN_LOW);

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

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

相关文章

Ubuntu18.04安装Autoware1.15(解决Openplanner无法绕障的问题:Openplanner2.5)

文章目录 一、下载Autoware1.15源码二、安装依赖三、修改CUDA版本四、编译以及报错解决编译(1)报 undefined reference to cv::Mat::Mat() 的错就按照下面方式改相应包:(2)遇到报错:(3&#xff…

opencv-20 深入理解HSV 色彩空间(通过指定,标记颜色等来拓展ROI区域)

RGB 色彩空间是一种被广泛接受的色彩空间,但是该色彩空间过于抽象,我们不能够直接通过其值感知具体的色彩。 我们更习惯使用直观的方式来感知颜色,HSV 色彩空间提供了这样 的方式。 通过 HSV色彩空间,我们能够更加方便地通过色调、…

web APIs-练习一

轮播图点击切换&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"…

Servlet——使用Servlet编程的基本流程。

文章目录 前言一、创建项目创建Maven项目介绍Maven项目 二、引入依赖三、创建目录四、编写代码五、打包六、部署七、验证总结 前言 本人是一个普通程序猿!分享一点自己的见解,如果有错误的地方欢迎各位大佬莅临指导,如果你也对编程感兴趣的话&#xff0c;互关一下&#xff0c;…

软件测试面试题及答案【史上最全】

以下是软件测试相关的面试题及答案&#xff0c;欢迎大家参考! 1、你的测试职业发展是什么? 测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师奔去。而且我也有初步的职业规划&#xff0c;前3年积累测试经验&…

微信小程序开发使用echarts报错Cannot read property ‘getAttribute‘ of undefined

如图&#xff0c;我在小程序圈中的区域渲染echarts图标报错了&#xff0c;报错提示Cannot read property getAttribute of undefined 这里的canvas &#xff0c;width ,height,dpr获取为 undefined 分析问题&#xff1a; 初始化图表时传递错误的参数&#xff1a; 在 onShow 生…

靶向RNA-seq全面解决方案和加速分析,只看这篇就够了!

背景 RNA-seq&#xff0c;即通过高通量测序技术进行的转录组测序分析技术。最初作为研究mRNA&#xff0c;small RNA&#xff0c;non-coding RNA 等表达水平、表达差异基因的应用&#xff0c;在过去的十几年内迅速发展。而今&#xff0c; RNA-seq 在转录本变异、基因融合、可变…

安全文件传输:如何降低数据丢失的风险

在当今数字化时代&#xff0c;文件传输是必不可少的一项工作。但是&#xff0c;数据丢失一直是一个令人头疼的问题。本文将探讨一些减少数据丢失风险的方法&#xff0c;包括加密、备份和使用可信的传输协议等。采取这些措施将有助于保护数据免受意外丢失的危险。 一、加密保护数…

抖音矩阵系统源码开发搭建部署分享

一、 功能开发设计 &#xff08;1&#xff09;数据概览&#xff1a;账号&#xff0c;视频top10数据统计 &#xff08;2&#xff09;AI视频创意&#xff1a;原创视频批量剪辑&#xff0c;阶乘算法&#xff0c;去重原理 &#xff08;3&#xff09;同城拓客&#xff1a;线下门店…

整体认识和路由配置、基础数据渲染、热榜区域实现、图片预览组件封装、认识SKU组件、通用组件统一注册全局(详情页)【Vue3】

详情页 整体认识和路由配置 整体业务认识 路由配置 准备组件模板 <script setup></script><template><div class"xtx-goods-page"><div class"container"><div class"bread-container"><el-breadc…

nlp系列(6)文本实体识别(Bi-LSTM+CRF)pytorch

模型介绍 LSTM&#xff1a;长短期记忆网络&#xff08;Long-short-term-memory&#xff09;,能够记住长句子的前后信息&#xff0c;解决了RNN的问题&#xff08;时间间隔较大时&#xff0c;网络对前面的信息会遗忘&#xff0c;从而出现梯度消失问题&#xff0c;会形成长期依赖…

Linux文件管理

WINDOWS/LINUX目录对比 Windows: 以多根的方式组织文件 C:\ D:\ E: Linux: 以单根的方式组织文件 / (根目录) Linux目录简介 /目录结构&#xff1a; FSH (Filesystem Hierarchy Standard) [rootlocalhost ~]# ls / bin dev lib media net root srv usr boot etc lib64 misc …

Qt5.14.2下载及安装

1. 下载 https://download.qt.io/archive/qt/5.14/5.14.2/ 由于Qt 自从5.15版本开始&#xff0c;对非商业版本&#xff08;也就是开源版本&#xff09;&#xff0c;不提供已经制作好的离线exe安装包。所以&#xff0c;对于5.15&#xff08;含&#xff09;之后的版本&#xff…

混合背包--暗黑游戏(pgrune)

混合背包&#xff1a;包含着01背包&#xff0c;完全背包,多重背包 而这个题通过k[i]进行判断是哪个背包&#xff0c;少了个完全背包。 #include<bits/stdc.h> using namespace std; const int N1000; int vp[N]; int vr[N]; int k[N]; int w[N]; int f[151][151]; int m…

C++模拟实现list

1.首先要了解到vs底层的list链表是带头双向循环的链表。 所以首先就要看成员变量 那么就说明我们还需要构造一个Node的结构体&#xff0c;&#xff08;typedef一下就好了&#xff0c;名字不影响&#xff09; 现在就可以完成间的push_back函数了。 1.list的iterator 我们之前模…

随手笔记——3D−2D:PnP

随手笔记——3D−2D&#xff1a;PnP 说明理论源代码雅可比矩阵求解 说明 PnP&#xff08;Perspective-n-Point&#xff09;是求解3D到2D点对运动的方法。它描述了当知道n个3D空间点及其投影位置时&#xff0c;如何估计相机的位姿。 理论 特征点的3D位置可以由三角化或者RGB-…

鸿鹄协助管理华为云与炎凰Ichiban

炎凰对华为云的需求 在炎凰日常的开发中&#xff0c;对于服务器上的需求&#xff0c;我们基本都是采用云服务。目前我们主要选择的是华为云&#xff0c;华为云的云主机比较稳定&#xff0c;提供的云主机配置也比较多样&#xff0c;非常适合对于不同场景硬件配置的需求&#xff…

【前端笔记】本地运行cli项目报错ERR_OSSL_EVP_UNSUPPORTED

报错原因 Node版本>17.x&#xff0c;本地npm run 起项目后会发现终端报错&#xff0c;具体有以下2块关键信息&#xff1a; Error: error:0308010C:digital envelope routines::unsupported和 opensslErrorStack: [ error:03000086:digital envelope routines::initializa…

Jmeter配置起来太繁琐?试试RunnerGo

在用jmeter做性能测试时想看完整一点的测试报告&#xff0c;想配置阶梯模式来压测&#xff0c;想配置不同的接口并发这些都需要安装插件并且影响机器性能&#xff0c;想做自动化测试还得放到jenkins&#xff0c;这些配置起来太繁琐。今天给大家推荐一款测试平台RunnerGo&#x…

可解释的 AI:在transformer中可视化注意力

Visualizing Attention in Transformers | Generative AI (medium.com) 一、说明 在本文中&#xff0c;我们将探讨可视化变压器架构核心区别特征的最流行的工具之一&#xff1a;注意力机制。继续阅读以了解有关BertViz的更多信息&#xff0c;以及如何将此注意力可视化工具整合到…