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。
不考虑任务被抢占而造成的影响。
RTX——第12章 系统时钟节拍和时间管理的更多相关文章
- FreeRTOS 系统时钟节拍和时间管理
以下转载自安富莱电子: http://forum.armfly.com/forum.php FreeRTOS 的时钟节拍任何操作系统都需要提供一个时钟节拍,以供系统处理诸如延时. 超时等与时间相关的事 ...
- uC/OS-III 时钟节拍,时间管理,时间片调度
uC/OS-III 时钟节拍,时间管理,时间片调度 时钟节拍 时钟节拍可谓是 uC/OS 操作系统的心脏,它若不跳动,整个系统都将会瘫痪. 时钟节拍就是操作系统的时基,操作系统要实现时间上的管理, ...
- JZ2440 裸机驱动 第10章 系统时钟和定时器
本章目标 了解S3C2410/S3C2440的时钟体系结构 掌握通过设置MPLL改变系统时钟的方法 掌握在不同的频率下设置存储控制器的方法 掌握PWM定时器的用法 ...
- 《C prime plus (第五版)》 ---第12章 存储类.链接和内存管理
12-1:存储类: 1.作用域: 代码块作用域,函数原型作用域和文件作用域. 2.链接:分为外部链接,内部链接和空链接.代码块作用域和函数原型作用域都是空连接,意味着是私有的.而文件作用域的变量可能是 ...
- RTX——第10章 任务调度-抢占式、时间片和合作式
以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 本章教程为大家将介绍 RTX 操作系统支持的任务调度方式,抢占式,时间片和合作式,这部分算是RTX 操作 ...
- RT-thread内核之系统时钟
一.系统时钟 rt-thread的系统时钟模块采用全局变量rt_tick作为系统时钟节拍,该变量在系统时钟中断函数中不断加1.而系统时钟中断源和中断间隔一般由MCU硬件定时器(如stm32的嘀嗒定时器 ...
- stm32之Systick(系统时钟)
Systick的两大作用: 1.可以产生精确延时: 2.可以提供给操作系统一个单独的心跳(时钟)节拍: 通常实现Delay(N)函数的方法为: for(i=0;i<x;i++) ; 对于STM3 ...
- 【STM32H7教程】第12章 STM32H7的HAL库框架设计学习
完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第12章 STM32H7的HAL库框架设计学 ...
- 【RL-TCPnet网络教程】第12章 TCP传输控制协议基础知识
第12章 TCP传输控制协议基础知识 本章节为大家讲解TCP(Transmission Control Protocol,传输控制协议),通过本章节的学习,需要大家对TCP有个基本的认识,方 ...
随机推荐
- c#委托是什么?事件是不是一种委托?
C#的委托是CTS(公共类型系统)规定的5中类型之一(类类型.结构类型.接口类型.枚举类型.委托类型).它类似于c或c++中的函数的指针,但函数指针只能引用静态方法,而委托既能引用静态方法,也能引用实 ...
- 如何让bat,cmd文件后台运行?如何把文件打包成EXE?
方法1:在“运行”中输入IEXPRESS 这是WINDOWS自带的打包程序,好像也可以生成安装包. 下一步-下一步-随便填个名字(下一步)-下一步-下一步-ADD(选好你的BAT文件 继 ...
- 【laravel5.4】自定义公共函数的创建
原文地址:http://blog.csdn.net/qq_38125058/article/details/76862151 公共函数,简单来说就是在任何地方都可以直接使用这个函数.简单介绍两种实现方 ...
- 搭建前端vue环境,安装vue-cli遇到Please try running this command again as root/Administrator的解决方案
最近在搭前端环境,装完node.js之后,准备安装vue工程的初始化工具时(npm install -g vue-cli),遇到这个坑: 大体的意思就是权限问题,导致/usr/local/lib/no ...
- ubuntu(14.04) remote access(远程连接数据库)
1.修改mysql的配置文件. /etc/mysql/my.cnf 把 bind-address 的那行代码注释掉,保存退出,重启mysql
- 【转载】微服务架构的基础框架选择:Spring Cloud还是Dubbo?
微服务框架选型,原文链接请参见:http://blog.didispace.com/microservice-framework/ http://blog.csdn.net/zeb_perfect/a ...
- Python练习笔记——采用生成器函数实现两数之间的偶数计算
题目:编写一个生成器函数myeven(start, end),采用迭代器逐次实现[start, end)范围内的偶数计算2 4 6 8. ... def myeven(start, end): whi ...
- Python2 字典 has_key() 方法
描述 Python2 字典 has_key() 方法用于判断键(key)是否存在于字典(D)中,如果键在字典中返回True,否则返回False. 官方文档推荐用 in 操作符,因为它更短更通俗易懂.h ...
- django 模板使用静态文件
1.新建项目 2.新建app,并在install_app中添加该app 3.和app文件夹并列新建static.和TEMPLATES 文件夹,分别放静态文件和模板 4.setting.py中设置 T ...
- spring mvc 依赖包
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop&l ...