Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
DIY综合交流区
[RealTouch例程]定时器的基本使用
发布于 2012-09-18 10:11:37 浏览:6564
订阅该版
实验目的 了解软件定时器相关概念 定时器的初步使用 硬件说明 本实验使用RT-Thread官方的Realtouch开发板作为实验平台。涉及到的硬件主要为 串口3,作为rt_kprintf输出,需要连接JTAG扩展板 具体请参见《Realtouch开发板使用手册》 实验原理及程序结构 定时器,是指在指定的时刻开始,经过一指定的时间后出发一个事件。定时器有硬件定时器和软件定时器之分: ?硬件定时器是芯片本身提供的定时功能。一般是由外部晶振提供给芯片输入时钟,芯片向软件模块提供一组配置寄存器,接受控制输入,到达设定时间值后芯片中断控制器产生时钟中断。硬件定时器的精度一般很高,可以达到纳秒级别,并且是中断触发方式。 ?软件定时器是由操作系统提供的一类系统接口,它构建在硬件定时器基础之上,使系统能够提供不受数目限制的定时器服务。软件定时器的精度取决于它使用的硬件定时器精度,例如硬件定时器精度是1秒,那么它能够提供1秒,5秒,8秒等以1秒整数倍的定时器,而不能够提供1.5秒的定时器。 在RT-Thread实时操作系统中,软件定时器模块以tick为时间单位,tick的时间长度为两次硬件定时器中断的时间间隔,这个时间可以根据不同的系统MIPS和实时性需求设置不同的值,tick值设置越小,实时精度越高,但是系统开销也越大。 RT-Thread的软定时器提供两类定时器机制:第一类是单次触发定时器,这类定时器只会触发一次定时器事件,然后定时器自动停止。第二类则是周期触发定时器,这类定时器会周期性的触发定时器事件。 [attach]0[/attach] 如上图所示,系统当前tick值为20,在当前系统中已经创建并启动了三个定时器,分别为定时时间为50个tick的Timer1、100个tick的Timer2和130个tick的Timer3,这三个定时器分别被加上系统当前时间rt tick = 20后从小到大排序插入到rt timer list链表中,形成如上图所示的定时器链表结构。而rt tick随 着 硬 件 定 时 器 的 触 发 一 直 在 增 长,50个tick以 后,rt tick从20增 长 到70,与Timer1的timeout值 相 等, 这 时 会 触 发Timer1定 时 期 相 关 连 的 超 时 函 数, 同 时将Timer1从rt timer list链表上删除。同理,100个tick和130个tick过去后,Timer2和Timer3定时器相关联的超时函数会被触发,接着将Time2和Timer3定时器从rt timer list链表中删除。 实验设计 本实验的主要设计目的是帮助读者了解内软件寄存器相关内容并用一个小例子演示。请读者注意,本实验本身不具有实际的工程参考价值,只是帮助读者快速了解相关API的用法。 源程序说明 本实验对应1_kernel_timer_basic 系统依赖 在rtconfig.h中需要开启 #define RT_USING_HEAP 此项可选,开启此项可以创建动态线程和动态信号量,如果使用静态线程和静态信号量,则此项不是必要的 #define RT_USING_CONSOLE 此项必须,本实验使用rt_kprintf向串口打印按键信息,因此需要开启此项 #define RT_USING_TIMER_SOFT 此项必须,本实验使用软件定时器,因此必须开启此项 主程序说明 本实验主要就是演示一个动态定时器效果。 定时器的创建 ```timer1 = rt_timer_create("timer1", /* 定时器名字是 timer1 */ timeout1, /* 超时时回调的处理函数 */ RT_NULL, /* 超时函数的入口参数 */ 10, /* 定时长度,以OS Tick为单位,即10个OS Tick */ RT_TIMER_FLAG_PERIODIC); /* 周期性定时器 */``` 启动定时器 ```rt_timer_start(timer1);``` 定时器超时函数 ```static void timeout1(void* parameter) { rt_kprintf("periodic timer is timeout "); count ++; /* 停止定时器自身 */ if (count >= 8) { /* 停止定时器 */ rt_timer_stop(timer1); count = 0; } }``` 编译调试及观察输出信息 编译请参见《RT-Thread配置开发环境指南》完成编译烧录,参考《Realtouch开发板使用手册》完成硬件连接,连接扩展板上的串口和jlink。 运行后可以看到如下信息: ``` | / - RT - Thread Operating System / | 1.1.0 build Aug 14 2012 2006 - 2012 Copyright by rt-thread team periodic timer is timeout periodic timer is timeout periodic timer is timeout periodic timer is timeout periodic timer is timeout periodic timer is timeout periodic timer is timeout periodic timer is timeout``` 结果分析 本例程定义了一个动态定时器,将其定时时间设为10个os tick,时间到则触发超时处理函数,打印超时信息。在定时器创建过程中,你可以修改定时器时间,让定时效果更能体会。根据RT_TICK_PER_SECOND来确定os tick,从而你的定时长度也可以确定。 ![图片1.png](https://oss-club.rt-thread.org/uploads/3089_902b97bf736861d8a9f879daa1fa1e09.png) 下载附件 [实验4_1定时器基本.pdf](https://oss-club.rt-thread.org/uploads/3089_1af50b721c12be085e15cc295672e95d.pdf) 下载附件 [1_kernel_timer_basic.zip](https://oss-club.rt-thread.org/uploads/3089_2409d8c576af1522abe88ead0229ab67.zip)
查看更多
3
个回答
默认排序
按发布时间排序
bloom5
2012-09-18
这家伙很懒,什么也没写!
添加文档,例程 [attach]1334[/attach] [attach]1335[/attach]
pigeon0411
2015-07-30
这家伙很懒,什么也没写!
>tick值设置越小,实时精度越高,但是系统开销也越大 --- 这个有错误,应该是 “tick值设置越大,实时精度越高,但是系统开销也越大”
撰写答案
登录
注册新账号
关注者
0
被浏览
6.6k
关于作者
bloom5
这家伙很懒,什么也没写!
提问
4
回答
21
被采纳
0
关注TA
发私信
相关问题
1
[项目]搞个开源的硬件项目
2
硬件计划贴,及时更新,欢迎提意见
3
软件计划贴,及时更新,欢迎提意见::WMA,MOUNT,LWIP等问题急需解决.
4
MMS协议
5
定点的wma解压库-libwma
6
QQ群记录 [20090821]
7
STM32网络收音机PCB报名征集
8
第一版调试记录
9
第二版硬件讨论
10
RADIO项目相关模块规格--欢迎大家自己做板时规格与此兼容,减少重复劳动
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
【RT-Thread】【ci】【scons】将ci.attachconfig.yml和scons结合使用
2
Rt-thread中OTA下载后,bootloader不搬程序
3
ulog 日志 LOG_HEX 输出时间改为本地日期时间
4
在RT-Thread Studio中构建前执行python命令
5
研究一了一段时间RTT,直接标准版上手太难,想用nano,但又舍不得组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
I2C_IIC
ESP8266
UART
WIZnet_W5500
ota在线升级
cubemx
PWM
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
xusiwei1236
8
个答案
2
次被采纳
踩姑娘的小蘑菇
1
个答案
2
次被采纳
用户名由3_15位
9
个答案
1
次被采纳
bernard
4
个答案
1
次被采纳
RTT_逍遥
3
个答案
1
次被采纳
本月文章贡献
聚散无由
2
篇文章
15
次点赞
catcatbing
2
篇文章
5
次点赞
Wade
2
篇文章
4
次点赞
Ghost_Girls
1
篇文章
7
次点赞
xiaorui
1
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部