uC/OS-II源码解析(os_time.c)
来源:互联网 发布:js text readonly 编辑:程序博客网 时间:2024/06/05 05:27
/*** ver: 2.52** file: os_time.c** brief: 时间相关函数 C 文件*/#ifndef OS_MASTER_FILE#include "includes.h" /* 包含头文件 */#endif/*********************************************************************************** 任务延时 'n' 时钟节拍 (n : 0 - 65535)** brief : 该函数用于将任务延时 ticks 个时钟节拍后运行.** ticks : 延时节拍数 <=65535** note : 如果任务至少需要延时1个时钟节拍,必须调用 OSTimeDly(2)**********************************************************************************/void OSTimeDly (INT16U ticks){#if OS_CRITICAL_METHOD == 3 OS_CPU_SR cpu_sr;#endif if (ticks > 0) { /* 延时节拍数应大于0 */ OS_ENTER_CRITICAL(); if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) { OSRdyGrp &= ~OSTCBCur->OSTCBBitY; /* 从就绪表中移除该任务 */ } OSTCBCur->OSTCBDly = ticks; /* 记录ticks至TCB中 */ OS_EXIT_CRITICAL(); OS_Sched(); /* 任务调度 */ }}/*$PAGE*//********************************************************************************** 按 h min sec ms 延时函数** brief : 该函数用于将任务按时分秒毫秒延时.** hours : 时 ( <=255)* minutes : 分 ( <=59 )* seconds : 秒 ( <=59 )* milli : 毫秒 ( <=999)** returns : OS_NO_ERR* OS_TIME_INVALID_MINUTES* OS_TIME_INVALID_SECONDS* OS_TIME_INVALID_MS* OS_TIME_ZERO_DLY***********************************************************************************/#if OS_TIME_DLY_HMSM_EN > 0INT8U OSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U seconds, INT16U milli){ INT32U ticks; INT16U loops; if (hours > 0 || minutes > 0 || seconds > 0 || milli > 0) { 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 + (INT32U)minutes * 60L + (INT32U)seconds) * OS_TICKS_PER_SEC + OS_TICKS_PER_SEC * ((INT32U)milli + 500L / OS_TICKS_PER_SEC) / 1000L; loops = (INT16U)(ticks / 65536L); /* 计算总节拍数包括多少个65536节拍 */ ticks = ticks % 65536L; /* 剩余节拍 */ OSTimeDly((INT16U)ticks); /* 剩余节拍延时 */ while (loops > 0) { /* 整数个65536节拍延时 */ OSTimeDly(32768); OSTimeDly(32768); loops--; } return (OS_NO_ERR); } return (OS_TIME_ZERO_DLY);}#endif/*$PAGE*//********************************************************************************* 恢复延时的任务** breif: 该函数用于取消任务延时而进入就绪状态,也可以唤醒正在等待事件的任务* ,但不推荐使用这种方法,在这种情况下,等待事件的任务会把它当做超时* 处理,延时节拍超过65535的任务也不能通过该函数恢复** 65535 = (10 Minutes * 60 + 55 Seconds + 0.35) * 100 ticks/second.** prio : 任务优先级** returns : OS_NO_ERR 成功* OS_PRIO_INVALID 无效的优先级* OS_TIME_NOT_DLY 任务无延时* OS_TASK_NOT_EXIST 任务不存在********************************************************************************/#if OS_TIME_DLY_RESUME_EN > 0INT8U OSTimeDlyResume (INT8U prio){#if OS_CRITICAL_METHOD == 3 OS_CPU_SR cpu_sr;#endif OS_TCB *ptcb; if (prio >= OS_LOWEST_PRIO) { /* 无效的优先级 */ return (OS_PRIO_INVALID); } OS_ENTER_CRITICAL(); ptcb = (OS_TCB *)OSTCBPrioTbl[prio]; /* 获取任务控制块 */ if (ptcb != (OS_TCB *)0) { if (ptcb->OSTCBDly != 0) { /* 任务必须有延时 */ ptcb->OSTCBDly = 0; /* 清零延时节拍数 */ if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == OS_STAT_RDY) { OSRdyGrp |= ptcb->OSTCBBitY; /* 将任务置于就绪表中 */ OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX; OS_EXIT_CRITICAL(); OS_Sched(); /* 任务调度 */ } else { OS_EXIT_CRITICAL(); /* 任务被挂起 */ } return (OS_NO_ERR); } else { OS_EXIT_CRITICAL(); return (OS_TIME_NOT_DLY); /* 任务无延时 */ } } OS_EXIT_CRITICAL(); return (OS_TASK_NOT_EXIST); /* 任务不存在 */}#endif /*$PAGE*//*********************************************************************************** 获取当前系统时间** brief : 获取当前系统时钟节拍数*** Returns : 当前 OSTime 值***********************************************************************************/#if OS_TIME_GET_SET_EN > 0INT32U OSTimeGet (void){#if OS_CRITICAL_METHOD == 3 OS_CPU_SR cpu_sr;#endif INT32U ticks; OS_ENTER_CRITICAL(); ticks = OSTime; /* 记录系统时钟节拍数 */ OS_EXIT_CRITICAL(); return (ticks);}#endif /********************************************************************************** 设置系统时间** brief : 该函数用于设置一个32位的时钟节拍计数器** ticks : 设置OSTime.***********************************************************************************/#if OS_TIME_GET_SET_EN > 0void OSTimeSet (INT32U ticks){#if OS_CRITICAL_METHOD == 3 OS_CPU_SR cpu_sr;#endif OS_ENTER_CRITICAL(); OSTime = ticks; OS_EXIT_CRITICAL();}#endif
0 0
- uC/OS-II源码解析(os_time.c)
- uC/OS-II源码解析(ucos_ii.c)
- uC/OS-II源码解析(os_core.c)
- uC/OS-II源码解析(os_task.c)
- uC/OS-II源码解析(os_sem.c)
- uC/OS-II源码解析(os_mutex.c)
- uC/OS-II源码解析(os_mbox.c)
- uC/OS-II源码解析(os_q.c)
- uC/OS-II源码解析(os_mem.c)
- uC/OS-II源码解析(os_cpu_c.c)
- uC/OS-II源码解析(includes.h)
- uC/OS-II源码解析(ucos_ii.h)
- uC/OS-II源码解析(os_cpu.h)
- uC/OS-II源码解析(os_cpu_a.asm)
- μCOS-II源码文件之OS_TIME.C
- uC/OS-II源码分析
- uC/OS-II源码分析
- uC/OS-II源码分析
- bin、/sbin、/usr/bin、/usr/sbin目录的区别
- //将页面请求传递信息最大值设置为50M 上传upload servlet
- Android 蓝牙开发(九)A2DP基本功能
- Presto0.167安装部署
- GPIO的理解
- uC/OS-II源码解析(os_time.c)
- kafka学习总结(处理多个consumer只消费topic数据一次)
- Java--JFrame.add()方法
- Eclipse快捷键方式
- Python os.walk 函数
- MySQL 5.6 for Windows 解压缩版配置安装
- 分布式系统
- 将带特殊串单引号存入sqlserver的某个字段
- hive hbase整合