clion开发stm32f4系列(一)————移植rt-thread os系统

news2024/11/25 0:24:10

前言

  1. 本次使用的rt-thread的版本为5.0.2
  2. 基于rt-thread sudio生成的源码进行拷贝和修改
  3. 工程基于上次创建工程的项目进行修改。
  4. 本次工程只是用了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 INTERFACE
        ipc/completion.c
        ipc/dataqueue.c
        ipc/pipe.c
        ipc/ringblk_buf.c
        ipc/ringbuffer.c
        ipc/waitqueue.c
        ipc/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 INTERFACE
        USE_HAL_DRIVER
        STM32F407xx
        $<$<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
)

调整链接文件和汇编文件

v在这里插入图片描述

在这里插入图片描述

## 调整

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 libraries
        stm32f4_bsp
        rt-thread
        stm32f4-driver

)

测试结果

在这里插入图片描述

通过debug测试(移植ok)

在这里插入图片描述

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

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

相关文章

Tomcat常见漏洞复现

Tomcat介绍 tomcat是一个开源而且免费的jsp服务器&#xff0c;默认端口:8080&#xff0c;属于轻量级应用服务器。它可以实现JavaWeb程序的装载&#xff0c;是配置JSP(Java Server Page)和JAVA系统必备的一款环境。在历史上也披露出来了很多的漏洞&#xff0c;这里我们讲几个经典…

中国区域创新能力评价报告数据(2001-2023年)

《中国区城创新能力评价报告》是以中国区域创新体系建设为主题的综合性、连续性的年度研究报告。以区域创新体系理论为指导&#xff0c;利用大量的统计数据&#xff0c;综合、客观及动态地给出各省市创新能力的排名与分析。 一、数据介绍 数据名称&#xff1a;中国区域创新能力…

文件夹内鼠标右键没有git bash here?

文件夹内鼠标右键没有git bash here? 如何解决&#xff0c;只需要三步 1、window 搜索git 2、进入git bash 3、输入文件路径&#xff0c;&#xff08;路径为反斜杠/&#xff09; 例如&#xff1a; D:/Desktop/photo

设计模式的概念

设计模式主要分为三类&#xff1a;创建类的设计模式、结构型设计模式、行为型设计模式。 创建类的设计模式&#xff1a;简单工厂&#xff0c;工厂模式&#xff0c;抽象工厂&#xff0c;建造者&#xff0c;单例&#xff0c;原型 结构型设计模式&#xff1a;代理模式、享元模式 行…

国密SM4算法进行数据的加密、签名和验签、解密

文章目录 前言一、SM4算法介绍二、生成128位密钥工具类三、SM4Util工具类四、测试示例 前言 本文介绍了SM4算法的基本概念、安全性以及在Java中的应用&#xff0c;包括生成16字节密钥、加密、解密、签名和验签的过程&#xff0c;展示了如何在实际开发中使用SM4算法进行信息安全…

enq: HW - contention事件来啦

业务系统反应数据库慢&#xff0c;根据时间查看awr报告。 先看一眼事件名称 HW enqueue 用于序列化超出段高水位线的空间分配。如果同时向对象添加大量数据&#xff0c;则多个进程可能同时尝试在高水位线上方分配空间&#xff0c;从而导致争用。 既然是控制资源并发的enq&…

WiFi Analyzer:你的开源WIFI管家!【送源码】

无论是在家里还是在公司&#xff0c;手机连接 WiFi 时&#xff0c;总是会出现 WiFi 信号比较弱&#xff0c;网速变慢的情况。如何检测 WiFi 信号的情况呢&#xff1f;今天给大家推荐一个开源项目——WiFi Analyzer。 项目简介 WiFi Analyzer 是一个开源的 Android 应用程序&a…

母带混音插件-Musik Hack Master Plan 1.59 WiN-MAC,长期更新持续有效

Musik Hack Master Plan 1.59 WiN-MAC 一款专业的音频母带制作流程&#xff0c;只需简单的控制就能制作出适合发布的母带&#xff1a; 水晶般清晰的响度、丰富的模拟饱和度、相位一致的成像、物理磁带模拟&#xff0c;以及修复和监听混音的额外工具。 一。Musik Hack Master P…

在 PhpStorm 中为 .java 文件启用语法高亮,需要正确配置文件类型和关联语言。

点击访问我的技术博客https://ai.weoknow.comhttps://ai.weoknow.com 因为我同时使用java和php混编所以在一个项目中如果同时打开IntelliJ IDEA和PhpStorm不符合我完美主义的本性。 捣鼓了一下搞定了 1. 添加文件类型关联 将 .java 文件与 Java 语言支持关联&#xff1a; …

新160个crackme - 023-TraceMe

运行分析 需破解用户名和序列号 PE分析 C程序&#xff0c;32位&#xff0c;无壳 静态分析&动态调试 ida打开&#xff0c;由main函数向下分析&#xff0c;找到DialogFunc函数&#xff0c;并找到关键判断函数sub_401340 进入sub_401340函数&#xff0c;发现算法 发现byte_405…

xxl-job源码学习笔记

文章目录 一、简介二、下载源码三、模块介绍四、源码解析4.1、调度中心启动流程&#xff08;xxl-job-admin&#xff09;4.1.1、JobTriggerPoolHelper&#xff08;触发任务执行的核心组件&#xff09;4.1.2、JobRegistryHelper&#xff08;维护和更新调度中心与执行器之间的注册…

常见中间件漏洞(四、Apache合集)

目录 四、Apache 4.1 CVE-2021-41773 漏洞简介 影响版本 环境搭建 漏洞复现 四、Apache 4.1 CVE-2021-41773 Apache HTTP Server 路径穿越漏洞 漏洞简介 该漏洞是由于Apache HTTP Server 2.4.49版本存在目录穿越漏洞,在路径穿越目录<Directory/>Require all gra…

Spring Boot 依赖之 lombok的@Data注解

Spring Boot 依赖之 lombok的Data注解 编译之后的代码 Java源代码 引入lombok 一、创建 Spring Boot 项目 启动 IntelliJ IDEA&#xff0c;点击 File -> New -> Project...在新项目对话框中&#xff0c;选择 Spring Initializr&#xff0c;点击 Next配置 Spring Ini…

RF放大器(传输线+终止传输线+奥品电路中常见问题+调谐放大器)

2024-8-6&#xff0c;星期二&#xff0c;22:57&#xff0c;天气&#xff1a;晴&#xff0c;心情&#xff1a;晴。下班抽出点时间看看书&#xff0c;话不多说&#xff0c;学习开始啦。 今日继续学习模电自选教材的第六章&#xff0c;多级放大器、RF放大器和功率放大器。主要学习…

机械学习—零基础学习日志(高数23——无穷小运算)

零基础为了学人工智能&#xff0c;真的开始复习高数 这段时间&#xff0c;把张宇老师讲解考研的第一部分基本全部学习完毕了。 这里把第一部分的内容最后汇总一下。 无穷小运算——吸收律 这里展示一些无穷小的具体计算思路 无穷小运算——计算方法 泰勒展开的原则 夹逼准则…

C语言程序设计-[6] if语句分支结构

if语句分支结构有三种形式&#xff0c;分别按照语句形式、流程图表示、示例的步骤进行讲解。 1、if语句的一般形式 ——简单if语句 语句形式&#xff1a;if(表达式) 语句1&#xff1b; 执行过程&#xff1a; 如果表达式值为“真”,执行该语句1&#xff0c;然后执行if的下一…

【生成式人工智能-四-chatgpt的训练过程-pretrain预训练自督导式学习督导式学习】

大模型是怎么被训练出来的具有人类智慧的 阶段一训练-自我学习-具备知识训练资料self-supervised learning&#xff08;自督导式学习&#xff09; 阶段二-怎么让模型具备人的智慧supervised learning 督导式学习预训练pretrain为什么要用预训练的模型&#xff1f;Adapter逆向工…

【大专生学前端】:挑战与机遇并存——你怎么看?

在当今互联网飞速发展的时代&#xff0c;前端开发作为连接用户与产品的重要桥梁&#xff0c;一直备受关注。然而&#xff0c;近期社会上流传着一种说法&#xff1a;“大专生学前端&#xff0c;没有前途了&#xff0c;毕业即失业。”这一观点不仅引发了广泛的讨论&#xff0c;也…

【爬虫实战】利用代理爬取电商数据

文章目录 前言工具介绍实战获取网站数据编写代码数据展示 推荐总结 前言 当今电商平台正经历着快速的转型与升级。随着技术的进步和用户需求的多样化&#xff0c;电商不仅从简单的在线购物演变为综合性的购物生态系统&#xff0c;还融合了人工智能、大数据和云计算等先进技术。…

freeRTOS入门学习-基于STM32F103C8T6最小系统板-使用cubeMX创建一个新的工程

一、准备工作 首先打开我们的cubeMX软件&#xff0c;搜索我们对应的MCU&#xff0c;我这里使用的是c8t6最小系统板 接下来双击我们需要的芯片型号 二、System Core配置 进入界面后我们先进行时钟的配置 将HSE配置为晶振 然后我们将SYS配置成为serial wire&#xff0c; …