文章目录

  • 定时器工作原理
  • 资源
  • 定时器模块初始化
  • 定时器创建
  • 启动定时器
  • 定时器超时函数

定时器工作原理

定时器主要是使用waitdog进行实现,周期处理是通过timer_timeout进行处理

资源

nuttx_posix_timer.md
闫刚 nuttx的posix的定时器原理

定时器模块初始化

主要是创建定时器的资源, 静态分配资源到链表中。

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的定时器原理相关推荐

  1. 实现quartz定时器及quartz定时器原理介绍

    今天研究定时器,在网上看了一篇不错的文章,推荐给大家! 实现quartz定时器及quartz定时器原理介绍

  2. 闫刚 linux下对u盘进行分区格式化

    文章目录 资源 基础知识 格式化u盘分区 1. 查看当前u盘被挂载到那个设备节点上 2. 进入u盘 3. 查看u盘分区表 4. 修改u盘分区格式 5. 把u盘制作成FAT文件系统 6. 把u盘制作ex ...

  3. JavaScript定时器原理分析

    JavaScript中的定时器大家基本在平时的开发中都遇见过吧,但是又有多少人去深入的理解其中的原理呢?下面我们就来分析一下定时器的实现原理. 一.储备知识 在我们在项目中一般会遇见过这样的两种定时器 ...

  4. 操作系统定时器原理分析(基于linux0.11)

    操作系统的定时器原理是,操作系统维护了一个定时器节点的链表,新增一个定时器节点时,设置一个jiffies值,这是触发定时中断的频率.linux0.11版本里是1秒触发100次,即10毫秒一次.加入新增 ...

  5. 嵌入式单片机基础篇(十)之Systick定时器原理及应用

    Systick定时器原理及应用 1.什么是Systick定时器? 回答: (1)ystick定时器,是一个简单的定时器,对于CM3,CM4内核芯片,都有Systick定时器. (2)Systick定时 ...

  6. java定时器的原理_spring定时器原理是什么?

    作为程序员来说,我们可能经常会使用到spring框架去实现各种各样的需求开发,其中的一项,定时器也是经常会被使用到的,那么你是否清楚其原理是什么呢? 首先我们来看看简单定时器实现方法:用Schedul ...

  7. libev源码解析——定时器原理

    本文将回答<libev源码解析--I/O模型>中抛出的两个问题.(转载请指明出于breaksoftware的csdn博客) 对于问题1:为什么backend_poll函数需要指定超时?我们 ...

  8. JavaScript定时器原理及高级使用

    JavaScript里面内置了两个定时器,一个是setTimeout()一个是setInterval().下面将由浅入深来理解一下定时器的工作原理. 使用方式: setTimeout() setTim ...

  9. 定时器 POSIX Timer定时器和setitimer定时器

    POSIX 可移植 POSIX:可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX . POSIX Timer C API ...

最新文章

  1. ITK:为图像中标记区域的边界上色
  2. jvm 性能调优工具之 jstat
  3. RHEL/CentOS/Fedora各种源
  4. 【Networking】容器网络大观 SDN 资料汇总
  5. 读书日记 莫雨 《一个程序员的奋斗史》Java 面试 感悟 程序员
  6. VMWare NSX安全生产和DMZ用例的详细设计指南
  7. 离线人脸识别C#类库分享 虹软2.0版本
  8. python基础篇--从零开始(中)PyCharm、Vscode安装。
  9. ThreadPoolExecutor 线程池理论、饱和策略、工作队列排队策略
  10. 智能驾驶LQR横向控制算法
  11. C++求一元二次方程根
  12. 【UE·蓝图底层篇】一文搞懂NativeClass、GeneratedClass、BlueprintClass、ParentClass
  13. linus 用的linux版本,Linus Torvalds的重大消息
  14. 联想小新笔记本电脑显示很暗, 教你如何将将其亮度调到最高
  15. 固态硬盘能不能提高计算机速度,固态硬盘—提升电脑速度最有效的利器!
  16. 几种基本放大电路详解
  17. 继承-super详解
  18. Objective-C基础教程读书笔记
  19. 企业转型做互联网广告怎么样?
  20. NFS HA架构部署(NFS + Pacemaker + Corosync + DRBD)

热门文章

  1. IPSec over HTTPS
  2. HDU 4506 小明系列故事——师兄帮帮忙
  3. java 受检异常和非受检异常
  4. 讲解高防服务器抵御CC攻击的相关配置
  5. 国内知名插画培训机构有哪些,学习插画怎么选培训班
  6. openGauss社区十一月运作报告
  7. thinkcmf安装
  8. linux下的python3自学部分总结(大概只需几小时就能学会)
  9. Neuroimage | LMDA-Net第一作者亲自讲述其设计思想
  10. 500左右能买到降噪蓝牙耳机吗?平价四款高性价比降噪蓝牙耳机推荐