闫刚 nuttx的posix的定时器原理
文章目录
- 定时器工作原理
- 资源
- 定时器模块初始化
- 定时器创建
- 启动定时器
- 定时器超时函数
定时器工作原理
定时器主要是使用waitdog进行实现,周期处理是通过timer_timeout进行处理
资源
nuttx_posix_timer.md
闫刚 nuttx的posix的定时器原理
定时器模块初始化
主要是创建定时器的资源, 静态分配资源到链表中。
![](https://github.com/yangang123/yangang123.github.io/raw/master/1-nuttx/resource/nuttx_waitdog_datastruct.jpg)
void weak_function timer_initialize(void)
{
#if CONFIG_PREALLOC_TIMERS > 0
int i;
/* Place all of the pre-allocated timers into the free timer list */
sq_init((FAR sq_queue_t *)&g_freetimers);
for (i = 0; i < CONFIG_PREALLOC_TIMERS; i++)
{
g_prealloctimers[i].pt_flags = PT_FLAGS_PREALLOCATED;
sq_addlast((FAR sq_entry_t *)&g_prealloctimers[i],
(FAR sq_queue_t *)&g_freetimers);
}
#endif
/* Initialize the list of allocated timers */
sq_init((FAR sq_queue_t *)&g_alloctimers);
}
定时器创建
创建定时器主要是设置1个signal信号,后期通过发信号通知用户程序
int timer_create(clockid_t clockid, FAR struct sigevent *evp,
FAR timer_t *timerid)
wdog = wd_create();
ret = timer_allocate();
ret->pt_wdog = wdog;
信号实现
ret->pt_event.sigev_notify = SIGEV_SIGNAL; //设置信号ALARM
ret->pt_event.sigev_signo = SIGALRM;
ret->pt_event.sigev_value.sival_ptr = ret;
启动定时器
启动定时器是通过timer_settime进行启动的
int timer_settime(timer_t timerid, int flags,
FAR const struct itimerspec *value,
FAR struct itimerspec *ovalue)
->
timer->pt_last = delay;
ret = wd_start(timer->pt_wdog, delay, (wdentry_t)timer_timeout,
1, (uint32_t)((wdparm_t)timer));
定时器超时函数
static void timer_timeout(int argc, wdparm_t itimer)
timer_restart(u.timer, itimer);
闫刚 nuttx的posix的定时器原理相关推荐
- 实现quartz定时器及quartz定时器原理介绍
今天研究定时器,在网上看了一篇不错的文章,推荐给大家! 实现quartz定时器及quartz定时器原理介绍
- 闫刚 linux下对u盘进行分区格式化
文章目录 资源 基础知识 格式化u盘分区 1. 查看当前u盘被挂载到那个设备节点上 2. 进入u盘 3. 查看u盘分区表 4. 修改u盘分区格式 5. 把u盘制作成FAT文件系统 6. 把u盘制作ex ...
- JavaScript定时器原理分析
JavaScript中的定时器大家基本在平时的开发中都遇见过吧,但是又有多少人去深入的理解其中的原理呢?下面我们就来分析一下定时器的实现原理. 一.储备知识 在我们在项目中一般会遇见过这样的两种定时器 ...
- 操作系统定时器原理分析(基于linux0.11)
操作系统的定时器原理是,操作系统维护了一个定时器节点的链表,新增一个定时器节点时,设置一个jiffies值,这是触发定时中断的频率.linux0.11版本里是1秒触发100次,即10毫秒一次.加入新增 ...
- 嵌入式单片机基础篇(十)之Systick定时器原理及应用
Systick定时器原理及应用 1.什么是Systick定时器? 回答: (1)ystick定时器,是一个简单的定时器,对于CM3,CM4内核芯片,都有Systick定时器. (2)Systick定时 ...
- java定时器的原理_spring定时器原理是什么?
作为程序员来说,我们可能经常会使用到spring框架去实现各种各样的需求开发,其中的一项,定时器也是经常会被使用到的,那么你是否清楚其原理是什么呢? 首先我们来看看简单定时器实现方法:用Schedul ...
- libev源码解析——定时器原理
本文将回答<libev源码解析--I/O模型>中抛出的两个问题.(转载请指明出于breaksoftware的csdn博客) 对于问题1:为什么backend_poll函数需要指定超时?我们 ...
- JavaScript定时器原理及高级使用
JavaScript里面内置了两个定时器,一个是setTimeout()一个是setInterval().下面将由浅入深来理解一下定时器的工作原理. 使用方式: setTimeout() setTim ...
- 定时器 POSIX Timer定时器和setitimer定时器
POSIX 可移植 POSIX:可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX . POSIX Timer C API ...
最新文章
- ITK:为图像中标记区域的边界上色
- jvm 性能调优工具之 jstat
- RHEL/CentOS/Fedora各种源
- 【Networking】容器网络大观 SDN 资料汇总
- 读书日记 莫雨 《一个程序员的奋斗史》Java 面试 感悟 程序员
- VMWare NSX安全生产和DMZ用例的详细设计指南
- 离线人脸识别C#类库分享 虹软2.0版本
- python基础篇--从零开始(中)PyCharm、Vscode安装。
- ThreadPoolExecutor 线程池理论、饱和策略、工作队列排队策略
- 智能驾驶LQR横向控制算法
- C++求一元二次方程根
- 【UE·蓝图底层篇】一文搞懂NativeClass、GeneratedClass、BlueprintClass、ParentClass
- linus 用的linux版本,Linus Torvalds的重大消息
- 联想小新笔记本电脑显示很暗, 教你如何将将其亮度调到最高
- 固态硬盘能不能提高计算机速度,固态硬盘—提升电脑速度最有效的利器!
- 几种基本放大电路详解
- 继承-super详解
- Objective-C基础教程读书笔记
- 企业转型做互联网广告怎么样?
- NFS HA架构部署(NFS + Pacemaker + Corosync + DRBD)