Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Kernel
15天入门RT-THREAD第三天
发布于 2018-05-20 11:05:11 浏览:1489
订阅该版
[tocm] ## 线程的创建和删除 将大的任务拆分成多个小任务,每个小任务实现一个具体的功能,每个小任务创建一个线程 ### api - 创建线程 rt_thread_create - 创建线程 rt_thread_init - 删除线程 rt_thread_delete - 删除线程 rt_thread_detach - 启动线程 rt_thread_startup 线程创建时可以设置清理函数,释放线程占用的资源 线程可以导出到finsh shell,由用户控制什么时候执行 ### 线程的组成 - 线程代码 - 线程控制块 - 线程堆栈 ### 线程的代码形式 #### 无限循环形式 线程里有死循环 线程里需要有函数让出CPU使用权 #### 顺序执行形式 没有死循环,执行完代码后退出 退出后,会由空闲线程踢出调度队列,回收相关资源 ### 线程控制块 ``` struct rt_thread { /* rt object */ char name[RT_NAME_MAX]; /*线程名字 */ rt_uint8_t type; /*类型 */ rt_uint8_t flags; /*线程标志 */ #ifdef RT_USING_MODULE void *module_id; /**< id of application module */ #endif rt_list_t list; /*对象列表 */ rt_list_t tlist; /*线程列表 */ /* stack point and entry */ void *sp; /*sp指针 */ void *entry; /*函数入口 */ void *parameter; /*参数 */ void *stack_addr; /*栈地址 */ rt_uint32_t stack_size; /*栈大小 */ /* error code */ rt_err_t error; /*错误码 */ rt_uint8_t stat; /*线程状态*/ /* priority */ rt_uint8_t current_priority; /*当前优先级 */ rt_uint8_t init_priority; /* 初始化优先级*/ #if RT_THREAD_PRIORITY_MAX > 32 rt_uint8_t number; rt_uint8_t high_mask; #endif rt_uint32_t number_mask; #if defined(RT_USING_EVENT) /* thread event */ rt_uint32_t event_set; rt_uint8_t event_info; #endif #if defined(RT_USING_SIGNALS) rt_sigset_t sig_pending; /**< the pending signals */ rt_sigset_t sig_mask; /**< the mask bits of signal */ void *sig_ret; /**< the return stack pointer from signal */ rt_sighandler_t *sig_vectors; /**< vectors of signal handler */ void *si_list; /**< the signal infor list */ #endif rt_ubase_t init_tick; /*初始化时间片轮时间 */ rt_ubase_t remaining_tick; /*剩余时间 */ struct rt_timer thread_timer; /*线程定时器 */ void (*cleanup)(struct rt_thread *tid); /*清除函数 */ rt_uint32_t user_data; /*用户数据*/ }; ``` ### 线程创建 优先级数字越小,优先级越高 当优先级相同时,使用时间片轮调度法来调度 堆栈可以先设置的大一点,可以通过查看最大堆栈使用量,来设置合理的堆栈大小 #### 动态创建线程和静态创建线程 根据是否动态申请内存空间来区分是动态创建线程还是动态创建线程。 ##### 静态创建线程 静态创建线程需要先定义一个全局数组用来当线程的堆栈 静态创建线程返回值为是否创建成功 ##### 动态创建线程 动态创建线程的堆栈是动态申请的 动态创建线程返回值是线控控制块的指针
查看更多
1
个回答
默认排序
按发布时间排序
朝雨绫萧
2018-05-20
这家伙很懒,什么也没写!
线程控制块里还有些没加中文注释的不懂意思,有大神来解答下吗
撰写答案
登录
注册新账号
关注者
0
被浏览
1.5k
关于作者
朝雨绫萧
这家伙很懒,什么也没写!
提问
10
回答
22
被采纳
0
关注TA
发私信
相关问题
1
请教cpu使用率分析
2
选择FreeRTOS, 还是RT-Thread。
3
thread heap stack overflow ?
4
rtt消息队列delay问题
5
释放被删除线程的内存地方在哪里啊
6
请教:各线程结束后,释放其中的内存的连续性问题
7
STM32F103中断关于信号量、邮箱问题
8
RTT中的线程栈大小如何控制
9
关于线程由执行态变为挂起态的代码实现,,,
10
rt_malloc(rt_size_t size)内存分配函数最小分配尺寸问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
CherryUSB的bootuf2配置
2
在用clangd开发RTT吗,快来试试如何简单获得清晰干净的工作区
3
GD32F450 片内 flash驱动适配
4
STM32H7R7运行CherryUSB
5
RT-Smart首次线下培训,锁定2024 RT-Thread开发者大会!
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
freemodbus
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
12
个答案
1
次被采纳
踩姑娘的小蘑菇
5
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
6
次点赞
YZRD
2
篇文章
5
次点赞
lizimu
2
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部