【RTX操作系统教程】第12章 系统时钟节拍和时间管理

上传人:德****1 文档编号:1080570 上传时间:2017-05-27 格式:PDF 页数:18 大小:733.24KB
返回 下载 相关 举报
【RTX操作系统教程】第12章 系统时钟节拍和时间管理_第1页
第1页 / 共18页
【RTX操作系统教程】第12章 系统时钟节拍和时间管理_第2页
第2页 / 共18页
【RTX操作系统教程】第12章 系统时钟节拍和时间管理_第3页
第3页 / 共18页
【RTX操作系统教程】第12章 系统时钟节拍和时间管理_第4页
第4页 / 共18页
【RTX操作系统教程】第12章 系统时钟节拍和时间管理_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《【RTX操作系统教程】第12章 系统时钟节拍和时间管理》由会员分享,可在线阅读,更多相关《【RTX操作系统教程】第12章 系统时钟节拍和时间管理(18页珍藏版)》请在金锄头文库上搜索。

1、 2015年12月10日 版本:1.0 第 1 页 共 18 页 第12章 系统时钟节拍和时间管理 本章节为大家讲解RTX操作系统的时钟节拍和时间管理函数,其中时间管理函数是RTX的基本函数,初学者务必要掌握。 本章教程配套的例子含Cortex-M3内核的STM32F103和Cortex-M4内核的STM32F407。 12.1 RTX的时钟节拍 12.2 RTX的时间管理 12.3 实验例程说明 12.4 总结 12.1 RTX的时钟节拍 任何操作系统都需要提供一个时钟节拍,以供系统处理诸如延时,超时等与时间相关的事件。 时钟节拍是特定的周期性中断。这个中断可以看做是系统心跳。中断之间的时间

2、间隔取决于不同的应用,一般是1ms 100ms。时钟的节拍中断使得内核可以将任务延迟若干个时钟节拍,以及当任务等待事件发生时,提供等待超时等依据。时钟节拍率越快,系统的额外开销就越大。 对于Cortex-M3内核的STM32F103和Cortex-M4内核的STM32F407,教程配套的例子都是用的滴答定时器来实现系统时钟节拍的。 滴答定时器Systick SysTick定时器被捆绑在NVIC中,用于产生SysTick异常(异常号:15),滴答定时器是一个24位 的递减计数器,支持中断。使用比较简单,专门用于给操作系统提供时钟节拍。 RTX的系统时钟节拍可以在配置向导里面设置: 武汉安富莱电子

3、有限公司 WWW.ARMFLY.COM 安富莱STM32-V4开发板RTX教程 2015年12月10日 版本:1.0 第 2 页 共 18 页 Tick Timer Configuration Hardware timer Core SysTick 表示选择系统滴答定时器,因为M3/M4内核带有滴答定时器,一般情况下都是选用滴答定时器作为系统时钟节拍。 Peripheral Timer 表示使用外设定时器。 Timer clock value 表示定时器主频,单位Hz。 Timer tick value 表示系统时钟节拍周期,单位us。 12.2 RTX的时间管理 时间管理功能是RTX操作系统

4、里面比较基本的功能,同时也是非常有必要掌握好的。 武汉安富莱电子有限公司 WWW.ARMFLY.COM 安富莱STM32-V4开发板RTX教程 2015年12月10日 版本:1.0 第 3 页 共 18 页 12.2.1 时间延迟 RTX中的时间延迟函数主要有以下两个作用: 为周期性执行的任务提供延迟。 对于抢占式调度器,让高优先级任务可以通过时间延迟函数释放CPU使用权,从而让低优先级任务可以得到执行。 下面我们通过如下的框图来说明一下延迟函数对任务运行状态的影响,让大家有一个形象的认识。 运行条件: 仅对任务Task1的运行状态做说明。 调度器支持时间片调度和抢占式调度。 运行过程描述如下

5、: 起初任务Task1处于运行态,调用os_dly_wait函数后进入到挂起状态,也就是wait状态。 os_dly_wait函数设置的延迟时间到,由于任务Task1不是当前就绪的最高优先级任务,所以不能进入到运行状态,只能进入到就绪状态,也就是ready状态。 一段时间后,调度器发现任务Task1是当前就绪的最高优先级任务,从而任务从就绪态切换到运行态。 由于时间片调度,任务Task1由运行态切换到就绪态。 上面就是一个简单的任务运行状态的切换过程。 12.2.2 RTX的延迟函数 使用如下4个函数可以实现RTX的延迟: os_dly_wait() os_itv_set() os_itv_w

6、ait() 武汉安富莱电子有限公司 WWW.ARMFLY.COM 安富莱STM32-V4开发板RTX教程 2015年12月10日 版本:1.0 第 4 页 共 18 页 os_time_get() 关于这4个函数的讲解及其使用方法可以看教程第3章3.3小节里面说的参考资料rlarm.chm文件 下面我们对这四个函数依次进行说明: 12.2.3 函数os_dly_wait 函数原型: void os_dly_wait ( U16 delay_time ); /* 延迟时间长度 */ 函数描述: 函数os_dly_wait用于任务的延迟。 参数delay_time用于设置延迟的时钟节拍个数,范围1

7、-0xFFFE。 使用这个函数要注意以下几个问题 1. 同一个任务中os_dly_wait和os_itv_wait不能混合调用,只能选择其中一个。 使用举例: #include _task void task1 (void) . os_dly_wait (20); . 武汉安富莱电子有限公司 WWW.ARMFLY.COM 安富莱STM32-V4开发板RTX教程 2015年12月10日 版本:1.0 第 5 页 共 18 页 12.2.4 函数os_itv_set 函数原型: void os_itv_set ( U16 interval_time ); /* 周期唤醒的时间间隔 */ 函数描述:

8、 函数os_itv_set用于设置周期性延迟的时间间隔,此函数必须配合os_itv_wait函数一起使用。用户调用函数os_itv_set设置了周期性时间延迟的时间间隔后,然后调用函数os_itv_wait函数等待时间到。 参数interval_time用于设置周期性延迟的时间间隔,单位时钟节拍数,参数范围1-0x7FFF。 使用举例: #include _task void task1 (void) . os_itv_set (20); . 12.2.5 函数os_itv_wait 函数原型: void os_itv_wait (void); 函数描述: 函数os_itv_wait函数用于等

9、待周期性延迟时间到,此函数必须配合os_itv_set函数一起使用。用户调用函数os_itv_set设置了周期性时间延迟的时间间隔后,然后调用函数os_itv_wait函数等待时间到。 使用举例: #include _task void task1 (void) . os_itv_set (20); for (;) os_itv_wait (); /* 添加功能 */ 12.2.6 函数os_time_get 函数原型: void os_time_get (void); 函数描述: 函数os_time_get用于获取系统当前运行时钟节拍数。 武汉安富莱电子有限公司 WWW.ARMFLY.COM

10、 安富莱STM32-V4开发板RTX教程 2015年12月10日 版本:1.0 第 6 页 共 18 页 使用举例: #include BOOL init_io (void) U32 ticks; ticks = os_time_get (); 12.2.7 函数os_dly_wait和os_itv_wait的区别 函数os_dly_wait实现的是周期性延迟,而函数os_itv_wait实现的是相对性延迟,反映到实际应用上有什么区别呢,下面就给大家举一个简单的例子。 运行条件: 有一个bsp_KeyScan函数,这个函数处理时间大概耗时2ms。 有两个任务,一个任务Task1是用的os_dl

11、y_wait延迟,延迟10ms,另一个任务Task2是用的os_itv_wait延迟,延迟10ms。 不考虑任务被抢占而造成的影响。 实际运行过程效果: Task1: bsp_KeyScan+ os_dly_wait(10) - bsp_KeyScan + os_dly_wait(10) |-2ms + 10ms 为一个周期-| |-2ms + 10ms 为一个周期-| 这个就是相对性的含义 Task2: bsp_KeyScan + os_itv_wait - bsp_KeyScan + os_itv_wait |-10ms为一个周期(2ms包含在10ms内)-| |-10ms 为一个周期-|

12、 这就是周期性的含义。 12.3 实验例程说明 12.3.1 STM32F103开发板实验 配套例子: V4-408_RTX实验_时间管理 实验目的: 1. 学习RTX的时间延迟相关函数和系统时钟节拍计数的获取 武汉安富莱电子有限公司 WWW.ARMFLY.COM 安富莱STM32-V4开发板RTX教程 2015年12月10日 版本:1.0 第 7 页 共 18 页 2. 学习相对时间延迟和周期性时间延迟的实现 实验内容: 1. K1按键按下,串口打印。 2. K2按键按下,获取系统时钟节拍计数并打印。 3. 各个任务实现的功能如下: AppTaskUserIF任务 :按键消息处理。 AppT

13、askLED任务 :LED闪烁。 AppTaskMsgPro任务 :消息处理,这里是用作LED闪烁。 AppTaskStart任务 :启动任务,也是最高优先级任务,这里实现按键扫描。 RTX配置: RTX配置向导详情如下: Task Configuration Number of concurrent running tasks 允许创建4个任务,实际创建了如下四个任务 AppTaskUserIF任务 :按键消息处理。 AppTaskLED任务 :LED闪烁。 武汉安富莱电子有限公司 WWW.ARMFLY.COM 安富莱STM32-V4开发板RTX教程 2015年12月10日 版本:1.0 第

14、 8 页 共 18 页 AppTaskMsgPro任务 :消息处理,这里是用作LED闪烁。 AppTaskStart任务 :启动任务,也是最高优先级任务,这里实现按键扫描。 Number of tasks with user-provided stack 创建的4个任务都是采用自定义堆栈方式。 RTX任务调试信息: 程序设计: 任务栈大小分配: static uint64_t AppTaskUserIFStk512/8; /* 任务栈 */ static uint64_t AppTaskLEDStk256/8; /* 任务栈 */ static uint64_t AppTaskMsgProStk512/8; /* 任务栈 */ static uint64_t AppTaskStartStk512/8; /* 任务栈 */ 将任务栈定义成uint64_t类型可以保证任务栈是8字节对齐的,8字节对齐

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号