千家信息网

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

发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,这篇文章给大家介绍ucos内核中的任务延时函数是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。ysmz4:以下主要解决我为什么设置OSTimeDly(2),延时2ms的问题。
千家信息网最后更新 2025年01月22日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安全错误 数据库的锁怎样保障安全 基础数据库什么作用 excel按列选取数据库 魔兽小服务器什么贵 软件开发方法中哪一个对 查询调用数据库代码怎么写 荣耀7x连接不到服务器 广西软件开发工程专业学校 软件开发人员外派价位 软件开发考研要求 哈利波特一个服务器有什么玩法 购买哪家服务器不会被黑客攻击 文旅局网络安全检查考核制度 数据库测试皮肤颜色 数据库小数长度 太史慈放开那三国数据库 委托软件开发现金流量是什么 京东互联网科技股 2021网络安全倡议书报道 计算机应用平面网络技术 正规的电脑服务器回收多少钱 结合自身实际如何维护网络安全 合肥达佑软件开发公司 数据库的数据文件备份支持 宁德网络安全生产平台 国服服务器启动项 石嘴山市网络安全员培训学校 数据库门诊管理系统 网络安全工程师考试题库网 江北区一站式软件开发流程价目表 松江区上门软件开发统计
0