当前位置: 首页 > news >正文

threadx 线程以及优先级调整案例

以正点原子stm32 f407板子为例子,如何创建工程 CubeMX+CubeIDE在我之前的文章里提到了,这里我就不多重复。

有关线程优先级的两个参数 priority和preemption,我们来看看在官网是如何定义的

 

在main.c里面添加一个printf转串口的代码,这样我们用printf就可以直接转发到串口,我在之前用CubeMX设置的是串口1,用的是PA9和PA10,所以这里也设置的是huart1

/* USER CODE BEGIN PTD */
#if defined ( __GNUC__) && !defined(__clang__)
/* With GCC, small printf (option LD Linker->Libraries->Small printfset to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
/* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
PUTCHAR_PROTOTYPE{HAL_UART_Transmit(&huart1, (uint8_t *)&ch,1,0xFFFF);return ch;}
/* USER CODE END PD */

 

接下来我们在Core里面新建一个threadTest的文件夹,写上hey.c和hey.h两个文件 

 

把这个文件夹添加到路径下

 

 hey.h

#include "tx_api.h"
#include "main.h"
#include "stdio.h"
void processHey(VOID *memory_ptr);

hey.c 

/** hey.c**  Created on: Jul 14, 2024*      Author: liqun*/#include "hey.h"
TX_THREAD Hey;
UINT OldPriority;
static VOID hey_entry(ULONG thread_input);
void processHey(VOID *memory_ptr){TX_BYTE_POOL *byte_pool = (TX_BYTE_POOL*)memory_ptr;CHAR    *pointer;
//	pointer = malloc(1024);tx_byte_allocate(byte_pool, (VOID **) &pointer, 1024, TX_NO_WAIT);INT ret = tx_thread_create(&Hey,"hey thread",hey_entry,0,pointer,1024,1,1,TX_NO_TIME_SLICE,TX_AUTO_START);if(ret != TX_SUCCESS){printf("hey is not be created\n");}
}static VOID hey_entry(ULONG thread_input){printf("thread hey is starting\n");CHAR *name;UINT state;ULONG run_count;UINT priority;UINT preemption_threshold;UINT time_slice;TX_THREAD *next_thread;TX_THREAD *suspended_thread;UINT status;if(tx_thread_info_get(&Hey,&name,&state, &run_count,&priority, &preemption_threshold,&time_slice, &next_thread,&suspended_thread)==TX_SUCCESS){printf("Current Hey priority is %d \n",priority);}else{printf("get thread info failed\n");}if(tx_thread_priority_change(&Hey,10,&OldPriority)==TX_SUCCESS){printf("thread priority is changed from 1 to 10\n");if(tx_thread_info_get(&Hey,&name,&state, &run_count,&priority, &preemption_threshold,&time_slice, &next_thread,&suspended_thread)==TX_SUCCESS){printf("Current Hey priority is %d \n",priority);};}else{printf("thread priority is not changed\n");};
}

在hey.c里面,我们创建了一个线程,线程占用的栈大小为1024,指针为pointer,记得要初始化一下指针(我这里用的是threadx的方法,如果不想这么复杂,需要传入memory_ptr然后byte_pool的话,其实直接pointer = malloc(1024)也是可以运行的,就是自己要手动free)。在线程hey_enter里面,我们调用了tx_thread_info_get去获取当前线程的所有参数,然后我们用tx_thread_priority_change去修改线程的优先级。当然,如果需要修改线程的抢占,也是可以的,有tx_thread_preemption_change这个函数

然后在app_azure_rtos.c里引入hey.h头文件并调用

 运行程序,打开串口调试助手

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • npm和yarn清理缓存命令
  • 【Delphi】webView2 开发中注意事项:Content-MD5
  • 社交网络图数据集
  • WGCLOUD的ping设备监测可以导入excel数据吗
  • Redis基本数据结构
  • 品牌产业出海指南如何搭建国际化架构的跨境电商平台?
  • 品牌产业出海指南(二)如何搭建跨境电商自营型平台?
  • SCI一区级 | Matlab实现GJO-CNN-LSTM-Multihead-Attention多变量时间序列预测
  • Win11 Anaconda3卸载与重装(20240714)
  • Linux udp编程
  • Efficient Estimation of Word Representations in Vector Space论文笔记解读
  • 【学习笔记】4、组合逻辑电路(下)
  • 小程序自学教程
  • Android 内部保持数据的方式
  • 前端Canvas入门——一些注意事项
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 07.Android之多媒体问题
  • Angular 响应式表单 基础例子
  • golang中接口赋值与方法集
  • Hibernate最全面试题
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • leetcode46 Permutation 排列组合
  • Node 版本管理
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • python学习笔记 - ThreadLocal
  • SwizzleMethod 黑魔法
  • 工程优化暨babel升级小记
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 使用 QuickBI 搭建酷炫可视化分析
  • 学习HTTP相关知识笔记
  • 7行Python代码的人脸识别
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​configparser --- 配置文件解析器​
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ## 基础知识
  • #C++ 智能指针 std::unique_ptr 、std::shared_ptr 和 std::weak_ptr
  • #FPGA(基础知识)
  • #mysql 8.0 踩坑日记
  • (done) 两个矩阵 “相似” 是什么意思?
  • (Python) SOAP Web Service (HTTP POST)
  • (待修改)PyG安装步骤
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (一) springboot详细介绍
  • (自适应手机端)行业协会机构网站模板
  • .gitignore
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .net 微服务 服务保护 自动重试 Polly
  • .NET中GET与SET的用法
  • .NET中的Exception处理(C#)
  • .NET中统一的存储过程调用方法(收藏)
  • @RequestBody与@ModelAttribute