UCOSIII操作系统

  • UCOSIII操作系统——软件定时器篇
    • 软件定时器的API函数
    • 定义一个定时器的控制块(句柄)
    • 创建定时器->OSTmrCreat()
    • 启动定时器->OSTmrStart()
    • 停止定时器->OSTmrStop()
    • 删除定时器->OSTmrDel()
    • 回调函数

UCOSIII其他内容导航不迷路
UCOSIII操作系统-简介
【UCOSIII操作系统】任务篇(1)创建任务
【UCOSIII操作系统】任务篇(2)相关API函数
【UCOSIII操作系统】系统初始化篇(1)系统初始化
【UCOSIII操作系统】系统初始化篇(2)CPU,SysTick,内存初始化
【UCOSIII操作系统】硬件初始化篇(1)硬件初始化以及开始运行系统
【UCOSIII操作系统】消息队列篇(1)消息队列
【UCOSIII操作系统】消息队列篇(2)任务消息队列
【UCOSIII操作系统】信号量与互斥量篇(1)信号量
【UCOSIII操作系统】信号量与互斥量篇(2)互斥量
【UCOSIII操作系统】信号量与互斥量篇(3)任务信号量
【UCOSIII操作系统】事件篇
【UCOSIII操作系统】中断管理篇
【UCOSIII操作系统】临界段篇
【UCOSIII操作系统】内存管理篇
已完结

说在前面:
这个内容不适合0基础的人,因为这里只讲了应用层面的东西,并没有深入内核讲解,所以要从零开始学UCOSIII的朋友,可以先去学完入门内容,再来观看这个笔记加深印象。
这篇文章是个人学习整理,如有错误请指正

UCOSIII操作系统——软件定时器篇

软件定时器,软件定时器是由操作系统提供的一类系统接口,它构建在硬件定时器基础之上,使系统能够提供不受硬件定时器资源限制的定时器服务,它实现的功能与硬件定时器也是类似的。
使用硬件定时器时,每次在定时时间到达之后就会自动触发一个中断,用户在中断中处理信息;而使用软件定时器时,需要我们在创建软件定时器时指定时间到达后要调用的函数(也称超时函数/回调函数,为了统一,下文均用回调函数描述),在回调函数中处理信息。

  • 当到达设定时钟计数值后会触发用户定义的回调函数
  • 一般利用SysTick作为软件定时器的基础时钟
  • 回调函数类似于硬件的中断服务函数
  • 回调函数也要快进快出,不能有阻塞任务运行的情况或者删除定时器任务的情况

uCOS软件定时器的精度(分辨率)决定于系统时基频率,也就是变量OS_CFG_TMR_TASK_RATE_HZ的值,它是以Hz为单位的。如果软件定时器任务的频率(OS_ CFG_TMR_TASK_RATE_HZ)设置为10Hz,系统中所有软件定时器的精度为十分之一秒。事实上,这是用于软件定时器的推荐值,因为软件定时器常用于不精确时间尺度的任务

  • 时间计算是用os_cfg_app.h里面的OS_CFG_TMR_TASK_RATE_HZ来设置的,比如说100HZ(一般),定时器的基准时间就是10ms,然后定时只能定10的倍数的时间,只能是10ms,20ms,30ms,不能是5ms,15ms,等。

  • 注意:定时器任务的频率OS_CFG_TMR_TASK_RATE HZ的值不能大于系统时基频率OS_CFG_TMR_TASK_RATE_HZ的值。

  • 我们知道,在系统初始化函数中,有一个定时任务,要使能相应的宏,才能正常使用软件定时器功能。

软件定时器的API函数

函数 描述
OSTmrCreat() 创建定时器并设置运行模式
OSTmrDel() 删除定时器
OSTmrStart() 启动定时器计数
OSTmrStop() 停止定时器倒计时
OSTmrRemainGet() 获取定时器剩余时间
OSTmrStateGet() 获取当前定时状态

定义一个定时器的控制块(句柄)

OS_TMR   my_tmr;   //声明软件定时器句柄

创建定时器->OSTmrCreat()

  • 函数原型
void  OSTmrCreate (OS_TMR               *p_tmr,              //定时器控制块指针CPU_CHAR             *p_name,         //命名定时器,有助于调试OS_TICK               dly,              //初始定时节拍数OS_TICK               period,          //周期定时重载节拍数OS_OPT                opt,               //选项OS_TMR_CALLBACK_PTR   p_callback,       //定时到期时的回调函数void                 *p_callback_arg,   //传给回调函数的参数OS_ERR               *p_err)             //返回错误类型

要注意有初始化节拍数和没初始化节拍数的区别
opt选项:
定时器运行选项,这里有两个模式可以选择。
OS_OPT_TMR_ONE_SHOT 单次定时器
OS_OPT_TMR_PERIODIC 周期定时器
在单次定时模式时,就写初始化节拍数就好,重装载节拍数为0

  • 应用实例
#define  OS_CFG_TMR_TASK_RATE_HZ         100u        // 基准时间10ms //创建定时器1OSTmrCreate((OS_TMR     *)&tmr1,                //定时器1(CPU_CHAR *)"tmr1",             //定时器名字(OS_TICK  )20,                   //20*10=200ms(OS_TICK   )100,                  //100*10=1000ms(OS_OPT      )OS_OPT_TMR_PERIODIC,  //周期模式(OS_TMR_CALLBACK_PTR)tmr1_callback,   //定时器1回调函数(void     *)0,                    //参数为0(OS_ERR       *)&err);                //返回的错误码//创建定时器2OSTmrCreate((OS_TMR     *)&tmr2,        (CPU_CHAR   *)"tmr2",     (OS_TICK     )200,          //200*10=2000ms    (OS_TICK     )0,                    (OS_OPT      )OS_OPT_TMR_ONE_SHOT,  //单次定时器(OS_TMR_CALLBACK_PTR)tmr2_callback,  //定时器2回调函数(void     *)0,            (OS_ERR     *)&err);

启动定时器->OSTmrStart()

  • 函数原型
CPU_BOOLEAN  OSTmrStart (OS_TMR  *p_tmr,     //定时器控制块指针OS_ERR  *p_err)       //返回错误类型
  • 应用实例
OSTmrStart(&tmr1,&err);  //开启定时器1
OSTmrStart(&tmr2,&err); //开启定时器2

停止定时器->OSTmrStop()

  • 函数原型
CPU_BOOLEAN  OSTmrStop (OS_TMR  *p_tmr,              //定时器控制块指针OS_OPT   opt,             //选项void    *p_callback_arg,    //传给回调函数的新参数OS_ERR  *p_err)             //返回错误类型
  • 应用实例
OSTmrStop(&tmr1,OS_OPT_TMR_NONE,0,&err); //关闭定时器1
OSTmrStop(&tmr2,OS_OPT_TMR_NONE,0,&err);    //关闭定时器2

删除定时器->OSTmrDel()

OSTmrDel0用于删除一个已经被创建成功的软件定时器,删除之后就无法使用该定时并且定时器相应的信息也会被系清空。要想使用OSTmrDel()函 数必须在头文件os_ cfg.h中把宏OS_CFG_TMR_DEL_EN定义为1

  • 函数原型
#if OS_CFG_TMR_DEL_EN > 0u                    //如果使能了 OSTmrDel() 函数
CPU_BOOLEAN  OSTmrDel (OS_TMR  *p_tmr,      //定时器控制块指针OS_ERR  *p_err)       //返回错误类型

回调函数

  • 回调函数类似于硬件的中断服务函数
  • 回调函数也要快进快出,不能有阻塞任务运行的情况或者删除定时器任务的情况
void tmr1_callback(void *p_tmr, void *p_arg) //函数名随意取,里面的形参严格按照这种方式写
{// 用户自己的代码
}
  • 应用实例
/*
*********************************************************************************************************
*                                          TMR TASK
*********************************************************************************************************
*/
void TmrCallback (OS_TMR *p_tmr, void *p_arg) //软件定时器MyTmr的回调函数
{CPU_INT32U       cpu_clk_freq; CPU_SR_ALLOC();      //使用到临界段(在关/开中断时)时必需该宏,该宏声明和定义一个局部变//量,用于保存关中断前的 CPU 状态寄存器 SR(临界段关中断只需保存SR)//,开中断时将该值还原。  printf ( "%s", ( char * ) p_arg );cpu_clk_freq = BSP_CPU_ClkFreq();                   //获取CPU时钟,时间戳是以该时钟计数macLED1_TOGGLE (); ts_end = OS_TS_GET() - ts_start;     //获取定时后的时间戳(以CPU时钟进行计数的一个计数值)//,并计算定时时间。OS_CRITICAL_ENTER();                 //进入临界段,不希望下面串口打印遭到中断printf ( "\r\n定时1s,通过时间戳测得定时 %07d us,即 %04d ms。\r\n", ts_end / ( cpu_clk_freq / 1000000 ),     //将定时时间折算成 us ts_end / ( cpu_clk_freq / 1000 ) );      //将定时时间折算成 ms OS_CRITICAL_EXIT();                               ts_start = OS_TS_GET();                            //获取定时前时间戳}

【UCOSIII操作系统】软件定时器篇相关推荐

  1. UCOSIII实时操作系统------软件定时器

    文章目录 前言 一.概述 二.使用步骤 1.创建软件定时器 2.启动软件定时器 3.停止软件定时器 4.删除软件定时器 总结 前言 UCOSIII实时操作系统------软件定时器 提示:以下是本篇文 ...

  2. 【UCOSIII操作系统】任务篇(1)创建任务

    UCOSIII操作系统 UCOSIII操作系统--任务篇(1)创建任务 一.UCOSIII--任务 简介 二.创建任务流程 1.定义任务栈 2.定义任务控制块TCB 3.定义任务主体函数 4.创建任务 ...

  3. 【UCOSIII操作系统】系统初始化篇(1)系统初始化

    UCOSIII操作系统 UCOSIII操作系统--系统初始化篇(1)系统内部任务 系统初始化函数 UCOSIII默认有5个系统任务: 空闲任务 时钟节拍任务 统计任务 定时任务 中断服务管理任务 UC ...

  4. 【UCOSIII操作系统】系统初始化篇(2)CPU,SysTick,内存初始化

    UCOSIII操作系统 UCOSIII操作系统--系统初始化篇(2)CPU,SysTick,内存初始化 CPU初始化 SysTick初始化 内存初始化 初始化实例 UCOSIII其他内容导航不迷路 U ...

  5. 【UCOSIII操作系统】简介

    UCOSIII操作系统 现在开始整理UCOSIII实时操作系统的内容 UCOSIII 简介 关于UCOSIII的移植 现在开始整理UCOSIII实时操作系统的内容 UCOSIII其他内容导航不迷路 U ...

  6. ESP32-C3入门教程 基础篇(六、TIMG 硬件定时器 与 软件定时器)

    到了测试第6课,还没有玩过ESP32-C3的基本定时器,虽然FreeRTOS,可以使用软件定时器 但是软件定时器毕竟也有不适用的时候,这个在我FreeRTOS博文中有单独说明. 所以硬件定时器也得熟悉 ...

  7. UCOSIII软件定时器

    1.UCOSIII软件定时器简介 1.1.软件定时器简介: 定时器本质是递减计数器,当计数器减到零时可以触发某种动作的执行,这个动作通过回调函数实现.当定时器计时完成时,定义的回调函数就会被立即调用, ...

  8. 关于软件定时器的一些讨论

    1.简介 这里先介绍下软件定时器和硬件定时器的区别 硬件定时器: CPU内部自带的定时器模块,通过初始化.配置可以实现定时,定时时间到以后就会执行相应的定时器中断处理函数.硬件定时器一般都带有其它功能 ...

  9. UCOSIII操作系统学习笔记——任务

    RTOS系统 RTOS全程为:Real Time OS,就是实时操作系统.实时操作系统分为硬实时和软实时.硬实时要求在规定时间内必须完成操作,硬件实时系统有不允许超时. RTOS操作系统:UCOS,F ...

  10. 单片机裸机实用组件--软件定时器、时间戳

    单片机裸机实用组件–软件定时器.时间戳 之前写过一篇关于单片机定时器延时计时功能的博客 ,刚工作的时候搞得现在看来还是比较糙的,是时候整一个新的了. base_timer 单片机裸机适用的定时器小组件 ...

最新文章

  1. Golang中time包
  2. python有道翻译接口-【Python】Python利用有道翻译开发API应用示例
  3. sudo mount -o loop pm.img /mnt/floppy/mount 错误解决办法--mount 您必须指定文件系统的类型
  4. Mybatis返回Mysql表的自增主键
  5. 自制操作系统(十) 图像叠加处理
  6. Spring Boot笔记-@ComponentScan初步解析
  7. 网站访客系统php,PHP实现网站访客来访显示访客IP浏览器操作系统
  8. LGD模型开发细节|全网首发
  9. Angular使用总结 --- 模型驱动表单
  10. android 学习 解决R.java不能自动生成问题,编译时adb.exe 找不到问题
  11. python程序分块_怎么用python实现文件的分块下载
  12. Luogu3825[NOI2017] 游戏
  13. Java 登录拦截器
  14. s912机顶盒改linux服务器,技术宅 篇一:挑战10倍价格的竞品,S912机顶盒coreelec串流打游戏...
  15. java 变量存放在哪_Java全局变量存放在哪里?
  16. CSP多USBkey操作获取信息
  17. 繁凡的ACM模板(满注释模板)
  18. 一键禁用windows defender
  19. win7不显示移动硬盘_Mac 下移动硬盘异常退出修复
  20. 计算机网安全模式,电脑安全模式有什么用?

热门文章

  1. android 小米读写权限,Android 小米手机的权限问题
  2. 使用虚幻4开发HoloLens的准备工作
  3. 【转载】AssetBundle资源打包加载管理
  4. java Jre和Jdk的区别
  5. 一、阿里矢量图标(字体图标)
  6. java计算机毕业设计教务排课系统(附源码、数据库)
  7. 层次分析法(AHP)及源代码实现
  8. pgAdmin4的备份和还原数据
  9. 6. lcd驱动1-硬件原理
  10. 远秋考试系统服务器网址,远秋医学在线考试系统