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结构…...
树莓派4B学习笔记——IO通信篇(UART)
文章目录UART简介树莓派使用UART与串口屏通信串口屏简介硬件连接配置串口接口树莓派打开UART接口树莓派安装串口调试助手编程实现wiringSerial.h Serial简介C语言实现树莓派UART与串口屏通信总结树莓派4B入门学习笔记汇总UART简介 UART是一种通用串行数据总线,用于…...
无线水位远程监测系统简介
无线水位远程监测系统是一种利用无线通信技术实现水位数据实时采集、传输和监控的解决方案,广泛应用于河流、水库、水塔、地下水等场景。一、国科WD300无线水位远程监测系统概述WD300系列无线水位远程监测系统,是用来测量水电站大坝、水库、前池、调压井…...
【AI CTO视角】算力不是堆资源,而是一场精细化工程
经常和行业内的朋友交流,发现一个普遍现象:一提到AI算力建设,很多人的第一反应还是堆卡、扩集群、上规模,仿佛GPU数量上去了,算力竞争力自然就来了。 但从实际落地与商业化视角看,尤其在大模型规模化服务、…...
高效备份QQ空间历史数据:GetQzonehistory的本地化解决方案
高效备份QQ空间历史数据:GetQzonehistory的本地化解决方案 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾担心多年积累的QQ空间说说会因账号异常或平台政策调整而永…...
5步掌握labelCloud:打造专业级3D点云标注工作流
5步掌握labelCloud:打造专业级3D点云标注工作流 【免费下载链接】labelCloud A lightweight tool for labeling 3D bounding boxes in point clouds. 项目地址: https://gitcode.com/gh_mirrors/la/labelCloud 想要为你的自动驾驶项目或机器人视觉系统准备高…...
IOSSecuritySuite 最佳实践:避免常见陷阱的7个关键点
IOSSecuritySuite 最佳实践:避免常见陷阱的7个关键点 【免费下载链接】IOSSecuritySuite iOS platform security & anti-tampering Swift library 项目地址: https://gitcode.com/gh_mirrors/io/IOSSecuritySuite 在iOS应用开发中,安全防护是…...
香港科技大学破解自动驾驶难题:让AI在虚拟暴风雨中学会驾驶
当你在雨夜开车时,雨滴敲打挡风玻璃,雾气遮挡视线,路面反射着车灯的光芒——这些恶劣天气条件对人类司机来说已经够困难了,对于正在学习驾驶的人工智能来说更是巨大的挑战。这项由香港科技大学、厦门大学和美团联合完成的突破性研…...
用crosstool-ng 制作 Windows 上的 aarch64-linux-gnu 交叉编译器
crosstool-ng 官网链接:https://crosstool-ng.github.io/docs/ 需要注意的是,crosstool-ng不能以root身份运行,否则会提示以下错误: [ERROR] You must NOT be root to run crosstool-NG 故下面的所有操作都不要在root下进行。当…...
GHelper终极指南:轻量级华硕笔记本控制工具全面解析
GHelper终极指南:轻量级华硕笔记本控制工具全面解析 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Scar…...
如何在不影响员工效率的前提下,彻底杜绝Web威胁?
在数字化转型的浪潮中,浏览器早已从一个简单的网页浏览工具,演变为企业业务运转的核心枢纽。无论是访问云应用、处理内部系统,还是与客户协作,几乎每项工作都离不开它。然而,正是这种无处不在的依赖,让浏览…...
