千家信息网

ucos内核中的任务延时函数是什么

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章给大家介绍ucos内核中的任务延时函数是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。ysmz4:以下主要解决我为什么设置OSTimeDly(2),延时2ms的问题。
千家信息网最后更新 2025年11月08日ucos内核中的任务延时函数是什么

这篇文章给大家介绍ucos内核中的任务延时函数是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

ysmz4:以下主要解决我为什么设置OSTimeDly(2),延时2ms的问题。

只要你延时超过1个系统时钟节拍(1ms),UCOSII就会执行任务切换,不需要计算每个任务延时多久,只要你保证延时大于一个系统时钟节拍,就可以了.

编写过单片机程序的都知道,延时函数是经常被用到的。

在ucos II 里,系统也提供了这样的延时函数。一个是大众版的OSTimeDly(),一个是精致版的OSTimeDlyHMSM()。 萝卜青菜,各有所爱,随你怎么选。

这两者的区别是,OSTimeDly()的延时时间是以节拍数来衡量的,OSTimeDlyHMSM()的延时时间则是以具体时间大小来衡量的。

这两个函数有着非常重要重要的作用,就是当你调用这两个函数的时候,ucos II 会进行一次任务调度。所以cpu能在各任务间进行切换,很大功劳得益于这两个函数。

调用这两个延时函数都会挂起本任务,cpu就会执行就绪表中优先级最高的任务。

有一点要注意的是任务调用OSTimeDly()后,一旦规定的时间期满或者有其它的任务通过调用OSTimeDlyResume()取消了延时,它就会马上进入就绪状态,而不是执行状态,也就是说延时结束后本任务不一定会被立刻执行。

假设你在任务执行过程中,调用延时函数延时0.001秒,时间的延时时间是有可能大于这个值的。这就得看你任务的安排了。

下面看看这两个函数的具体实现。

程序清单 L 5.1 OSTimeDly().

Void OSTimeDly (INT16U ticks)

{

if (ticks > 0) { (1)

OS_ENTER_CRITICAL();

if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) { (2)

OSRdyGrp &= ~OSTCBCur->OSTCBBitY;

}

OSTCBCur->OSTCBDly = ticks; (3)

OS_EXIT_CRITICAL();

OSSched(); (4)

}

}

其实程序就做了下面几件事

1. 把本任务从任务就绪表中删除

2. 把延时值保持到任务控制块中,并且通过OSTimeTick()每隔一个时钟节拍就减少一个延时节拍数

3. 调用任务调度函数,切换任务。

INT8U OSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U seconds, INT16U milli)

{

INT32U ticks;

INT16U loops;

if (hours > 0 || minutes > 0 || seconds > 0 || milli > 0) { (1)

if (minutes > 59) {

return (OS_TIME_INVALID_MINUTES);

}

if (seconds > 59) {

return (OS_TIME_INVALID_SECONDS);

}

If (milli > 999) {

return (OS_TIME_INVALID_MILLI);

}

ticks = (INT32U)hours * 3600L * OS_TICKS_PER_SEC (2)

+ (INT32U)minutes * 60L * OS_TICKS_PER_SEC

+ (INT32U)seconds * OS_TICKS_PER_SEC

+ OS_TICKS_PER_SEC * ((INT32U)milli

+ 500L/OS_TICKS_PER_SEC) / 1000L; (3)

loops = ticks / 65536L; (4)

ticks = ticks % 65536L; (5)

OSTimeDly(ticks); (6)

while (loops > 0) { (7)

OSTimeDly(32768); (8)

OSTimeDly(32768);

loops--;

}

return (OS_NO_ERR);

} else {

return (OS_TIME_ZERO_DLY); (9)

}

}

关于ucos内核中的任务延时函数是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

任务 函数 时间 两个 节拍 时钟 程序 系统 切换 内核 重要 内容 更多 状态 帮助 调度 不错 很大 最高 各有所爱 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 如何查询服务器登录信息 惠山区银联网络技术服务收费标准 关系数据库姓名被称作什么 传奇4一直前端服务器验证中 排序索引数据库mysql 大数据和嵌入式软件开发 连云港app手机软件开发公司 数据库输入合计 互联网智能科技公司 计算机网络技术人员岗位认识 网络安全宣传周主题板报 网络安全隐患详情 软件开发黑科 网络安全协调局副局长高 高科技互联网公司怎么样了 网络安全期宣传海报 软件开发嵌入式开发技术 几种数据库之间优缺点 西城区常见网络技术维修价格 电脑服务器授权不足怎么办 银行软件开发需要什么资质 湖州软件开发部 数据库中给数字加单引号 青少年网络安全与信息题库 手机cpu能当服务器吗 教师使用网络技术开展教学 5410串口服务器打不开 sql建立一个数据库bg 网络安全宣传周与网络强国 翼丰保北京网络技术有限公司
0