CMSIS-RTOS 时间管理之时间延迟Time Delay
来源:互联网 发布:淘宝客引流文案 编辑:程序博客网 时间:2024/06/05 10:24
时间管理 Time Management
此RTOS除了可以把你的应用代码作为线程运行,它还可以提供一些时间服务功能,使用这些功能你就可以访问RTOS的一些系统调用。
时间延迟Time Delay
在所有的时间服务功能中,最基本的一个就是延时函数。它可以在你的应用中提供非常简单易用的延时功能。也许你会觉得CMSIS-RTOS已经占用了5k字节的代码量,但是在非RTOS的应用中,我们也常会用到一些延时循环、简单的调度循环等,这些循环功能同样会占用一些字节,而我们的RTOS在这方面可能会占用更少的代码量。
void osDelay(uint32_t millisec)
上面这个调用会导致当前线程进入等待延时状态(WAIT_DELAY),延时时间由用户指定。与此同时调度器将会执行下一个处于准备状态(READY)的线程。
注:在线程的生命周期中,它会进入多种状态。这里一个处于运行状态(RUN)的线程被osDelay阻塞,然后它就会进入等待状态(WAIT)。当延时时间结束时,它就会进入准备状态(READY),调度器就会把它置于运行状态(RUN)。如果它的时间片结束了,它就会返回准备状态(READY)。
当定时时间结束时,线程会离开等待延时状态,进入READY状态。当调度器把线程移入RUNNING状态时,它就会继续运行。如果线程在以后的执行过程中没有任何阻塞调用,在它的时间片结束时就会被置于READY状态,同时另外一个同优先级的线程就会进入运行状态。
等待事件
除了单纯的时间延迟,同样可以使用事件等待让线程暂停并进入等待状态,当有另外一个RTOS事件出现时,就会触发线程继续运行。RTOS事件可以是一个信号,消息或者邮件。如果没有事件出现,就可以osWait()这个API,它有一个毫秒级别的超时机制,可以允许线程的唤醒和继续执行。
osStatus osWait(uint32_t millisec)//RTX不支持此函数
当设定的时间结束,线程就会由WAIT状态进入到READY状态,随后被调度器置于RUN状态。osWait在CMSIS RTOS里面是一个可选API。如果你打算使用这个函数,必须先确定你使用的RTOS是支持的。需要注意的是,CMSIS RTOS目前封装的keil RTX 是不支持这个API的。
练习:时间管理
在这个练习里我们将看到如何使用基本的时间延迟函数。
打开Pack Installer,选择“Ex5 Time Management”,然后把它复制到自定义路径。
从代码中可以看到,者就是我们最开始的LED闪烁程序,不同之处在于之前简单的延时函数delay()被替换成了osDelay()。LED2以100ms为间隔翻转,LED1以500ms为间隔翻转。
void ledOn(void const *argument) { for(;;) { LED_On(1); osDelay(500); LED_Off(1); osDelay(500); }}
编译工程,启动debug仿真
全速运行!并打开事件观察器
现在我们可以看到活跃的代码完全不同,当每一个LED任务执行到osDelay 函数时,线程就会“阻塞”,并进入WAIT状态,main 线程就会进入READY状态,这时调度器就会启动它运行。当延时时间结束,LED任务就会进入READY状态,下一步就会被调度器置于RUN状态。就像这样,多个线程可以有效率地分享CPU资源。
- CMSIS-RTOS 时间管理之时间延迟Time Delay
- CMSIS RTOS-RTX信号管理
- ARM官方《CMSIS-RTOS教程》之线程的管理和优先级Thread Management and Priority
- 时间管理(Time Management)
- 时间管理(Time Management)
- 时间管理(Time Management)
- CMSIS-RTOS 复用Multiplex
- ARM官方《CMSIS-RTOS教程》之创建线程Creating Threads
- python时间处理之time
- python时间处理之time
- Python时间模块之time
- linux内核时间管理(一) : 时间概念和延迟操作
- 我的时间管理---Color My Time
- 时间管理说明(Time Management)
- bzoj1620 [Usaco2008 Nov]Time Management 时间管理
- [BZOJ1620][Usaco2008 Nov]Time Management 时间管理
- 【Usaco2008Nov】【BZOJ1620】Time Management 时间管理
- [BZOJ1620][Usaco2008 Nov]Time Management 时间管理
- SVM在R语言中的使用
- 成员变量详解
- 自定义Content Provider(内容提供器)
- leetcode(10)21. Merge Two Sorted Lists
- Android Webp 完全解析 快来缩小apk的大小吧
- CMSIS-RTOS 时间管理之时间延迟Time Delay
- 目前主要的编成语言及应用方向(领域)
- How to Create a High Availability Setup with Pacemaker, Corosync and Floating IPs on CentOS 7
- 关于Generate SIGNED APK...失败的原因之一
- Flash as3.0笔记 Sound类的使用
- hdu 4283 You Are the One
- #Paper Reading# An Information Retrieval Approach for Chatbot Engines Using Unstructured Documents
- Retinex、log对数变换、直方图均衡化区别,边缘增强Retinex算法与拉普拉斯算法联系、均衡化与亮度调节算法、大津阈值计算
- Matlab Tips1