ucosiii浅析内核对象-软件定时器

内核对象和各种内核机制的函数接口都在os.h里声明,实现在各自的.c文件,比如os_tmr.c和os_time.c。

C语言全局变量一般会默认初始化;局部变量如若不初始化,会分配垃圾数据的;建议使用时都手动初始化。

其实使用内核对象时,就类似与使用任务,只不过在创建对象之前,要先声明一个内核对象。

好了,上面闲聊了几句,今天来说说ucosiii的几个内核对象。

首先说“软件定时器”,其实单纯的讲就是定时作用,这里我们要注意的就是,使用它方法和使用任务类似;那么我们就先来分析分析任务的执行过程:

  1. main会初始化ucos;调用一个起始任务创建函数(它的参数就是就是任务的工作模式,任务信息,任务函数指针)来创建任务;启动多任务管理。
  2. 任务函数指针指向起始任务函数会初始化操作系统;调用若干普通任务创建函数(与上一致)来创建任务;删除起始任务本身。
  3. 任务函数就会完成具体的操作。

那继续说软件定时器,在上面的3里任务函数会声明一个定时器对象,然后调用一个定时器创建函数(它的参数为定时器信息,工作模式,回调函数指针等)来创建任务,回调函数完成一些自定义的操作(每次定时完成会调用此回调函数),最后调用OSTmrStart()启动软件定时器;接下来就可以使用它了。

我们可以知道,用OSTimeDly是将任务置为等待态,CPU的使用权暂时被剥夺,开启定时器之后,该任务还是可以使用CPU。

通过debug我们也可以发现,运行完OSTimeDly之后(也可以说定时了指定时间之后),会完成一次回调函数里面的操作。也就验证了这个结论“定时完成之后会调用回调函数”。

原文地址:https://www.cnblogs.com/lzd626/p/9495499.html

时间: 2024-11-13 06:40:44

ucosiii浅析内核对象-软件定时器的相关文章

RT-thread内核对象标志flag总结

一.内核标志flag 在内核对象控制块中有一个标志成员flag(rt_uint8_t flag; ),这个标志在不同有内核对象中具有不同的含义.rt-thread的内核对象有定时器.线程.信号量.互斥锁.事件.邮箱.消息队列.内存堆.设备.模块,这些内核对象都继承了内核对象的成员,其中也就包含了内核对象的flag成员,因此,内核对象成员flag在这些不同的场合是具体不同的含义的. 二.flag在定时器中的定义    #define RT_TIMER_FLAG_DEACTIVATED 0x0 /*

UCOSiii软件定时器

1 简介 定时器其实就是一个递减计数器,当计数器递减到0的时候就会触发一个动作,这个动作就是回调函数,当定时器计时完成时就会自动的调用这个回调函数.因此我们可以使用这个回调函数来完成一些功能设计.比如,定时10秒后打开某个外设等等,在回调函数中应避免任何可以阻塞或者删除定时任务的函数. 如果要使用该软件定时器的话需要将宏OS_CFG_TMR_DEL_EN定义为1. 软件定时器的分辨率由我们定义的系统节拍频率OS_CFG_TICK_RATE_HZ决定,例如定义为200,系统时钟周期就是5ms,定时

实现自己的软件定时器

为什么要实现软件定时器: 在芯片平台上,地址空间也是相当宝贵的,如果保留了更多的硬件定时器的话,就需要更多的地址空间,那么我们能不能作个折中方案呢?答案是肯定的,我们可以使用一个硬件定时器,来模拟实现一个软件定时器,可以满足更多的定时需求,需要注意的一点就是软件定时器精度可能会有稍微误差,因为会涉及到任务调度.锁中断等,在对定时精度要求不高的场景,可以考虑使用软件定时器.Linux内核中的timer_list精度为10ms,这里我们来实现一套精度为1ms的软件定时器(当然可以实现精度为微秒级的,

uC/OS-III-11.0-uC/OS-III软件定时器

1.软件定时器管理 uC/OS-III提供了软件定时器服务(相关代码在OS_TMR.C中).当设置OS_CFG.H中的OS_CFG_TMR_EN为1时软件定时器服务被使能. 2.uC/OS-III 定时器的分辨率决定于时基频率,也就是变量OS_CFG_TMR_TASK_RATE_HZ的值,它是以 Hz为单位的.如果时基任务的频率设置为 10Hz,所有定时器的分辨率为十分之一秒.事实上, 这是用于定时器的推荐值. 定时器用于不精确时间尺度的任务. 3.uC/OS-III提供了一些函数用于管理定时器

软件定时器

软件定时器是 uC/OS 操作系统的一个内核对象,软件定时器是基于时钟节拍和系统管理创建的软件性定时器,理论上可以创建无限多个,但精准度肯定比硬件定时稍逊一筹.使用硬件定时器往往需要查阅芯片的相关数据手册,比较繁琐,而使用 uC/OS 的软件定时非常方便. 软件定时器启动之后是由软件定时器任务 OS_TmrTask() 统一管理,在创建软件定时器之前必须先使能软件定时器和配置软件定时器的相关参数. 软件定时器的使能位于"os_cfg.h": /* -------------------

uC/OS-III 软件定时器(三)

软件定时器是uC/OS 操作系统的一个内核对象,软件定时器是基于时钟节拍和系统管理创建的软件性定时器,理论上可以创建无限多个,操作简单,但精准度肯定比硬件定时稍逊一筹. 原理和实现过程 要用到的函数: OSTmrCreate () //创建定时器 OSTmrDel () //删除定时器 OSTmrStart () //开启定时器 OSTmrStop () //停止定时器 使用定时器前先使能,软件定时器的使能位于“os_cfg.h”. 其有关参数的配置位于“os_cpu_app.h”. OSTmr

【TencentOS tiny】深度源码分析(8)——软件定时器

软件定时器的基本概念 TencentOS tiny 的软件定时器是由操作系统提供的一类系统接口,它构建在硬件定时器基础之上,使系统能够提供不受硬件定时器资源限制的定时器服务,本质上软件定时器的使用相当于扩展了定时器的数量,允许创建更多的定时业务,它实现的功能与硬件定时器也是类似的. 硬件定时器是芯片本身提供的定时功能.一般是由外部晶振提供给芯片输入时钟,芯片向软件模块提供一组配置寄存器,接受控制输入,到达设定时间值后芯片中断控制器产生时钟中断.硬件定时器的精度一般很高,可以达到纳秒级别,并且是中

内核对象&句柄&泄漏&检测

今天看到这个问题如何评价王垠的 <讨厌的 C# IDisposable 接口>? - 王垠(人物),答案被歪到windows 内核对象和句柄,答案中谈的太浅显而且有误.翻出陈年老文章(此文成于2012年,只在公司内部分享过),大部分内容来自Windows内核原理 1句柄和句柄泄露 在Windows编程过程中,很多时候我们都要和句柄打交道,比如窗体句柄,内核对象句柄,GDI句柄,Windows Multimedia库中的多种句柄等等,以及其他更多未曾使用过的句柄类型.句柄(Handle)是Win

线程与内核对象的同步

线程与内核对象的同步内核对象可以处于已通知或未通知状体进程,线程,作业,文件,控制台输入,文件修改,事件,可等待定时器 等待函数DWORD WaitForSingleObject(HANDLE hobject, DWORD dwMilliseconds); 同时查看若干个内核对象已通知状体DWORD WaitForMultipleObjects(DWORD dwCount,CONST HANDLE* phObjects,BOOL fWaitAll,DWORD dwMilliseconds);dw