zoukankan      html  css  js  c++  java
  • RTX——第12章 系统时钟节拍和时间管理

    以下内容转载自安富莱电子: http://forum.armfly.com/forum.php

    本章节为大家讲解 RTX 操作系统的时钟节拍和时间管理函数,其中时间管理函数是 RTX 的基本函数,
    初学者务必要掌握。
    RTX 的时钟节拍
    任何操作系统都需要提供一个时钟节拍,以供系统处理诸如延时,超时等与时间相关的事件。
    时钟节拍是特定的周期性中断。这个中断可以看做是系统心跳。 中断之间的时间间隔取决于不同的应
    用,一般是 1ms – 100ms。时钟的节拍中断使得内核可以将任务延迟若干个时钟节拍,以及当任务等待
    事件发生时,提供等待超时等依据。时钟节拍率越快,系统的额外开销就越大。
    对于 Cortex-M3 内核的 STM32F103 和 Cortex-M4 内核的 STM32F407,429,教程配套的例子都是用的
    滴答定时器来实现系统时钟节拍的。
    滴答定时器 Systick
    SysTick 定时器被捆绑在 NVIC 中,用于产生 SysTick 异常(异常号: 15),滴答定时器是一个 24 位
    的递减计数器,支持中断。 使用比较简单, 专门用于给操作系统提供时钟节拍。
    RTX 的系统时钟节拍可以在配置向导里面设置:

    Tick Timer Configuration
    Hardware timer
    Core SysTick 表示选择系统滴答定时器,因为 M3/M4 内核带有滴答定时器,一般情况下都是
    选用滴答定时器作为系统时钟节拍。
    Peripheral Timer 表示使用外设定时器。
    Timer clock value
    表示定时器主频,单位 Hz。
    Timer tick value
    表示系统时钟节拍周期,单位 us。

    RTX 的时间管理
    时间管理功能是 RTX 操作系统里面比较基本的功能,同时也是非常有必要掌握好的。
    RTX 中的时间延迟函数主要有以下两个作用:
    为周期性执行的任务提供延迟。
    对于抢占式调度器,让高优先级任务可以通过时间延迟函数释放 CPU 使用权,从而让低优先级任务
    可以得到执行。
    RTX 的延迟函数
    使用如下 4 个函数可以实现 RTX 的延迟:
    os_dly_wait()
    os_itv_set()
    os_itv_wait()
    os_time_get()

    函数 os_dly_wait
    函数原型:
    void os_dly_wait (
    U16 delay_time ); /* 延迟时间长度 */
    函数描述:
    函数 os_dly_wait 用于任务的延迟。
    参数 delay_time 用于设置延迟的时钟节拍个数,范围 1-0xFFFE
    使用这个函数要注意以下几个问题
    1. 同一个任务中 os_dly_wait 和 os_itv_wait 不能混合调用,只能选择其中一个。

    函数 os_itv_set
    函数原型:
    void os_itv_set (
    U16 interval_time ); /* 周期唤醒的时间间隔 */
    函数描述:
    函数 os_itv_set 用于设置周期性延迟的时间间隔,此函数必须配合 os_itv_wait 函数一起使用。 用户调用
    函数 os_itv_set 设置了周期性时间延迟的时间间隔后,然后调用函数 os_itv_wait 函数等待时间到。
    参数 interval_time 用于设置周期性延迟的时间间隔,单位时钟节拍数,参数范围 1-0x7FFF。

    函数 os_itv_wait
    函数原型:
    void os_itv_wait (void);
    函数描述:
    函数 os_itv_wait 函数用于等待周期性延迟时间到,此函数必须配合 os_itv_set 函数一起使用。 用户调用
    函数 os_itv_set 设置了周期性时间延迟的时间间隔后,然后调用函数 os_itv_wait 函数等待时间到。

    函数 os_time_get
    函数原型:
    void os_time_get (void);
    函数描述:
    函数 os_time_get 用于获取系统当前运行时钟节拍数。

    函数 os_dly_wait 和 os_itv_wait 的区别
    函数 os_dly_wait 实现的是相对性延迟,而函数 os_itv_wait 实现的是周期性延迟,反映到实际应用
    上有什么区别呢,下面就给大家举一个简单的例子。
    运行条件:
    有一个 bsp_KeyScan 函数,这个函数处理时间大概耗时 2ms。
    有两个任务,一个任务 Task1 是用的 os_dly_wait 延迟,延迟 10ms,另一个任务 Task2 是用的
    os_itv_wait 延迟,延迟 10ms。
    不考虑任务被抢占而造成的影响。

  • 相关阅读:
    Python的词法分析与语法分析
    使用svn log确定分支创建的时间点
    Python的作用域
    SVN的版本日期
    理解SVN关键词BASE,HEAD,COMMITTED,PREV
    SVN的属性
    EL表达式 (详解)
    java jsp el fn
    java防止表单重复提交
    数据库的事务处理
  • 原文地址:https://www.cnblogs.com/yangguang-it/p/7338967.html
Copyright © 2011-2022 走看看