clion开发stm32f4系列(一)————移植rt-thread os系统
前言
- 本次使用的rt-thread的版本为5.0.2
- 基于rt-thread sudio生成的源码进行拷贝和修改
- 工程基于上次创建工程的项目进行修改。
- 本次工程只是用了serial和pin组件,其他后面用到再进行添加
拷贝rt-thread源码库

通过CMakeLists来进行管理
顶级(rt-thread目录)

cmake_minimum_required(VERSION 3.22)project(rt-thread)
add_library(rt-thread INTERFACE)# Enable CMake support for ASM and C languages
enable_language(C ASM)
add_subdirectory(components)
add_subdirectory(libcpu)
target_compile_definitions(rt-thread INTERFACE)target_include_directories(rt-thread INTERFACE././include)
#[[------------------------SRC-------------------]]
set(os_src./src/clock.c./src/components.c
# ./src/cpu.c./src/idle.c./src/ipc.c./src/irq.c./src/kservice.c./src/mem.c./src/memheap.c./src/mempool.c./src/object.c# ./src/scheduler_mp.c./src/scheduler_up.c./src/SConscript./src/signal.c./src/slab.c./src/thread.c./src/timer.c
)target_sources(rt-thread INTERFACE${os_src}
)target_link_directories(rt-thread INTERFACE
)target_link_libraries(rt-thread INTERFACE
)# Validate that STM32CubeMX code is compatible with C standard
if (CMAKE_C_STANDARD LESS 11)message(ERROR "Generated code requires C11 or higher")
endif ()
libcpu目录配置

target_include_directories(rt-thread INTERFACE./arm/cortex-m4/)target_sources(rt-thread INTERFACE./arm/cortex-m4/context_gcc.S./arm/cortex-m4/cpuport.c)
components目录(此CMAkeLists文件主要用于添加具体的组件)

add_subdirectory(finsh)
add_subdirectory(drivers)
driver目录(此文件添加共有源码和管理抽象层的具体组件)

target_include_directories(rt-thread INTERFACE./include)target_sources(rt-thread INTERFACEipc/completion.cipc/dataqueue.cipc/pipe.cipc/ringblk_buf.cipc/ringbuffer.cipc/waitqueue.cipc/workqueue.c
)add_subdirectory(core)
add_subdirectory(misc)
add_subdirectory(serial)
core 目录

target_sources(rt-thread INTERFACE./device.c)
msic 目录

target_sources(rt-thread INTERFACE./pin.c
)
serial目录

target_sources(rt-thread INTERFACE./serial.c
)
硬件实现层(drivers目录)

cmake_minimum_required(VERSION 3.22)project(stm32f4-driver)
add_library(stm32f4-driver INTERFACE)# Enable CMake support for ASM and C languages
enable_language(C ASM)
target_compile_definitions(stm32f4-driver INTERFACE-DSOC_SERIES_STM32F4
)target_include_directories(stm32f4-driver INTERFACE././include./include/config
)target_sources(rt-thread INTERFACE./board.c./drv_common.c./drv_clk.c./drv_gpio.c./drv_usart.c)target_link_directories(stm32f4-driver INTERFACE
)target_link_libraries(stm32f4-driver INTERFACE
)# Validate that STM32CubeMX code is compatible with C standard
if (CMAKE_C_STANDARD LESS 11)message(ERROR "Generated code requires C11 or higher")
endif ()
改造cmake目录中

cmake_minimum_required(VERSION 3.22)project(stm32cubemx)
add_library(stm32cubemx INTERFACE)# Enable CMake support for ASM and C languages
enable_language(C ASM)target_compile_definitions(stm32cubemx INTERFACEUSE_HAL_DRIVERSTM32F407xx$<$<CONFIG:Debug>:DEBUG>
)target_include_directories(stm32cubemx INTERFACE../../Core/Inc../../Drivers/STM32F4xx_HAL_Driver/Inc../../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy../../Drivers/CMSIS/Device/ST/STM32F4xx/Include../../Drivers/CMSIS/Include
)target_sources(stm32cubemx INTERFACE../../Core/Src/main.c../../Core/Src/gpio.c# ../../Core/Src/stm32f4xx_it.c../../Core/Src/stm32f4xx_hal_msp.c../../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c../../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c../../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c../../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c../../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c../../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c../../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c../../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c../../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c../../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c../../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c../../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c../../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c../../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c../../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c../../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c../../Core/Src/system_stm32f4xx.c
# ../../Core/Src/sysmem.c
# ../../Core/Src/syscalls.c../../startup_stm32f407xx.s
)target_link_directories(stm32cubemx INTERFACE
)target_link_libraries(stm32cubemx INTERFACE
)# Validate that STM32CubeMX code is compatible with C standard
if (CMAKE_C_STANDARD LESS 11)message(ERROR "Generated code requires C11 or higher")
endif ()
根CMakeLists文件调整

添加自定义的应用目录

target_include_directories(stm32cubemx INTERFACE./inc)
target_sources(stm32cubemx INTERFACE./src/main.c
)
调整链接文件和汇编文件




cmake_minimum_required(VERSION 3.22)#
# This file is generated only once,
# and is not re-generated if converter is called multiple times.
#
# User is free to modify the file as much as necessary
## Setup compiler settings
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS ON)# Define the build type
if (NOT CMAKE_BUILD_TYPE)set(CMAKE_BUILD_TYPE "Debug")
endif ()# Set the project name
set(CMAKE_PROJECT_NAME csdn_stm32f407zgt6)# Include toolchain file
include("cmake/gcc-arm-none-eabi.cmake")# Enable compile command to ease indexing with e.g. clangd
set(CMAKE_EXPORT_COMPILE_COMMANDS TRUE)# Enable CMake support for ASM and C languages
enable_language(C ASM)# Core project settings
project(${CMAKE_PROJECT_NAME})
message("Build type: " ${CMAKE_BUILD_TYPE})
# Create an executable object type
add_executable(${CMAKE_PROJECT_NAME})# Add STM32CubeMX generated sources
#add_subdirectory(cmake/stm32cubemx)
add_subdirectory(cmake/rt_stm32cumx)
add_subdirectory(Drivers/Bsp)
add_subdirectory(Middleware/rt-thread)
add_subdirectory(Middleware/drivers)add_subdirectory(applications)# Link directories setup
target_link_directories(${CMAKE_PROJECT_NAME} PRIVATE# Add user defined library search paths
)# Add sources to executable
target_sources(${CMAKE_PROJECT_NAME} PRIVATE# Add user sources here
)# Add include paths
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE# Add user defined include paths
)# Add project symbols (macros)
target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE# Add user defined symbols
)# Add linked libraries
target_link_libraries(${CMAKE_PROJECT_NAME}stm32cubemx# Add user defined librariesstm32f4_bsprt-threadstm32f4-driver)
测试结果

通过debug测试(移植ok)

相关文章:
clion开发stm32f4系列(一)————移植rt-thread os系统
前言 本次使用的rt-thread的版本为5.0.2基于rt-thread sudio生成的源码进行拷贝和修改工程基于上次创建工程的项目进行修改。本次工程只是用了serial和pin组件,其他后面用到再进行添加 拷贝rt-thread源码库 通过CMakeLists来进行管理 顶级(rt-thread目录) cmake_minimum_req…...
计算机网络(网络层)
网络层概述 网络层是干什么的? 网络层的主要任务是实现不同异构网络互连,进而实现数据包在各网络之间的传输相比于数据链路层的以太网通信,网络层则是将一个个数据链路层连接的以太网通过路由器连接起来。从而实现不同数据链路层的互联。 这…...
Python3 第六十六课 -- CGI编程
目录 一. 什么是 CGI 二. 网页浏览 三. CGI 架构图 四. Web服务器支持及配置 五. 第一个CGI程序 5.1. HTTP 头部 5.2. CGI 环境变量 六. GET和POST方法 6.1. 使用GET方法传输数据 6.1.1. 简单的url实例:GET方法 6.1.2. 简单的表单实例:GET方法…...
【Unity23种设计模式】之状态模式
首先创建一个项目 打开项目后复制至3个场景 命名为 创建一个空物体 命名为GameLoop 创建一个脚本GameLoop.cs 编写代码如下 将代码挂载至空物体GameLoop 将三个场景拖拽至Scenes In Build 分析下状态模式的类图 我们创新类图中的代码 编写ISceneState.cs 编写三个状态子类继承构…...
二叉树刷题,bfs刷题
有些题目,你按照拍脑袋的方式去做,可能发现需要在递归代码中调用其他递归函数计算字数的信息。一般来说,出现这种情况时你可以考虑用后序遍历的思维方式来优化算法,利用后序遍历传递子树的信息,避免过高的时间复杂度。…...
为什么要用分布式锁
单应用中,如果要确保多线程修改同一个资源的安全性 加synchronized就可以了 但是性能不高 而mybatis-plus的乐观锁就可以很好的解决这类问题 但是这样的锁机制,只在单应用中有效 试想,在分布式下,有没有可能出现多个应用中的线程同时去修改同一个数据资源的并发问题 例如A …...
python游戏开发之五子棋游戏制作
五子棋是一种源自中国的传统棋类游戏,起源可以追溯到古代。它是一种两人对弈的游戏,使用棋盘和棋子进行。棋盘通常是一个 1515 的网格,棋子分为黑白两色,双方轮流在棋盘上落子。游戏的目标是通过在棋盘上落子,使自己的…...
文件上传绕过最新版安全狗
本文来源无问社区,更多实战内容,渗透思路可前往查看http://www.wwlib.cn/index.php/artread/artid/9960.html http分块传输绕过 http分块传输⼀直是⼀个很经典的绕过⽅式,只是在近⼏年分块传输⼀直被卡的很死,很多waf都开始加 …...
常用API_2:应用程序编程接口:ArrayList
文章目录 ArrayList常用方法 案例 :上菜 ArrayList 常用方法 来自黑马程序员学习视频 案例 :上菜 待完善...
【Linux操作系统】进程的基本概念(PCB对象)详解
目录 一、进程的基本概念二、进程的描述组织(PCB对象)1.PCB的基本概念2.为什么要有PCB对象(操作系统对进程的组织管理)3.PCB对象的内部属性(tast_struct结构体) 三、查看进程1.ps指令2.top指令3.通过 /proc…...
曙光宁畅中科可控所有服务器机型出厂默认IPMI用户密码
机型 默认IP 用户名/密码 通用 SG机型 DHCP admin/admin 通用 KK机型 DHCP admin/admin 通用 NC 机型 DHCP Admin/Admin5000 I420-G10、I620-G15、I650-G15、I840-GS、I840-G10、I840-G25、I980-G10、A420r-G、A620r-G、A840-G10、TC4600刀片、TC46…...
mysql查线上数据注意数据库的隔离级别
数据库的隔离级别定义了一个事务可能对其他并发事务的可见性,以及它们可能对数据库的影响。隔离级别的选择影响着并发性能和数据的一致性,不同的隔离级别能够防止不同程度的并发问题,如脏读(Dirty Reads)、不可重复读&…...
【专业解析】移动硬盘能识别却打不开:数据恢复实战指南
在数字化时代,移动硬盘作为我们存储重要数据的主要工具之一,其稳定性和安全性直接关系到信息的完整与便捷访问。然而,不少用户会遇到一个令人头疼的问题:移动硬盘能被电脑识别,但尝试打开时却遭遇失败,这往…...
系统 hap
sdk\toolchains\lib\UnsgnedReleasedProfileTemplate.json 各个权限需要的等级 OpenAtom OpenHarmony { "version-name":"2.0.0", "version-code":2, "app-distribution-type":"os_integration", "…...
【Material-UI】按钮与第三方路由库的集成详解
文章目录 一、ButtonBase 组件简介二、与第三方路由库的集成1. React Router示例代码 2. Next.js示例代码 三、客户端导航的优势四、其他自定义集成1. 使用自定义组件示例代码 五、总结 在现代前端开发中,单页应用(SPA)变得越来越普遍。这种应…...
Python获取Excel内容
Python获取Excel内容 目录 Python获取Excel内容1.读取Excel并登陆2.下载Excel中图片 数据存储到列表3.上传到接口 需求:获取xlsx files目录下的所有Excel信息,并将数据打包成字典格式上传到接口 示例数据: 1.读取Excel并登陆 import os impo…...
python实现小游戏随机猜数
1、脚本练习 import random# 初始化剩余的猜测次数 counts 3 # 生成一个1到10之间的随机整数 numb random.randint(1, 10)# 循环直到猜测次数用完 while counts > 0:tmp input("请输入小鱼手里的数字 (你还剩下 {} 次机会): ".format(counts))guess int(tmp)…...
YOLOv5与YOLOv8 训练准备工作(不包含环境搭建)
前言:我发现除了安装环境需要耗费大量时间以外,对于训练前的准备工作也要琢磨一段时间,所以本篇主要讲一下训练前需要准备的工作(主要是XML格式换为txt,以及划分数据集验证集,和训练参数的设置)…...
字节跳动发Seed-TTS语音合成模型,可模仿任意人的声音,效果逼真
前期我们介绍过很多语音合成的模型,比如ChatTTS,微软语音合成大模型等,随着大模型的不断进步,其合成的声音基本跟真人没有多大的区别。本期介绍的是字节跳动自家发布的语音合成模型Seed-TTS。 Seed-TTS 推理包含四个功能模块&…...
微信小程序教程011-3:京西购物商城实战之Home页实现
文章目录 3、首页3.0 创建home分支3.1 配置网络请求3.2 轮播图区域3.2.1 请求轮播图的数据3.2.2 渲染轮播图的UI结构3.2.3 配置小程序分包3.2.4 点击轮播图跳转到商品详情页3.2.5 封装 uni.$showMsg() 方法3.3 分类导航区域3.3.1 获取分类导航的数据3.3.2 渲染分类导航的UI结构…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...
Sklearn 机器学习 缺失值处理 获取填充失值的统计值
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...
2.3 物理层设备
在这个视频中,我们要学习工作在物理层的两种网络设备,分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间,需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质,假设A节点要给…...
【iOS】 Block再学习
iOS Block再学习 文章目录 iOS Block再学习前言Block的三种类型__ NSGlobalBlock____ NSMallocBlock____ NSStackBlock__小结 Block底层分析Block的结构捕获自由变量捕获全局(静态)变量捕获静态变量__block修饰符forwarding指针 Block的copy时机block作为函数返回值将block赋给…...
MeshGPT 笔记
[2311.15475] MeshGPT: Generating Triangle Meshes with Decoder-Only Transformers https://library.scholarcy.com/try 真正意义上的AI生成三维模型MESHGPT来袭!_哔哩哔哩_bilibili GitHub - lucidrains/meshgpt-pytorch: Implementation of MeshGPT, SOTA Me…...
