uCOS-II中文版电子书+第5章.pdf
根据提供的文件信息,本文将详细解释μC/OS-II操作系统中的时间管理机制,特别是与之相关的几个关键函数:`OSTimeDly()`、`OSTimeDlyHMSM()`、`OSTimeDlyResume()`、`OSTimeGet()`以及`OSTimeSet()`。 ### 5.0 任务延时函数 `OSTimeDly()` `OSTimeDly()` 是μC/OS-II提供的一个系统服务,允许任务延迟指定的时间。这个时间是以时钟节拍的数量来计算的。时钟节拍是指系统定期产生的中断,通常每秒发生10至100次。调用`OSTimeDly()` 函数时,用户需要提供一个介于1到65535之间的整数值,表示想要延迟的时钟节拍数。 #### 代码分析 程序清单L5.1给出了`OSTimeDly()`的源代码示例: ```c void OStimeDly(INT16U ticks) { if (ticks > 0) { OS_ENTER_CRITICAL(); // 进入临界区 if ((OSRdyTbl[OSTCBCur->OSTCBY] & ~OSTCBCur->OSTCBBitX) == 0) { OSRdyGrp &= ~OSTCBCur->OSTCBBitY; // 将当前任务标记为非就绪 } OSTCBCur->OSTCBDly = ticks; // 设置当前任务的延时节拍数 OS_EXIT_CRITICAL(); // 退出临界区 OSSched(); // 执行任务调度 } } ``` - **参数解析**:当`ticks`为0时,函数不执行任何操作直接返回。如果`ticks`为非零值,则会将当前任务从就绪表中移除,并将其延时节拍数设置为`ticks`。然后,函数会退出临界区并执行任务调度。 - **任务调度**:`OSSched()`函数会执行下一个优先级最高的就绪任务。当延时结束后,当前任务会回到就绪队列中,但是否能立即执行取决于它的优先级是否最高。 - **时钟节拍计数**:每次时钟节拍中断时,当前任务的延时节拍数都会递减1,直到变为0为止。这通常是通过`OSTimeTick()`函数完成的。 #### 延时解析 理解0到一个节拍之间的延时是很重要的。例如,如果一个任务调用`OSTimeDly(1)`,希望延时一个时钟节拍,但实际上可能只延时了不到一个时钟节拍的时间。这是因为任务可能会在下一个时钟节拍到来之前被重新调度。因此,在系统负载较高的情况下,为了确保至少延时一个完整的时钟节拍,最好调用`OSTimeDly(2)`,即指定延时两个节拍。 ### 5.1 按时分秒延时函数 `OSTimeDlyHMSM()` `OSTimeDlyHMSM()` 函数允许用户以小时、分钟、秒和毫秒为单位指定延时时间,从而避免了直接使用时钟节拍数的不便。这个函数对于需要以更自然的时间单位(如秒或分钟)来延时的任务非常有用。 #### 使用方法 用户可以通过以下方式调用`OSTimeDlyHMSM()`: ```c INT16U OStimeDlyHMSM(INT8U hours, INT8U minutes, INT8U seconds, INT16U mseconds); ``` 其中`hours`、`minutes`、`seconds`和`mseconds`分别代表希望延时的小时数、分钟数、秒数和毫秒数。函数返回值表示实际的延时时钟节拍数。 ### 5.2 让处在延时期的任务结束延时 `OSTimeDlyResume()` 有时,可能需要提前结束一个正在延时的任务。为此,μC/OS-II 提供了`OSTimeDlyResume()`函数,可以用来取消任务的延时状态。 #### 函数调用 ```c void OStimeDlyResume(OS_TCB *ptcb); ``` 此函数接收一个指向任务控制块(TCB)的指针作为参数,该指针指向想要结束延时的任务。 ### 5.3 系统时间 `OSTimeGet()` 和 `OSTimeSet()` `OSTimeGet()` 和 `OSTimeSet()` 分别用于获取和设置系统时间。这两个函数对于需要跟踪实时时间的任务非常重要。 #### 获取系统时间 `OSTimeGet()` ```c INT32U OStimeGet(void); ``` 此函数返回当前的系统时间,以时钟节拍为单位。 #### 设置系统时间 `OSTimeSet()` ```c void OStimeSet(INT32U systime); ``` 此函数用于设置系统时间,以时钟节拍为单位。 ### 总结 通过以上介绍,我们可以看出μC/OS-II提供了一套完善的时间管理机制,包括基本的任务延时、按时分秒延时、提前结束延时以及获取和设置系统时间等功能。这些功能可以帮助开发者更好地控制任务的执行顺序和时间,从而提高系统的可靠性和性能。
- 粉丝: 12
- 资源: 35
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助