UCOS-III 系统TICK接口详解

uCOS-III学习笔记 前一段时间笔者学习uCOS-III,第一次接触OS这个概念吧。下面把个人的学习笔记分享出来,仅供参考。 阅读详情

        在实时操作系统UCOS-III中,系统时钟节拍(Tick)是驱动内核定时和任务调度的关键因素。Tick管理涉及Tick初始化、Tick更新、Tick插入和删除以及Tick列表更新等操作。本文将详细介绍UCOS-III的Tick管理机制,并结合源码进行解析。

1. Tick管理概述

在UCOS-III中,Tick管理主要负责以下几个方面:

  • 记录系统运行的时钟节拍数。
  • 处理任务的延迟、超时和定时事件。
  • 在每个系统时钟节拍中更新任务状态和执行相应的操作。

Tick管理一般通过定时器中断来触发,每个定时器中断会调用相应的Tick处理函数来更新系统时钟和任务状态。

2. Tick初始化

Tick初始化函数OS_TickInit用于初始化与Tick处理相关的变量。

OS_TickInit函数主要完成以下任务:

  • 清除系统Tick计数器OSTickCtr
  • 初始化Tick列表指针OSTickList.TCB_Ptr
  • 初始化调试相关的变量(如果使能了调试功能)

OS_TickInit 流程图

b57644fa047f466a921c1726488bf7aa.png

3. Tick更新

        Tick更新函数OS_TickUpdate用于更新系统时钟节拍,并调用OS_TickListUpdate接口来更新任务的延迟和超时。

OS_TickUpdate函数主要完成以下任务:

  • 增加系统Tick计数器OSTickCtr
  • 调用OS_TickListUpdate函数更新任务的延迟和超时
  • 如果使能了动态Tick功能,更新动态Tick计数器OSTickCtrStep

OS_TickUpdate 接口流程图 

624943012206499b85690476f65b4f73.png 

4. Tick列表更新

OS_TickListUpdate函数用于更新系统中所有延迟或超时的任务。

OS_TickListUpdate主要完成以下任务:

  • 遍历Tick列表,更新任务的延迟时间
  • 根据任务的状态决定是否将任务插入就绪列表

 OS_TickListUpdate流程图

de66cdf05d584ba7920def9329d23a58.png

 

5. Tick插入和删除

OS_TickListInsert函数用于将任务插入Tick列表,OS_TickListRemove函数用于从Tick列表中移除任务。

OS_TickListInsert 主要完成以下任务:

  • 计算任务的剩余时间
  • 将任务按时间插入Tick列表中

 OS_TickListInsert 流程图

fa3ce5536105431faa035ee9ac4b8990.png

 

OS_TickListRemove 主要完成以下任务:

  • 从Tick列表中移除指定任务
  • 调整剩余任务的时间计数

OS_TickListRemove 流程图: 

290e8faabbb64701a2c93be192fc6052.png 

6. Tick更新流程

每当系统产生一个Tick时,OSTimeTick函数会被调用,执行以下步骤:

  1. 进入中断:通过调用OSIntEnter进入中断处理。
  2. 调用Tick钩子函数:通过OSTimeTickHook调用自定义的Tick钩子函数,在每个Tick时执行自定义操作。
  3. 时间片轮转调度:通过OS_SchedRoundRobin函数进行时间片轮转调度,确保相同优先级的任务得到公平的执行机会。
  4. 更新Tick计数器和任务延迟:通过OS_TickUpdate函数增加系统Tick计数器,并更新所有延迟任务的计数。
  5. 更新Tick列表:OS_TickUpdate函数内部调用OS_TickListUpdate函数,检查并更新所有因延迟或超时等待的任务,将到期的任务状态更新为就绪。
  6. 退出中断:通过调用OSIntExit退出中断处理。

Tick更新流程图

dd37dccac5434052852ddd528aa575aa.png

 7. 延时接口实现

       通过把当前任务插入Tick队列,系统周期性的检查此任务是否超时,超时则把此任务从Tick队列移除,插入就绪队列。

c217386a38794e8589fa1bf74edce745.png
    

8. 阻塞接口超时实现

    在uCOS-III中,任务在等待某些事件(如事件标志、信号量、消息队列、互斥锁、任务消息队列、任务信号量等)时可能会进入阻塞状态。为了避免任务无限期地等待,系统提供了超时机制,即当等待超过指定时间时,任务会被自动唤醒并继续执行后续操作。

8.1 实现过程

  • 任务调用等待接口

    • 任务通过调用等待接口(如事件标志等待接口OSFlagPend、信号量等待接口OSSemPend、消息队列等待接口OSQPend、互斥锁等待接口OSMutexPend、任务消息队列等待接口OSTaskQPend、任务信号量等待接口OSTaskSemPend)进入阻塞状态。
  • 等待接口调用OS_Pend

    • 各等待接口内部都会调用OS_Pend函数,该函数负责处理任务的等待逻辑,包括检查等待条件、设置任务状态等。
  • OS_Pend调用OS_TaskBlock

    • 在OS_Pend函数内部,当确定任务需要阻塞时,会调用OS_TaskBlock函数将任务设置为阻塞状态。
  • OS_TaskBlock调用OS_TickListInsert

    • OS_TaskBlock函数会调用OS_TickListInsert函数将任务插入Tick列表,以便系统周期性地检查任务是否超时。

8.2 实现流程图

512214dc09954c5c8e36c3f702aefede.png

          通过以上机制,能够有效管理任务的阻塞和超时,在实际应用中,通过合理设置任务的超时参数,可以避免任务无限期阻塞,提升系统的响应速度和稳定性。

9. 总结

        uCOS-III的Tick管理和阻塞接口超时机制提供了一种高效且可靠的方法来管理实时系统中的任务调度和超时处理。通过合理配置和使用这些机制,可以提高系统的实时性和稳定性,从而更好地满足各种实时应用的需求。

 

 

uCOS-III多任务的创建 用uCOS-III创建多任务,来点亮LED灯 阅读详情

相关推荐

UCOS-III 任务管理

RMS的基本思路是任务的优先级与它的周期表现为单调函数的关系,任务的周期越短,优先级越高;任务内所有函数调用嵌套所需的所有内存,每个函数调用一个返回地址的指针,每个函数调用中传递的所有参数,以及每个函数分配的局部变量,得到一个大约数后再乘以1.5~2的安全系数。(3) µC/OS-III 恢复任务#1,因为它是任务列表中优先级为“X”的下一个准备运行的任务。(1) 任务#3正在执行,在此期间发生TICK中断,但任务 #3 的时间量尚未到期。(11) 被中断的任务在它被中断的地方恢复执行。

TechIoT - 探索物联网与嵌入式系统 2709

RTOS滴答Tick设置多少才合适

本文转载,留作笔记,如有侵权,请联系删除,原文链接地址: 嵌入式开发 | RTOS滴答Tick设置多少才合适? (qq.com)https://mp.weixin.qq.com/s/E2_f8u1qJcvkbF7Lcv9mNQ 最近有读者问了这么一个问题:为啥RTOS的系统滴答(Tick)默认配置都是1000,我配置为100、10000,或者2000可以不? 相信很多初学者都有这个疑问,包括我初学RTOS也曾困惑滴答配置不同值到底有啥不同和影响。 今天就来简单...

m0_38012497的博客 801

STM32H562与UCOS-III互斥信号量的实现教程

UCOS-III(也称为uCOS-III或μCOS-III)是一个先进的实时操作系统(RTOS),专为微控制器和微处理器设计。它的系统架构是构建在可预测、高性能和可扩展性的基础之上,确保了在资源受限的嵌入式环境中也能可靠运行。互斥信号量是用于保护共享资源的同步工具,它保证在同一时间只有一个任务能够访问共享资源。定义互斥信号量首先需要声明一个OS_MUTEX类型的变量。// 定义互斥信号量。

weixin_42601702的博客 698

uC/OS-III之时钟节拍列表

1.时钟节拍列表由一个时钟节拍轮(,见os_cfg_app.c中的OSCfg_TickWheel[])和一个计数器OSTickCtr构成。2.时钟节拍轮是一个数组,其中数组的元素的类型为OS_TICK_SPOKE,它的大小由OS_CFG_TICK_WHEEL_SIZE设定。 建议OS_CFG_TICK_WHEEL_SIZE的大小为任务数目的1/4左右,不要把它的值与时钟节拍的频率成倍数关系,最好为

linuxweiyh的博客 1638

2026中银杯区块链赛项备赛全攻略:从任务书拆解到高分技巧

区块链技术正从概念走向工程化落地,其核心价值在于通过分布式账本、智能合约与共识机制,构建可信、透明、可追溯的业务协作网络。在供应链溯源、存证、资产流转等场景中,区块链应用已从单一技术验证转向完整业务系统交付,这对开发者的综合能力提出了更高要求。对于职业院校技能大赛而言,选手不仅需要掌握联盟链底层搭建、Solidity合约开发、前后端应用联调等技术,还需具备规范交付与团队协作的工程素养。围绕2026年中银杯湖北省职业院校技能大赛区块链技术应用赛项,本文深入拆解任务书模块与评分逻辑,梳理底层链搭建、智能合约开发

weixin_27960253的博客 333

致远OA公文管理模块相关操作

致远oa协同办公系统 公文管理模板 相关操作

weixin_59666050的博客 4276

os_tick.c

typedef  struct  os_tick_spoke       OS_TICK_SPOKE; struct  os_tick_spoke {     OS_TCB              *FirstPtr;                          /* Pointer to list of tasks in tick spoke

avenger0422的专栏 2296

红外通信不止遥控器:手把手教你用2ASK调制实现语音+温度数据同传

本文详细介绍了如何利用2ASK调制技术实现红外通信系统,同时传输语音和温度数据。通过STM32F103C8T6微控制器和DS18B20温度传感器的硬件设计,结合2ASK调制原理,展示了系统的完整实现方案。文章还提供了调试优化建议,适合电子爱好者和通信工程学生实践学习。

weixin_42531588的博客 388

ucos调试记录(一)

记录一次非常低级的错误。 状态:程序下载后发现无法正常运行,仿真后发现一直在OS_TickListInsert函数中跳转 判断:考虑相比之前增加了任务函数于是注释掉新增任务,发现程序可以正常运行。 检查:检查任务函数内部,发现在while循环内部没有使用阻塞性操作,导致程序无法正常切换。 ...

seraph0321的博客 576

RK3588实战:如何将8路1080P视频流实时拼接成一张超清全景图?聊聊AVS模块的那些事

本文深入解析了RK3588芯片的AVS模块如何实现8路1080P视频流的实时全景拼接技术。通过硬件加速、时间同步、几何校正和色彩均衡等关键技术,RK3588能够高效处理高密度视频流,输出超清全景图。文章还提供了优化策略和实战经验,帮助开发者充分发挥RK3588的潜力。

weixin_27014595的博客 742

多传感器标定:如何统一摄像头、雷达与IMU坐标?

多传感器标定:如何统一摄像头、雷达与IMU坐标?​ ,人工智能,计算机视觉,大模型,AI,本文详细阐述多传感器标定中统一摄像头、雷达与 IMU 坐标的方法。先介绍传感器坐标系统、坐标统一必要性及变换数学基础,再分述摄像头与雷达、IMU 与摄像头、IMU 与雷达的标定原理、步骤、参数计算及结果验证,还讲解了多传感器坐标统一的整体流程,分析了标定常见问题及解决办法,介绍了常用标定工具,结合实际案例说明应用,探讨了标定精度的影响因素、提升方法及发展趋势,为相关领域提供了全面的多传感器标定指导。​

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 12万+

RTOS学习之旅(六)(ucosIII 时基列表)

时基列表是跟时间相关的,处于延时的任务和等待事件有超时限制的任务就会从就绪列表中移除,然后插入到时基列表。 如果任务延时时间结束或超时,那么就让任务就绪,从时基列表中移除,插入的就绪列表中。 目前,在OS中实现两个列表,一个是就绪列表,一个是时基列表。 1.时基列表变量 时基列表在代码层面上又全局数组OSCfg_TickWheel[]和全局变量OSTickCtr构成。 #define OS_CFG_TICK_WHEEL_SIZE 17u OS_TICK_SPOKE OSCfg_TickW

weixin_36101480的博客 971

从基础到前沿:深度剖析光束整形与扫描技术

光束扫描的核心在于通过特定手段改变光束的传播方向,从而实现对目标区域的扫描。在这个过程中,振镜、声光偏转器、电光偏转器等元件发挥着关键作用。振镜是一种常见的光束扫描元件,它主要由电机、反射镜和透镜组成。当电机驱动反射镜旋转时,根据光的反射定律,反射镜会改变入射光线的反射方向。假设初始时光束垂直入射到反射镜上,当反射镜绕某一轴旋转一定角度时,光束的反射方向就会相应改变,从而实现光束在空间中的扫描。在激光打标设备中,通过控制振镜的快速摆动,能够使激光束在工件表面快速移动,完成各种图案和文字的标记。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 2098

从前后台系统到UCOS-III实践指南

基础阶段(1-2周):完成LED多任务闪烁实验进阶阶段(1个月):实现多外设协同控制项目实战(3个月):完成工业控制器原型开发源码研究(6个月):深入理解内核调度算法ImageCodefill:#333;color:#333;color:#333;fill:none;裸机开发基础RTOS任务管理系统资源优化网络协议集成安全机制设计裸机开发基础RTOS任务管理系统资源优化网络协议集成安全机制设计。

波风水门的博客 917

【ComfyUI】Flux 完整版文生图

本文介绍了一个基于Flux Dev的AI文生图全流程工作流,通过整合扩散模型、文本编码器和VAE解码器等核心组件,实现从文本到高清图像的端到端生成。工作流包含模型加载、条件构建、潜空间采样、图像解码和成果保存五个关键环节,支持高分辨率图像的细节还原和艺术风格塑造。应用场景涵盖艺术创作、内容生产、教学演示和科研数据准备等领域,适用于对画质和提示遵循性要求严格的场景。文章还提供了相关开发资源和学习教程链接,帮助用户深入理解AI绘图机制和实际应用。

Mr数据杨 1279

国科大人工智能原理与算法-2024-第一次作业-雷震老师

1. 反射行动(比如从热炉子上缩回你的手)是理性的吗?它们是智能的吗? 2. 以下的计算机系统在何种程度上是人工智能的实例: - 超市条码扫描器 - 网络搜索引擎 - 语音激活的电话菜单 - 对网络状态动态响应的网络路由算法 3. 为什么进化会倾向于导致行为合理的系统?设计这样的系统想达到的目标是什么?

MatsumotoChrikk 2928

UCOS-III笔记(五)时间片调度与时间管理

本文介绍了UCOS-III中的时间片调度和时间管理功能。时间片调度允许同等优先级任务轮流执行,通过OSSchedRoundRobinCfg()函数配置时间片长度。时间管理提供OSTimeDly()和OSTimeDlyHMSM()两种任务延时方法,前者以时钟节拍为单位,后者支持时/分/秒/毫秒格式。此外还介绍了OSTimeDlyResume()函数用于恢复延时任务,并比较了两种延时方式的区别:OSTimeDly()为周期延时,OSTimeDlyHMSM()为相对延时。这些功能都需要通过特定宏定义来启用。

道阻其长,未来可期。笔耕不辍,行则将至! 1312

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

UCOS-III笔记(十)软件定时器

本文介绍了UCOS-III操作系统中软件定时器的原理与应用。详细讲解了软件定时器的基本概念、工作状态(未使用态、停止态、运行态、完成态)以及单次定时器和周期定时器的区别。文章还分析了软件定时器的优缺点,重点阐述了UCOS-III中软件定时器的实现特点和配置方法,包括定时器频率的换算公式。最后总结了UCOS-III提供的软件定时器相关API函数及其使用方法,包括创建、删除、启动和停止定时器等操作。对于嵌入式系统开发人员理解和应用UCOS-III的软件定时器功能具有实用参考价值。

道阻其长,未来可期。笔耕不辍,行则将至! 1108

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

UCOS-III笔记(九)事件标志组

摘要:本文介绍了UCOS-III中的事件标志组机制,详细讲解了事件标志组的本质、特点和使用流程。事件标志组由多个比特位组成,每位代表一个用户自定义事件(1表示发生,0表示未发生),支持多任务同时读写操作。文章提供了OSFlagCreate()、OSFlagPost()和OSFlagPend()等核心API的使用说明,包括参数含义和操作选项(如OS_OPT_PEND_FLAG_SET_ALL等),并配有逻辑关系图展示等待机制。

道阻其长,未来可期。笔耕不辍,行则将至! 996

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

UCOS-III 操作系统深度剖析与实战应用教程

UCOS-III 系统原理、项目实践

TechIoT - 探索物联网与嵌入式系统 1749

UCOS-III任务调度

任务控制块是用来记录与任务相关的信息的数据结构,每个任务都要有自己的任务控制块。没有用完的时间片不会再使用,如果有任务在执行时被中途挂起了,那么下次执行这个任务的时候还是。是一个结构体,描述任务控制块,任务控制块的成员比哪里用户不能直接访问,更不能改变他们。允许一个优先级下多个任务,每个任务可以执行指定时间(时间片),然后轮到下一个任务,这个。针对优先级相同的任务,多个任务优先级相同且就绪时,任务调度器会根据用户设置的时间片轮。挂起态:一个运行态的任务因延时或等待某一事件发生时被挂起,这个任务处于挂起态。

m0_56326397的博客 1132

UCOS-III 互斥锁接口详解

互斥锁接口详解,递归锁定, 优先级继承

TechIoT - 探索物联网与嵌入式系统 1204

uCOS-III基础入门函数

uCOS-iii基本函数,包括任务、信号量、事件的创建和使用等...

Little Big Us的博客 1223

UCOS-III笔记(七)信号量

本文介绍了UCOS-III中的信号量机制,包括二值信号量、计数型信号量和互斥信号量。二值信号量用于同步问题,计数型信号量适用于事件计数和资源管理,而互斥信号量通过优先级继承解决优先级翻转问题。文章详细说明了各信号量的特点、使用流程和相关API函数,如OSSemCreate()、OSSemPost()、OSSemPend()等,并指出互斥信号量不能用于中断服务函数。通过具体示例解释了优先级翻转现象及其影响,帮助读者理解信号量的应用场景和实现方法。

道阻其长,未来可期。笔耕不辍,行则将至! 1693

【uCOS-III移植笔记】记录uCOS移植过程(持续更新)

源码文件包移植芯片STM32F103使用的是3.03源码包。应用文件移植,暂时只移植选中文件。uc-CPU内文件。uc-LIB内文件。uCOS-III内文件包括Ports和Source。Source内文件。

qq_25451439的博客 2054

STM32F103移植uCOS-III,keil4调试卡在CPU_TS_TmrRd函数过不去

最近项目需要在STM32F103板子上移植uCOS-III系统,移植过程参考安富莱STM32F407之uCOS-III教程,参考网址 移植uCOS-III系统 虽然教程是关于F407的板子,但大体是相同的。为了省事,我直接在原来的工程中加上uCOS-III源代码。首先在工程目录下创建一个uCOS-III文件夹,然后把安富莱的uCOS-III代码拷贝到新建的uCOS-III文件夹中,对应的目录如下...

xinxin_2011的博客 3230
上一篇: UCOS-III 任务调度锁定/解锁接口OSSchedLock/Unlock详解
下一篇: UCOS-III 互斥锁接口详解
TechIot@tpzw
博客等级 码龄14年 1123粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TechIot@tpzw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值