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

Posted lzd626

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ucosiii浅析内核对象-软件定时器相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

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

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

 技术分享图片

 

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

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

以上是关于ucosiii浅析内核对象-软件定时器的主要内容,如果未能解决你的问题,请参考以下文章

UCOSIII事件标志组和同时等待多个内核对象

UCOSIII事件标志组和同时等待多个内核对象

UCOSIII中的节拍列表更新

linux 内核Lockup机制浅析

UCOSIII软件定时器

ucosiii内核源码解析---os_core.c