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结构…...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...

Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...