尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

rtthread学习笔记系列 -- 13 线程

rtthread学习笔记系列 -- 13 线程
📅 发布时间:2026/6/19 9:43:02

@

目录
  • 13 线程
    • 13.1 线程创建
    • 13.2 线程启动
    • 13.3 线程挂起
    • 13.4 线程延时
    • 13.5 线程超时
    • 13.6 线程退出 && 线程删除

在这里插入图片描述

https://github.com/wdfk-prog/RT-Thread-Study

13 线程

13.1 线程创建

  • 初始化上下文信息
  • 将栈初始化为 # 号
rt_uint8_t *rt_hw_stack_init(void       *tentry,void       *parameter,rt_uint8_t *stack_addr,void       *texit){struct stack_frame *stack_frame;rt_uint8_t         *stk;unsignedlong       i;stk  = stack_addr + sizeof(rt_uint32_t);stk  = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stk, 8);stk -= sizeof(struct stack_frame);stack_frame = (struct stack_frame *)stk;/* init all register */for (i = 0; i < sizeof(struct stack_frame) / sizeof(rt_uint32_t); i ++){((rt_uint32_t *)stack_frame)[i] = 0xdeadbeef;}stack_frame->exception_stack_frame.r0  = (unsignedlong)parameter; /* r0 : argument */stack_frame->exception_stack_frame.r1  = 0;                        /* r1 */stack_frame->exception_stack_frame.r2  = 0;                        /* r2 */stack_frame->exception_stack_frame.r3  = 0;                        /* r3 */stack_frame->exception_stack_frame.r12 = 0;                        /* r12 */stack_frame->exception_stack_frame.lr  = (unsignedlong)texit;     /* lr */stack_frame->exception_stack_frame.pc  = (unsignedlong)tentry;    /* entry point, pc */stack_frame->exception_stack_frame.psr = 0x01000000L;              /* PSR */#if USE_FPUstack_frame->flag =0;#endif /* USE_FPU *//* return task's current stack address */return stk;}

R0-R3: 这些寄存器在函数调用时通常用于传递参数。R0 被设置为传入的参数,而 R1 到 R3 被初始化为 0。这是因为在这个特定的上下文中,我们只需要一个参数。如果有更多的参数,它们会被放在 R1,R2,和 R3 中。

LR (Link Register): 这个寄存器通常包含函数返回地址。LR 被设置为 texit,当任务完成时,它会跳转到这个地址。

PC (Program Counter): 这个寄存器包含下一条要执行的指令的地址。PC 被设置为 tentry,这意味着当任务开始时,它会从这个地址开始执行。

PSR (Program Status Register): 这个寄存器包含了关于程序状态的信息,如条件代码和中断禁用位。在这个函数中,PSR 被设置为 0x01000000L,这是一个特定的值,表示默认的状态

  • 初始化线程定时器

13.2 线程启动

  • 上锁
  • 该函数将恢复一个线程并将其放入系统就绪队列。
    • 停止线程定时器
    • 从挂起链表中移除,插入就绪链表中
  • 解锁并调度

13.3 线程挂起

  • 设置状态为挂起状态
  • 等待下一次触发时挂起

13.4 线程延时

  • 设置定时器超时时间并启动
  • 执行一次调度安排

rt_thread_delay 和 rt_thread_delay_until delay 是相对时间,delay_until 是绝对时间

13.5 线程超时

  • 线程定时器超时后,从挂起链表中移除,插入就绪链表中

13.6 线程退出 && 线程删除

  • 线程退出
    • 设置线程状态为 RT_THREAD_CLOSE
    • 从就绪链表中移除
    • 释放线程资源

相关新闻

  • 实用指南:Docker 插件生态:从网络插件到存储插件的扩展能力解析
  • 完整教程:【小红书】API接口,获取笔记列表
  • 提高组热身赛小计(非题目顺序)

最新新闻

  • 2026南阳黄金回收白银回收铂金回收门店实测|本地正规实体老店无套路门店推荐 - 中安检金银铂钻回收
  • 2026厦门黄金回收白银回收铂金回收门店实测|本地正规实体老店无套路门店推荐 - 中安检金银铂钻回收
  • 2026荆州黄金回收白银回收铂金回收门店实测|本地正规实体老店无套路门店推荐 - 中安检金银铂钻回收
  • AAFF论坛精粹|光影与新生:赵非、卞灼跨越代际的影像哲思
  • lsyat门禁闸机获取历史记录—幽冥大陆(一百38)-东方仙盟
  • Kafka07-集成-尚硅谷

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号