【计算机基础】-17-RT-Thread的软定时器的回调函数的执行,是在timer系统线程的上下文执行,还是在创建软件定时器的线程的上下文中执行? 📅 发布时间:2026/7/11 22:03:26 👁️ 浏览次数: 在 RT-Thread 中软定时器Soft Timer的回调函数是在统一的timer系统线程的上下文中执行的而不是在创建该定时器的线程上下文中执行。✅ 明确结论软定时器回调 在timer系统线程中串行执行与创建者线程无关一、机制详解1. 软定时器依赖一个全局系统线程当启用软定时器功能#define RT_USING_TIMER_SOFT时RT-Thread 内核会在初始化阶段自动创建一个名为timer的系统线程// 内核自动创建无需用户干预 rt_thread_t timer_thread rt_thread_create(timer, rt_thread_timer_entry, RT_NULL, RT_TIMER_THREAD_STACK_SIZE, RT_TIMER_THREAD_PRIO, 10);该线程的入口函数是rt_thread_timer_entry()它循环检查所有已启动的软定时器一旦发现有定时器到期就依次调用其回调函数。2. 回调执行流程用户回调函数timer 线程定时器链表系统节拍中断用户回调函数timer 线程定时器链表系统节拍中断检查到期定时器仅标记触发 timer 线程唤醒如通过信号量执行软定时器的回调函数 注意系统节拍中断只负责检测和标记到期的软定时器不直接执行回调。真正的回调由timer线程在线程上下文中完成。二、为什么不是在创建者线程中执行定时器创建后创建者线程可能已经退出、阻塞或执行其他任务若回调在创建者线程执行会导致无法保证回调及时性可能破坏创建者线程的逻辑多个定时器难以统一调度。RT-Thread 采用集中式处理所有软定时器回调由专用线程串行处理简化设计并保证可预测性。三、验证方法方法 1在回调中打印当前线程名void my_timer_callback(void *param) { rt_kprintf(Current thread: %s\n, rt_thread_self()-name); // 输出一定是 timer而非创建定时器的线程名如 main }方法 2FinSH 中观察msh / list_thread ... main 10 suspend ... # 创建定时器的线程 timer 0 ready ... # ← 回调在此线程执行 ...四、重要特性与注意事项特性说明串行执行所有软定时器回调按到期顺序依次执行前一个未返回后一个不会开始可阻塞回调中可调用rt_sem_take()、rt_mb_send()等阻塞 API优先级固定由RT_TIMER_THREAD_PRIO决定默认为 0最高优先级之一与硬定时器区别硬定时器回调在SysTick 中断中执行不能阻塞五、示例代码#include rtthread.h void timer_cb(void *param) { rt_kprintf([Callback] Running in thread: %s\n, rt_thread_self()-name); // 可安全调用阻塞函数 rt_thread_mdelay(100); } int test_soft_timer(void) { rt_kprintf([Main] Current thread: %s\n, rt_thread_self()-name); rt_timer_t timer rt_timer_create(soft_tmr, timer_cb, RT_NULL, 500, RT_TIMER_FLAG_PERIODIC | RT_TIMER_FLAG_SOFT_TIMER); rt_timer_start(timer); return 0; } MSH_CMD_EXPORT(test_soft_timer, test soft timer);输出结果[Main] Current thread: msh [Callback] Running in thread: timer [Callback] Running in thread: timer ...可见尽管在msh线程中创建回调始终在timer线程中执行。六、总结问题答案软定时器回调在哪执行在名为timer的系统线程中是否依赖创建者线程❌完全无关能否阻塞✅可以因为在线程上下文多个软定时器如何调度串行执行按到期时间顺序记住RT-Thread 的软定时器 一个专用线程 一个回调队列与创建者彻底解耦。这是其实现“线程上下文回调”的核心设计。
GLM-4.7-Flash在MySQL数据库智能查询优化中的应用 GLM-4.7-Flash在MySQL数据库智能查询优化中的应用 你是不是也遇到过这种情况:一个看起来挺简单的SQL查询,在测试环境跑得飞快,一到生产环境就慢得像蜗牛爬?或者某个报表查询,数据量稍微大一点,就得等上几分… 2026/7/11 12:01:40
llava-v1.6-7b OCR功能实测:图片文字识别效果展示 LLaVA-v1.6-7b OCR功能实测:图片文字识别效果展示 1. 引言:当AI学会“看图识字” 想象一下,你拍了一张满是文字的会议白板照片,或者一张复杂的商品说明书,传统的OCR(光学字符识别)工具可能因为… 2026/7/8 22:59:20
VibeVoice Pro语音情感建模:基于CFG Scale的细粒度情绪强度分级 VibeVoice Pro语音情感建模:基于CFG Scale的细粒度情绪强度分级 1. 为什么传统TTS总让你等得不耐烦? 你有没有试过在客服对话中,刚打完字就急着听回复,结果却要等上好几秒才听到第一个音节?或者在直播互动场景里&… 2026/7/10 4:27:16
鸿蒙实战:HandwritingFeatureExtractor 手写特征提取 鸿蒙实战:HandwritingFeatureExtractor 手写特征提取 前言(必读) 图:鸿蒙实战:HandwritingFeatureExtractor 手写特征提取(第 55 篇) 运行效果截图(HarmonyOS NEXT) 笔… 2026/7/11 22:02:47
F-16 非线性模型 S-Function 解析:C MEX 接口与 18 维状态量传递 F-16 非线性动力学模型的 C MEX 接口深度解析当我们需要在 Simulink 环境中实现高保真飞行器仿真时,标准的 Simulink 模块往往难以满足复杂非线性动力学建模的需求。这时,C MEX S-Function 就成为了连接 Simulink 可视化建模环境与底层高性能 C 代码的桥… 2026/7/11 22:02:47
亲人底层原理的最小单位是什么? 第一步:什么是亲人? 很多人认为: 亲人有血缘关系但现实并不完全如此。 例如: 有血缘关系的人,可能彼此十分疏远。没有血缘关系的人(养父母、长期照顾者等),也可能成为最亲近的人。 因… 2026/7/11 22:00:46
Unity3d特效粒子光束效果FXlightpack:从丁达尔光到性能优化的实战指南 1. 项目概述:从“光”开始,重塑游戏视觉体验在游戏开发的世界里,视觉特效从来都不是锦上添花,而是决定玩家沉浸感与游戏品质的核心骨架。特别是“光”的表现,它定义了场景的氛围、战斗的张力,甚至是叙事的情… 2026/7/11 22:00:46
Crypto、Cipher与Password:Java加密开发的三个核心概念 Java安全开发中,有三个极易混淆的术语:Crypto、Cipher和Password。它们的中文翻译都与“密码”有关,但在计算机科学中各自承担着截然不同的角色。 Crypto:密码学的总称,是一个领域或工具箱 Cipher:加密/解密… 2026/7/11 21:58:46
Codex AI表单生成实战:20分钟快速开发USM自定义表单 在实际企业开发中,表单处理是每个开发者都会遇到的场景。特别是当业务需要快速创建和部署自定义表单时,手动编写每个表单的HTML、验证逻辑和提交处理会消耗大量时间。Codex作为AI辅助开发工具,能够显著提升这类重复性工作的效率。项目标题中提… 2026/7/11 21:56:45
5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 [特殊字符] 5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 🎬 【免费下载链接】zimuku_for_kodi Kodi 插件,用于从「字幕库」网站下载字幕 项目地址: https://gitcode.com/gh_mirrors/zi/zimuku_for_kodi 还记得那个深夜吗?你刚下载… 2026/7/11 0:00:11
工业信号干扰处理与FOD4216光耦应用实战 1. 工业环境中的信号干扰挑战在工业自动化领域,信号采集的准确性直接关系到整个控制系统的可靠性。典型的工业现场充斥着各种干扰源:大功率电机启停产生的电磁干扰、变频器工作产生的高频噪声、继电器触点火花放电,以及长距离传输引入的共模干… 2026/7/11 0:00:11
OpenHarmony 完整项目工程整合规范 + 模块化分层架构(API23+ 标准企业级结构) 摘要前面系列教程覆盖了 ArkUI 组件、路由、生命周期、本地存储、网络请求、Ability 底层全套基础能力,本篇统一梳理标准工程目录分层、模块化拆分、代码复用规范、全局工具统一管理、项目打包权限配置、常见工程报错统一解决方案,形成可直接用于课程设计… 2026/7/11 0:00:11
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/11 14:53:30
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/11 12:30:52
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/11 15:29:59