stm32开发之threadx使用记录(主逻辑分析)

前言

  1. threadx的相关参考资料 论坛资料、微软官网
  2. 本次使用的开发板为普中科技–麒麟,核心芯片为 stm32f497zgt6
  3. 开发工具选择的是stm32cubemx(代码生成工具)+clion(代码编写工具)
  4. 编译构建环境选择的是arm-none-gcc编译

本次项目结构

在这里插入图片描述

CMakeList对应的配置

set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_VERSION 1)
cmake_minimum_required(VERSION 3.27)# specify cross-compilers and tools
set(CMAKE_C_COMPILER arm-none-eabi-gcc)
set(CMAKE_CXX_COMPILER arm-none-eabi-g++)
set(CMAKE_ASM_COMPILER arm-none-eabi-gcc)
set(CMAKE_AR arm-none-eabi-ar)
set(CMAKE_OBJCOPY arm-none-eabi-objcopy)
set(CMAKE_OBJDUMP arm-none-eabi-objdump)
set(SIZE arm-none-eabi-size)
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)# project settings
project(app_threadx C CXX ASM)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_C_STANDARD 11)
SET(CMAKE_C_FLAGS_DEBUG "-Og -g -ggdb3" CACHE INTERNAL "c debug compiler flags")
SET(CMAKE_CXX_FLAGS_DEBUG "-Og -g -ggdb3" CACHE INTERNAL "cxx debug compiler flags")
SET(CMAKE_ASM_FLAGS_DEBUG "-g -ggdb3" CACHE INTERNAL "asm debug compiler flags")add_compile_definitions(ARM_MATH_CM4;ARM_MATH_MATRIX_CHECK;ARM_MATH_ROUNDING)
add_compile_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16)
add_link_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16)add_compile_options(-mcpu=cortex-m4 -mthumb -mthumb-interwork)
add_compile_options(-ffunction-sections -fdata-sections -fno-common -fmessage-length=0)add_compile_options($<$<COMPILE_LANGUAGE:ASM>:-x$<SEMICOLON>assembler-with-cpp>)
if ("${CMAKE_BUILD_TYPE}" STREQUAL "Release")message(STATUS "Maximum optimization for speed")add_compile_options(-Ofast)
elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo")message(STATUS "Maximum optimization for speed, debug info included")add_compile_options(-Ofast -g)
elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "MinSizeRel")message(STATUS "Maximum optimization for size")add_compile_options(-Os)
else ()message(STATUS "Minimal optimization, debug info included")add_compile_options(-Og -g)
endif ()
add_definitions(-DDEBUG -DUSE_HAL_DRIVER -DSTM32F407xx)
set(COMMON_DRIVER_DIR ${CMAKE_CURRENT_LIST_DIR}/../Drivers)
list(APPEND HAL_INC ${COMMON_DRIVER_DIR}/STM32F4xx_HAL_Driver/Inc)
list(APPEND HAL_INC ${COMMON_DRIVER_DIR}/CMSIS/Include)
list(APPEND HAL_INC ${COMMON_DRIVER_DIR}/CMSIS/Device/ST/STM32F4xx/Include)
list(APPEND HAL_SRC ${COMMON_DRIVER_DIR}/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal*.c)
list(APPEND HAL_SRC ${COMMON_DRIVER_DIR}/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_sdmmc.c)
file(GLOB_RECURSE HAL_SRC ${HAL_SRC})
#[[------------------------------------------------硬件驱动库-------------------------------------------]]
list(APPEND BSP_DRIVER_INC ${COMMON_DRIVER_DIR}/Bsp/)
list(APPEND BSP_DRIVER_DRC ${COMMON_DRIVER_DIR}/Bsp/*.c)
file(GLOB_RECURSE BSP_DRIVER_DRC ${BSP_DRIVER_DRC})#[[------------------------------------------------THREAD X-------------------------------------------]]
add_definitions(-DTX_ENABLE_FPU_SUPPORT -DTX_ENABLE_STACK_CHECKING -DTX_INCLUDE_USER_DEFINE_FILE)
set(THREAD_X_DIR ${CMAKE_CURRENT_LIST_DIR}/../Component/threadx)
list(APPEND THREAD_X_INC ${THREAD_X_DIR}/common/inc)
list(APPEND THREAD_X_SRC ${THREAD_X_DIR}/common/src/*.c)
list(APPEND THREAD_X_INC ${CMAKE_CURRENT_LIST_DIR}/Middleware/threadx/inc)
list(APPEND THREAD_X_SRC ${CMAKE_CURRENT_LIST_DIR}/Middleware/threadx/src/*.*)
#[[------------------------------------------------THREAD X utility-------------------------------------------]]
add_definitions(-DTX_EXECUTION_PROFILE_ENABLE)
list(APPEND THREAD_X_UTILITY_INC ${THREAD_X_DIR}/utility/execution_profile_kit)
list(APPEND THREAD_X_UTILITY_SRC ${THREAD_X_DIR}/utility/execution_profile_kit/tx_execution_profile.c)
list(APPEND THREAD_X_INC ${THREAD_X_UTILITY_INC})
list(APPEND THREAD_X_SRC ${THREAD_X_UTILITY_SRC})
file(GLOB_RECURSE THREAD_X_SRC ${THREAD_X_SRC})
#[[-------------------------------------------------------------------------------------------]]
set(APP_INC${CMAKE_CURRENT_LIST_DIR}/Core/Inc
)
file(GLOB_RECURSE APP_SRC${CMAKE_CURRENT_LIST_DIR}/Core/Startup/startup_stm32f407zgtx.s${CMAKE_CURRENT_LIST_DIR}/Core/Src/*.c
)set(LINKER_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/Core/Startup/STM32F407ZGTX_FLASH.ld)
#[[-------------------------------------------------------------------------------------------]]
include_directories(${BSP_DRIVER_INC})
list(APPEND SOURCES ${BSP_DRIVER_DRC})include_directories(${THREAD_X_INC})
list(APPEND SOURCES ${THREAD_X_SRC})
include_directories(${APP_INC})
list(APPEND SOURCES ${APP_SRC})
include_directories(${HAL_INC})
list(APPEND SOURCES ${HAL_SRC})# lib# math lib
link_libraries(m)
link_libraries(c)
add_link_options(-Wl,-gc-sections,--print-memory-usage,-Map=${PROJECT_BINARY_DIR}/${PROJECT_NAME}.map)
add_link_options(-mcpu=cortex-m4 -mthumb -mthumb-interwork)
add_link_options(-T ${LINKER_SCRIPT})
add_executable(${PROJECT_NAME}.elf ${SOURCES} ${LINKER_SCRIPT})set(HEX_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.hex)
set(BIN_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.bin)
add_custom_command(TARGET ${PROJECT_NAME}.elf POST_BUILDCOMMAND ${CMAKE_OBJCOPY} -Oihex $<TARGET_FILE:${PROJECT_NAME}.elf> ${HEX_FILE}COMMAND ${CMAKE_OBJCOPY} -Obinary $<TARGET_FILE:${PROJECT_NAME}.elf> ${BIN_FILE}COMMENT "Building ${HEX_FILE}
Building ${BIN_FILE}")

threadx的使用

  1. 在应用层面和大多数的rtos操作方式大致相同,一般是创建线程、信号、互斥量;然后进入系统调度。

入口函数

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述在这里插入图片描述

tx_kernel_enter()函数的理解(个人)

  1. 是一个模板函数框架
  2. 通过相关的宏定义进行扩展对应的功能
  3. 对设备驱动部分使用的是_tx_initialize_low_level()–使用的汇编进行编写
  4. 扩展更加灵活,提供多个节点的宏定义

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

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

相关文章

Thinkphp5萤火商城B2C小程序源码

源码介绍 Thinkphp5萤火商城B2C小程序源码&#xff0c;是一款开源的电商系统&#xff0c;为中小企业提供最佳的新零售解决方案。采用稳定的MVC框架开发&#xff0c;执行效率、扩展性、稳定性值得信赖。 环境要求 Nginx/Apache/IIS PHP5.4 MySQL5.1 建议使用环境&#xff…

微信小程序开发学习笔记——4.6tabBar底部tab栏配置用法

>>跟着b站up主“咸虾米_”学习微信小程序开发中&#xff0c;把学习记录存到这方便后续查找。 一、tabBar https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#tabBar 二、icon下载 https://www.iconfont.cn/collections/index?spma…

C++学习——指针篇

本篇文章记录我学习C的指针内容&#xff0c;希望我的分享能给你带来不一样的收获&#xff01; 目录 一、指针有什么好处 二、什么是指针 三、C指针内容详解 &#xff08;一&#xff09;、空指针&#xff08;Null&#xff09; &#xff08;二&#xff09;、指针的算数运算 …

DL00198-基于3DUnet的脑肿瘤语义分割完整代码+数据集含输出结果

完整代码数据集见文末 3DUNet是一种卷积神经网络&#xff08;CNN&#xff09;&#xff0c;专为处理3D图像而设计。它基于U-Net架构&#xff0c;是一种对称的卷积网络&#xff0c;具有上采样和下采样的过程。PyTorch 3DUNet在U-Net的基础上添加了更多的卷积层和跳跃连接&#xf…

在git上先新建仓库-把本地文件提交远程

一.在git新建远程项目库 1.选择新建仓库 以下以gitee为例 2.输入仓库名称&#xff0c;点击创建 这个可以选择仓库私有化还公开权限 3.获取仓库clone链接 这里选择https模式就行&#xff0c;就不需要配置对电脑进行sshkey配置了。只是需要每次提交输入账号密码 二、远…

网站基本建设基本上步骤

网站基本建设基本上步骤 一.领取一个免费域名和SSL证书&#xff0c;和CDN 1.打开网站链接&#xff1a;https://www.rainyun.com/ycpcp_ 首先创建一个CDN&#xff0c;这里以我加速域名“cdntest.biliwind.com 1”为例 这里就要填写 cdntest.biliwind.com 1 &#xff0c;而不是…

4.1 JavaScript的使用

JavaScript有两种使用方式&#xff1a;一是在HTML文档中直接添加代码&#xff1b;二是将JavaScript脚本代码写到外部的JavaScript文件中&#xff0c;再在HTML文档中引用该文件的路径地址。 这两种使用方式的效果完全相同&#xff0c;可以根据使用率和代码量选择相应的开发方式。…

Qt5.15以上版本在线安装步骤,可选择更多早期版本

以ubuntu系统为例&#xff1a; 1、先去下载在线安装程序&#xff1a; https://download.qt.io/official_releases/online_installers/ 选择合适的版本&#xff0c;这里是在x64机器的ubuntu虚拟机里安装QT&#xff0c;所以选择如下版本&#xff1a; 或者直接在终端执行如下命令…

Qt | 元对象系统

一、QByteArray 类简介 1、QByteArray 类简介  该类是一个用于处理字符串的类似于 C++的 string 类型的类,在 Qt 中,对字符串的处理,经常使用的是 QString 类,该类保证字符串以\0结尾,并使用隐式共享(copy-on-write)来减少内存用量和不必要的数据复制。  QByteArra…

【ControlNet v3版本论文阅读】

网络部分最好有LDM或者Stable Diffusion的基础&#xff0c;有基础的话会看的很轻松 Abstract 1.提出了一种网络结构支持额外输入条件控制大型预训练的扩散模型。利用预训练模型学习一组不同的条件控制。 2.ControlNet对于小型&#xff08;<50k&#xff09;或大型&#xff…

Halcon的HWindowControl控件在C#WinForm中的使用介绍(包括绘制ROI)

Halcon的HSmartWindowControl控件在C#WinForm中的使用介绍&#xff08;包括绘制ROI&#xff09; 文章目录 Halcon的HSmartWindowControl控件在C#WinForm中的使用介绍&#xff08;包括绘制ROI&#xff09;一、 引入hSmartWindowControl控件二、 编写打开图像功能三、 编写绘制RO…

操作系统②——内存管理

1. 栈、堆 1.1 程序的内存分配 栈区&#xff08;stack&#xff09;&#xff1a;由编译器自动分配释放 &#xff0c;存放函数的参数值&#xff0c;局部变量的值等。其操作方式类似于数据结构中的栈。堆区&#xff08;heap&#xff09;&#xff1a;一般由程序员分配释放&#x…

光猫桥接模式详细步骤

目录 一、前言 路由模式 &#xff08;宽带默认&#xff09; 桥接模式 二、桥接模式步骤 &#xff08;一&#xff09;图片记录备份 设备信息图 网络侧信息 远程管理密码 宽带上网设置 &#xff08;二&#xff09;桥接模式开始 光猫设置 路由器设置 一、前言 重点&a…

2_5.Linux存储的基本管理

实验环境&#xff1a; 系统里添加两块硬盘 ##1.设备识别## 设备接入系统后都是以文件的形式存在 设备文件名称&#xff1a; SATA/SAS/USB /dev/sda,/dev/sdb ##s SATA, dDISK a第几块 IDE /dev/hd0,/dev/hd1 ##h hard VIRTIO-BLOCK /de…

sharding‐jdbc之分库分表(mysql主从同步的数据库安装和使用)

水平分表 创建基础工程.. 引入sharding‐jdbc的maven依赖包 注意需要数据库连接池等依赖 <dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-spring-boot-starter</artifactId><version>4.0.0-RC1&l…

【JavaWeb】Day36.MySQL概述——数据库设计-DDL(三)

查询 关于表结构的查询操作&#xff0c;工作中一般都是直接基于图形化界面操作。 1.查询当前数据库所有表 2.查看指定表结构 3.查询指定表的建表语句 注意&#xff1a;23版的点击导航中的转到DDL 修改 关于表结构的修改操作&#xff0c;一般也是直接基于图形化界面操作。 添…

智能感应门改造工程

今天记录一下物联网专业学的工程步骤及实施过程 智能感应门改造工程 1 规划设计1.1 项目设备清单1.2项目接线图 软件设计信号流 设备安装与调试工程函数 验收 1 规划设计 1.1 项目设备清单 1.2项目接线图 软件设计 信号流 设备安装与调试 工程函数 工程界面: using System; …

【STM32】存储器和位带映射(bit band mapping)

文章目录 0 前言1 关于地址和存储器2 STM32内部存储器3 位带映射&#xff08;bit band mapping&#xff09;4 扩展&#xff1a;IAP 0 前言 最近在研究stm32标准库&#xff0c;对使用宏定义实现位操作的函数非常感兴趣&#xff0c;简单的一句PAout(1) 0;就能实现某个引脚电平的…

Linux离线安装python3(源码编译)

1、下载python包 下载python3.9.6的源码包 python下载 下载后&#xff0c;解压&#xff0c;目录如下&#xff1a; -rw-------. 1 root root 1454 Aug 26 2023 anaconda-ks.cfg -rw-r--r--. 1 root root 25640094 Apr 4 21:52 Python-3.9.6.tgz drwxrwxr…

前端三剑客 —— JavaScript (第一天)

目录 回顾内容 1.弹性布局 2.网格布局 JavaScript 概述 发展 浏览器 什么是Javascript JavaScript 能干什么 JavaScript需要的环境 JavaScript初体验 基本数据 JS书写方式 行内JS 页面JS 外部JS 1&#xff09;创建外部JS文件 2&#xff09;编写页面 对话框 警…