STM32使用ThreadX示例以及tx_thread_create解析

示例代码

以下是一些基本示例代码,用于STM32F4 Discovery板和ThreadX库。

#include "stm32f4xx.h"
#include "tx_api.h"/* 定义任务堆栈大小 */
#define TASK_STACK_SIZE 1024/* 定义任务优先级 */
#define TASK_PRI 16/* 定义两个任务的ID */
TX_THREAD thread_0;
TX_THREAD thread_1;/* 定义任务堆栈 */
uint8_t thread_0_stack[TASK_STACK_SIZE];
uint8_t thread_1_stack[TASK_STACK_SIZE];/* 任务入口函数 */
void thread_0_entry(ULONG thread_input) 
{/* 执行任务0的操作 */
}void thread_1_entry(ULONG thread_input)
{/* 执行任务1的操作 */
}/* 程序入口函数 */
int main(void)
{/* 初始化STM32硬件 *//* 初始化ThreadX内核 */tx_kernel_enter();/* 创建任务0 */tx_thread_create(&thread_0, "thread_0", thread_0_entry, 0,thread_0_stack, TASK_STACK_SIZE,TASK_PRI, TASK_PRI, TX_NO_TIME_SLICE, TX_AUTO_START);/* 创建任务1 */tx_thread_create(&thread_1, "thread_1", thread_1_entry, 0,thread_1_stack, TASK_STACK_SIZE,TASK_PRI, TASK_PRI, TX_NO_TIME_SLICE, TX_AUTO_START);/* 启动ThreadX内核 */tx_kernel_start();/* 永远不会运行到这里 */return 0;
}

以上代码演示了如何创建两个任务并启动ThreadX内核。每个任务都有一个独立的堆栈和一个入口函数,可以在其中执行任务的操作。

在STM32上使用ThreadX,您还可以使用一些其他的API函数来实现任务间通信、互斥、同步等操作,例如信号量和消息队列等。具体用法请参考ThreadX的官方文档或示例代码。

创建任务函数 tx_thread_create 解析

tx_thread_create函数是ThreadX库中用于创建线程的函数。它的原型如下:

UINT tx_thread_create(TX_THREAD *thread_ptr, CHAR *name_ptr,VOID (*entry_function)(ULONG),ULONG entry_input,VOID *stack_start, ULONG stack_size,UINT priority, UINT preempt_threshold,ULONG time_slice, UINT auto_start);

下面对tx_thread_create函数的各个参数进行解析:

  • thread_ptr:指向TX_THREAD类型的指针,用于保存新创建线程的控制块信息。

  • name_ptr:线程的名称,以字符串形式提供。

  • entry_function:线程的入口函数,即线程创建后要执行的函数。它必须是一个无返回值(void),接受ULONG类型参数的函数指针,因为ThreadX会将传递给线程的参数作为entry_input传递给入口函数。

  • entry_input:线程入口函数的输入参数。可以是任何类型的数据,但将其转换为ULONG类型并在入口函数中进行相应的类型转换。

  • stack_start:线程堆栈的起始地址。通常通过定义一个数组,并将数组的地址作为参数传递给此处,用于分配线程的堆栈空间。

  • stack_size:线程堆栈的大小,以字节为单位。

  • priority:线程的优先级。ThreadX使用固定优先级调度算法来确定线程执行的顺序,优先级较高的线程将在优先级较低的线程之前执行。

  • preempt_threshold:线程的抢占阈值。当一个线程的优先级高于或等于抢占阈值时,它可以抢占当前正在执行的线程。

  • time_slice:线程的时间片大小。时间片是指线程在多任务系统中执行的时间段。如果设置为0,则禁用时间片调度。

  • auto_start:指示线程是否在创建后自动启动的标志。如果设置为TX_AUTO_START,则线程在创建后立即运行。如果设置为其他非零值或0,则线程需要手动启动。

tx_thread_create函数返回一个无符号整数类型的值,表示函数执行的状态。常见的返回值包括TX_SUCCESS(成功)和TX_PTR_ERROR(参数错误)等。

通过使用tx_thread_create函数,可以在ThreadX环境中创建新的线程,并为其指定入口函数、堆栈、优先级等参数。这样就可以在STM32微控制器上同时运行多个线程,实现多任务处理和并发执行的应用程序。

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

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

相关文章

mysql报SQLSTATE[22007]的错误的一个原因

最近在修改一个程序,打算将$video这个参数保存到数据库。修改的过程中出现错误。导致该程序不能发布新文章。在程序的一个db.php程序文件里使用var_dump($input); 和var_dump($stmt); 语句看到里错误信息,并找到里错误原因。信息里包含的错误代码是&…

java如何初始化数组(如:int[]、byte[]等)

Java语言中数组必须先初始化,然后才可以使用。所谓初始化就是为数组的数组元素分配内存空间,并为每个数组元素附初始值。 注意:数组完成初始化后,内存空间中针对该数组的各个元素就有个一个默认值: 基本数据类型的整数…

conda: error: argument COMMAND: invalid choice: ‘activate‘

参考:https://github.com/conda/conda/issues/13022 输入后重启terminal即可

根据客户端设备更改 SAP GUI 布局

了解如何根据所使用的设备在客户端系统上显示图像。在这里,我们使用 _clientedition 系统变量来获取有关客户端系统的设备类型、平台类型和许可证类型的信息。我们将引导您完成以下步骤。 1.删除映像容器。 //删除屏幕上的图像容器 del("X[IMAGE_CONTAINER]&…

pytorch Nvidia 数据预处理加速

目录 安装 不支持Windows: 官方说明: 预处理加速: 学习笔记: 参考: 深度学习预处理工具---DALI详解_nvidia.dali.fn_扫地的小何尚的博客-CSDN博客 安装 不支持Windows: 官方说明: Insta…

【设计模式】使用建造者模式组装对象并加入自定义校验

文章目录 1.前言1.1.创建对象时的痛点 2.建造者模式2.1 被建造类准备2.2.建造者类实现2.3.构建对象测试2.4.使用lombok简化建造者2.5.lombok简化建造者的缺陷 3.总结 1.前言 在我刚入行不久的时候就听说过建造者模式这种设计模式,当时只知道是用来组装对象&#xf…

Vuex存值取值与异步请求处理

目录 前言 一、Vuex简介 1.Vuex是什么 2.Vuex的核心概念 3.使用Vuex的好处 4.Vuex执行流程 二、Vuex的使用步骤 1.安装Vuex 2.创建store模块,分别维护state/actions/mutations/getters 3.使用Vuex存储值,获取值和改变值 1.state.js---存值 2.…

关于Vuex的基础使用存值及异步

目录 一.概述 二.取值 2.1.安装 2.2.菜单栏 2.3.模块 2.4.引用 三.改值 四.异步&后台请求 好啦今天就到这里了希望能帮到你哦!!! 一.概述 Vuex 是一个用于 Vue.js 应用程序的状态管理库。它主要用于集中管理应用程序中的共享状态&a…

idea中maven plugin提示not found

在终端中输入: mvn dependency:resolve 然后 解决了部分问题 Plugin org.apache.maven.plugins:maven-jar-plugin:3.1.0 not found 改为3.3.0了 Plugin maven-source-plugin:3.3.0 not found 改为 2.4 了 版本下降了 感觉后继有坑 待观察

Linux网络和系统管理

网络管理命令 1、ifconfig 命令 作用 ifconfig 命令用于显示或设置网络设备的信息。格式 ifconfig [网卡名字] [参数]可选项 网卡名字:指定要操作的网络设备。参数: up:启动指定网卡。down:关闭指定网卡。-a:显示所有网卡接口的信息,包括未激活的网卡接口。使用示例 1…

时代风口中的Web3.0基建平台,重新定义Web3.0!

近年来,Web3.0概念的广泛兴起,给加密行业带来了崭新的叙事方式,同时也为加密行业提供了更加具有想象力的应用场景与商业空间,并让越来越多的行业从业者们意识到只有更大众化的市场共性需求才能推动加密市场的持续繁荣。当前围绕这…

IDEA设置自动导入包

IDEA设置自动导入包 首先进入设置选项 之后勾选以下两项: 第一项:IntelliJ IDEA 将在我们书写代码的时候自动帮我们优化导入的包,比如自动去掉一些没有用到的包。 第二项: IntelliJ IDEA 将在我们书写代码的时候自动帮我们导入…

.NET ABP.Zero 项目疑似内存排查历程

当前项目是 .NET 5 EentityFrameworkCore,疑似内存泄漏,之所以说是疑似是因为到目前位置还没有能准确的定位到问题。当前这个框架从 .NET Core 2.1 就开始用,期间有升级到 3.1、5.0、6.0,在排查过程中还把 5.0 分支升级到了 7.0 。…

HashMap -- 调研

HashMap 调研 前言JDK1.8之前拉链法: JDK1.8之后JDK1.7 VS JDK1.8 比较优化了一下问题: HashMap的put方法的具体流程?HashMap的扩容resize操作怎么实现的? 前言 在Java中,保存数据有两种比较简单的数据结构:数组和链表。 数组的特点是:寻址容易,插入…

【RabbitMQ 实战】11 队列的结构和惰性队列

一、 队列的结构 队列的组成: 队列由 rabbit_amgqueue_process 和 backing_queue两部分组成。rabbit_amqqueue_process负责协议相关的消息处理,即接收生产者发布的消息、向消费者交付消息、处理消息的确认 (包括生产端的 confirm 和消费端的 ack) 等。…

Spring Boot读取配置文件

Spring Boot 是一种用于快速构建基于Spring的应用程序的框架,它提供了很多便利的功能和约定,使开发者可以快速搭建、配置和部署应用程序。在Spring Boot中,读取配置文件是一个非常常见的任务,本文将介绍如何在Spring Boot应用程序…

Qt/C++原创推流工具/支持多种流媒体服务/ZLMediaKit/srs/mediamtx等

一、前言 1.1 功能特点 支持各种本地视频文件和网络视频文件。支持各种网络视频流,网络摄像头,协议包括rtsp、rtmp、http。支持将本地摄像头设备推流,可指定分辨率和帧率等。支持将本地桌面推流,可指定屏幕区域和帧率等。自动启…

CAN通信-应用

up起来 驱动加载完成&#xff0c;使用ifconfig -a 可以看到两个节点 can0: flags128<NOARP> mtu 16unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 10 (UNSPEC)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX p…

【Vuex+ElementUI】Vuex中取值存值以及异步加载的使用

一、导言 1、引言 Vuex是一个用于Vue.js应用程序的状态管理模式和库。它建立在Vue.js的响应式系统之上&#xff0c;提供了一种集中管理应用程序状态的方式。使用Vuex&#xff0c;您可以将应用程序的状态存储在一个单一的位置&#xff08;即“存储”&#xff09;中&#xff0c;…

MATLAB算法实战应用案例精讲-【图像处理】SLAM技术详解(应用篇)

目录 前言 知识储备 概率论基础 边缘概率 联合概率和独立 独立与条件独立