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

rtthread 线程

创建动态线程最简单代码

#include <rtthread.h>//包含头文件static rt_thread_t thread1 = RT_NULL; //创建线程控制块指针,指向空static void thread1_entry(void *parameter)//线程入口(干什么)
{rt_kprintf("do something");
}int thread_run(void)
{thread1 = rt_thread_create("thread1",thread1_entry, RT_NULL,1024,30,10);if (thread1 != RT_NULL)//判断创建是否成功rt_thread_startup(thread1);return 0;
}MSH_CMD_EXPORT(thread_run, thread sample);//导入命令

静态函数

  1. 其他文件中可以定义相同名字的函数,不会发生冲突。
  2. 静态函数不能被其他文件所用。
  3. 静态函数会被自动分配在一个一直使用的存储区,直到退出应用程序实例,避免了调用函数时压栈出栈,速度快很多。

静态变量

  1. 不会被其他文件所访问,修改
  2. 其他文件中可以使用相同名字的变量,不会发生冲突。

字节对齐

参考此视频

动态线程和静态线程

动态线程静态线程
内存不占用RW/ZI段空间,空间小,需要动态分配内存占用RW/ZI段空间 ,不需要动态分配内存
运行效率相对低相对高

句柄

动态线程:static rt_thread_t tid1 = RT_NULL;
静态线程:static struct rt_thread thread2;
在这里插入图片描述

参看定义,得知:typedef struct rt_thread *rt_thread_t;,会发现前者是后者的指针,本质上是一样的东西

创建方式

比较:相对动态线程,静态线程需要额外提供线程句柄和线程栈地址

动态线程静态线程
线程名字需要提供需要提供
线程入口需要提供需要提供
入口参数需要提供需要提供
线程栈大小需要提供需要提供
线程优先级需要提供需要提供
时间片轮需要提供需要提供
线程句柄不需要提供 需要提供
线程栈地址不需要提供需要提供
  1. 动态线程
 tid1 = rt_thread_create("thread1",//线程名字thread1_entry, //线程入口RT_NULL, //入口函数参数THREAD_STACK_SIZE,//线程栈大小THREAD_PRIORITY, //线程优先级THREAD_TIMESLICE);//时间片轮
  1. 静态线程
rt_thread_init(&thread2, //线程句柄"thread2",//线程名字thread2_entry,//线程函数入口RT_NULL,//入口参数&thread2_stack[0],//线程栈地址sizeof(thread2_stack),//线程栈大小THREAD_PRIORITY - 1, //线程优先级THREAD_TIMESLICE);//时间片

备注:RW/ZI段是程序总共使用的RAM字节数


#include <rtthread.h>#define THREAD_PRIORITY         25 //定义的线程优先级
#define THREAD_STACK_SIZE       512//线程栈的大小
#define THREAD_TIMESLICE        5//时间片//动态线程
static rt_thread_t tid1 = RT_NULL; //静态定义一个线程号//线程1做什么:一直打印数值
static void thread1_entry(void *parameter)
{rt_uint32_t count = 0;while (1){/* 线程1采用低优先级运行,一直打印计数值 */rt_kprintf("thread1 count: %d\n", count ++);rt_thread_mdelay(500);}
}//静态线程
ALIGN(RT_ALIGN_SIZE)//字节对齐,线程栈需要4字节对齐(4字节刚好是一个指针的大小)
static char thread2_stack[1024];//线程栈
static struct rt_thread thread2;//线程2干什么:打印十次数字之后就打印退出语句
static void thread2_entry(void *param)
{rt_uint32_t count = 0;//计数for (count = 0; count < 10 ; count++){rt_kprintf("thread2 count: %d\n", count);}rt_kprintf("thread2 exit\n");
}//运行函数,需要被外部使用所以就不能使用static定义
int thread_sample(void)
{//创建线程1tid1 = rt_thread_create("thread1",thread1_entry, RT_NULL,THREAD_STACK_SIZE,THREAD_PRIORITY, THREAD_TIMESLICE);if (tid1 != RT_NULL)rt_thread_startup(tid1);//如果创建成功,启动线程1rt_thread_init(&thread2, //创建线程2"thread2",thread2_entry,RT_NULL,&thread2_stack[0],sizeof(thread2_stack),THREAD_PRIORITY - 1, THREAD_TIMESLICE);rt_thread_startup(&thread2);return 0;
}MSH_CMD_EXPORT(thread_sample, thread sample);//导入命令

关键字和API

关键字和API解释
rt_thread_t动态线程(结构体指针)
rt_thread静态线程(结构体)
ALIGN(RT_ALIGN_SIZE)设置变量4字节对齐
rt_thread_create创建动态线程
rt_thread_init创建静态线程
MSH_CMD_EXPORT命令导入

相关文章:

rtthread 线程

创建动态线程最简单代码 #include <rtthread.h>//包含头文件static rt_thread_t thread1 RT_NULL; //创建线程控制块指针&#xff0c;指向空static void thread1_entry(void *parameter)//线程入口&#xff08;干什么&#xff09; {rt_kprintf("do something"…...

伯恩光学再成被执行人:多次因劳动纠纷被起诉,曾冲刺港交所上市

近日&#xff0c;贝多财经从天眼查APP了解到&#xff0c;伯恩光学&#xff08;深圳&#xff09;有限公司&#xff08;下称“伯恩光学”&#xff09;因《伯恩光学&#xff08;深圳&#xff09;有限公司与温*燕劳动合同纠纷的案件》一事&#xff0c;被广东省深圳市龙岗区人民法院…...

mysql基础操作2

通配符_&#xff1a;一个任意字符&#xff0c;like ‘张_’%&#xff1a;任意长度的字符串&#xff0c;like ‘co%’&#xff0c;‘%co’&#xff0c;‘%co%’【】&#xff1a;括号中所指定范围内的一个字符&#xff0c;like ‘9W0【1-2】’【^】&#xff1a;不在括号中所指定范…...

指针的进阶【下篇】

文章目录&#x1f4c0;8.指向函数指针数组的指针&#x1f4c0;9.回调函数&#x1f4c0;8.指向函数指针数组的指针 &#x1f330;请看代码与注释&#x1f447; int Add(int x, int y) {return x y; } int Sub(int x, int y) {return x - y; } int main() {int (*pf)(int, int…...

不同序列模型的输入和输出总结

不同序列模型的输入和输出总结 文章目录不同序列模型的输入和输出总结RNNLSTMGRURNN RNN 是迭代输出&#xff1a; 输入第一个 -> 输出第二个&#xff0c; 输入第二个 -> 输出第三个&#xff0c; 输出倒数第二个 -> 输出最后一个。 LSTM LSTM 也是迭代输出&#xff…...

基于神经网络补偿的主动悬架自适应控制

目录 前言 1. 1/4悬架模型 2.仿真分析 2.1仿真模型 2.2仿真结果 2.1 形① 2.2 形② 3. 总结 前言 上两篇博客我们介绍了神经网络补偿控制律的仿真测试&#xff0c;从仿真结果我们可以得知神经网络具有逼近扰动&#xff0c;并将其补偿的作用。 上两篇文章链接&#xf…...

什么是链表,如何实现?(单链表篇)

欢迎来到 Claffic 的博客 &#x1f49e;&#x1f49e;&#x1f49e; “仅仅活着是不够的&#xff0c;还需要有阳光&#xff0c;自由和花的芬芳。” 前言&#xff1a; 在日常使用的网站和软件中&#xff0c;列表属于最常见的一种东西了&#xff0c;其实现形式有顺序表&#xff0…...

探针台简介

探针台&#xff0c;是我们半导体实验室电学性能测试的常用设备&#xff0c;也是各大实验室以及芯片设计、封装测试的熟客。设备具备各项优势&#xff0c;高性能低成本&#xff0c;用途广&#xff0c;操作方便&#xff0c;在不同测试环境下&#xff0c;测试结果稳定&#xff0c;…...

ABAP 辨析 标准表|排序表|哈希表

1、文档介绍 本文档将介绍内表的区别和用法&#xff0c;涉及标准表、排序表、哈希表 2、用法与区别 2.1、内表种类 内表顶层为任意表&#xff0c;任意表分为索引表和哈希表&#xff0c;索引表又可分为标准表和排序表&#xff0c;结构如图&#xff1a; 2.2、内表用法 2.2.1…...

MIGO 物料过账 创建物料凭证 BAPI_GOODSMVT_CREATE

文章目录1.前台操作2.需求分析2.1调用方式2.2分为两大概括:2.3业务逻辑细节图3.BAPI_GOODSMVT_CREATE4.RFC接口代码5.总结1.前台操作 SAP CO01(创建生产订单)/MIGO(发货投料)前台操作 这里面有migo的前台操作,首先了解前台操作后再去写RFC接口是比较容易理解的.!! 2.需求分析…...

项目经理处理团队冲突 5大注意事项

1、在时间、场景、体验矩阵中的5种处理方式 第一种方式&#xff1a;强迫命令&#xff0c;即职位高的一方在不考虑对方感受的情况下&#xff0c;强迫职位低的一方接受自己的意见。这种处理方式的适用场景为重要且紧急&#xff0c;这种方式团队成员的体验感低。 第二种方式&#…...

Linux(Centos)安装TDengine

目录1&#xff1a;简介2&#xff1a;前期准备3&#xff1a;安装4&#xff1a;启动5&#xff1a;开机自启动6&#xff1a;安装客户端驱动(如果别的服务器需要链接TD则需要此步操作)7&#xff1a;基础命令1&#xff1a;简介 官网&#xff1a; https://www.taosdata.com/简介&…...

大数据处理技术导论(6) | Datawhale组队学习46期

文章目录1. hive 概述2. hive 与传统关系型数据库的对比3. hive 数据类型4. hive 数据模型5. hive 实战5.1 创建表5.2 修改表5.3 清空表、删除表5.4 其他命令项目地址 https://github.com/datawhalechina/juicy-bigdata&#xff0c;感谢项目团队的付出。本次主要学习 hive 相关…...

Java——异常

目录 什么是异常 异常处理主要的5个关键字 异常的体系结构 异常语法 异常的分类 异常的处理流程 异常的处理 防御式编程 异常的抛出 throw的注意事项 异常的捕获 异常声明throws try-catch捕获处理 finally 自定义异常类 throw和throws区别 什么是异常 程序在运行时出现错…...

Netty之io.netty.util.concurrent.Promise与io.netty.util.concurrent.Future初解

目录 目标 Netty版本 Netty官方API 三者之间的关系 基本使用方法 java.util.concurrent.Future io.netty.util.concurrent.Future io.netty.util.concurrent.Promise 目标 了解io.netty.util.concurrent.Promise与io.netty.util.concurrent.Future的基本使用方法。了解…...

【正点原子FPGA连载】第二十一章AXI DMA环路测试 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第二十一章AXI D…...

手把手搭建springboot项目06-springboot整合RabbitMQ及其原理和应用场景

目录前言工作流程-灵魂画手名词解释交换机类型一、安装1.1 [RabbitMQ官网安装](https://www.rabbitmq.com/download.html)1.2 Docker安装并启动二、食用教程2.1.导入依赖2.2 添加配置2.3 代码实现2.3.1 直连&#xff08;Direct&#xff09;类型2.3.2 引入消息手动确认机制2.3.2…...

如何根据IP地址判断是IPv4还是IPv6

IPv4地址的书写形式为:“192.168.0.1” IPv6地址的书写形式为:“2001:DB8:85A3:8D3:1319:8A2E:370:7344” 给你一个IP地址,它有三种可能:IPv4、IPv6、既不是IPv4也不是IPv6的无效地址。所以,如果用函数ipGetAddressAsNumber,只能判断是不是ipv4,编写如下函数: int R…...

山地车和公路车怎么选

公路车&#xff1a; 只能适应平坦的路面&#xff0c;骑行阻力小&#xff0c;速度快比较适合新手 山地车&#xff1a; 能适应所有路面&#xff0c;更注重操控性和舒适性 怎么选&#xff1f; 1、先决定用途 旅游&#xff1a;旅行车、山地车、 通勤&#xff1a;公路车 2、预…...

Zotero设置毕业论文/中文期刊参考文献格式

大家在使用zotero时很容易遇到的问题&#xff1a; 英文参考文献中有多个作者时出现“等”&#xff0c;而不是用"et al"引文最后面有不需要的DOI号&#xff0c;或者论文链接对于一些期刊分类上会出现OL字样&#xff0c;即[J/OL]作者名为全大写 本文主要解决以上几个…...

《Essential Macleod中文手册》实战指南:从入门到精通的光学薄膜设计

1. 光学薄膜设计入门&#xff1a;为什么选择Essential Macleod&#xff1f; 第一次接触光学薄膜设计时&#xff0c;我和大多数人一样感到无从下手。市面上有那么多仿真软件&#xff0c;为什么专业工程师都推荐Essential Macleod&#xff1f;简单来说&#xff0c;它就像光学薄膜…...

Windows平台Docker部署Home Assistant全攻略:从零配置到智能家居控制

1. 环境准备与Docker安装 想在Windows上玩转智能家居中枢&#xff1f;DockerHome Assistant组合绝对是新手友好方案。我去年给父母家改造智能家居时就用的这套方案&#xff0c;实测稳定运行一年多没出过问题。先说说基础环境搭建&#xff0c;这里会手把手带你避开我踩过的坑。 …...

EzArduino:面向初学者的Arduino面向对象封装库

1. EzArduino 库概述&#xff1a;面向嵌入式初学者的面向对象 Arduino 抽象层EzArduino 是一个专为 Arduino 平台设计的轻量级 C 封装库&#xff0c;其核心目标是降低硬件交互门槛、提升代码可读性与可维护性。它并非替代 Arduino Core 的底层实现&#xff0c;而是在Arduino.h基…...

嵌入式C语言面试核心问题与实战技巧

嵌入式C语言面试核心问题深度解析1. 预处理指令与宏定义1.1 常量定义与类型安全#define SEC_YEAR (365*24*60*60)UL这个宏定义展示了三个关键点&#xff1a;使用括号确保运算顺序正确使用UL后缀防止16位系统溢出让预处理器计算表达式而非硬编码结果1.2 参数化宏设计#define MIN…...

TAI-TECH台庆 WCM2012F2SF-900T04 SOP-4 共模滤波器

特性 1.高频下具有高共模阻抗&#xff0c;实现优异的噪声抑制性能。 2.WCM2012F2SF系列实现小型化和低外形。尺寸为2.0x1.2x1.2mm。3.无铅(Pb)且不含卤素&#xff0c;符合RoHS标准。4.工作温度-40~125C(包括自温升)...

OpenClaw+nanobot自动化处理客服常见问题

OpenClawnanobot自动化处理客服常见问题 1. 为什么选择OpenClawnanobot做客服自动化 去年夏天&#xff0c;我的个人项目突然迎来一波用户增长&#xff0c;随之而来的是每天上百条的客服咨询。当我连续三天凌晨两点还在回复"如何重置密码"这类问题时&#xff0c;终于…...

数字边境守卫:拦截偷渡的非法算法

一、数字边境的隐喻&#xff1a;软件测试的守卫使命在数字化浪潮中&#xff0c;软件系统如同虚拟国境线&#xff0c;非法算法则似试图偷渡的入侵者。软件测试工程师正是这条边境的守卫者——通过精准的测试策略构建防御工事&#xff0c;拦截逻辑漏洞、数据泄露、恶意代码等&quo…...

FPGA设计实战:如何用IBUFDS_IBUFDISABLE原语给你的差分输入省电(附Vivado 2023.1配置)

FPGA低功耗设计实战&#xff1a;IBUFDS_IBUFDISABLE原语在差分信号中的节能应用 在高速数字系统设计中&#xff0c;差分信号因其优异的抗干扰能力和噪声抑制特性&#xff0c;已成为LVDS、HDMI等接口的标准配置。然而&#xff0c;差分输入缓冲器带来的额外功耗往往被工程师忽视—…...

STM32栈空间溢出处理与优化技术

STM32栈空间溢出处理技术解析1. 栈空间溢出问题概述在STM32嵌入式开发中&#xff0c;函数内部定义的局部变量存储在栈空间中。STM32的启动文件中预定义了栈空间大小&#xff0c;当局部变量占用空间超过预设栈大小时&#xff0c;虽然编译过程不会报错&#xff0c;但运行时可能出…...

屏幕水印革命:在代码里嵌入反扫描图腾

引言&#xff1a;测试安全的隐形护盾在软件测试领域&#xff0c;敏感数据泄露如同悬顶之剑——测试用例、缺陷报告、核心算法一旦被非法截屏传播&#xff0c;轻则导致知识产权流失&#xff0c;重则引发商业灾难。传统防护手段&#xff08;如权限管控&#xff09;在手机拍照、截…...