/*

*     multi_timer.h

*

*      Created on: 20161229

*      @Author   : 晓宇

*      @version  :V1.0.0

*/

#ifndef _MULTI_TIMER_H_

#define _MULTI_TIMER_H_

#include "stdint.h"

typedef struct Timer {

uint32_t timeout;

uint32_t repeat;

void (*timeout_cb)(void);

struct Timer* next;

}Timer;

#ifdef __cplusplus

extern "C" {

#endif

void timer_init(struct Timer* handle, void(*timeout_cb)(), uint32_t timeout, uint32_t repeat);

int  timer_start(struct Timer* handle);

void timer_stop(struct Timer* handle);

void timer_ticks(void);

void timer_loop(void);

// void timer_again(struct Timer* handle);

// void timer_set_repeat(struct Timer* handle, uint32_t repeat);

#ifdef __cplusplus

}

#endif

#endif/*

*     multi_timer.c

*

*      Created on: 20161229

*      @Author   : 晓宇

*      @version  :V1.0.0

*/

#include "multi_timer.h"

//timer handle list head.

static struct Timer* head_handle = NULL;

//Timer ticks

static uint32_t _timer_ticks = 0;

/**

* @brief  Initializes the timer struct handle.

* @param  handle: the timer handle strcut.

* @param  timeout_cb: timeout callback.

* @param  repeat: repeat interval time.

* @retval None

*/

void timer_init(struct Timer* handle, void(*timeout_cb)(), uint32_t timeout, uint32_t repeat)

{

// memset(handle, sizeof(struct Timer), 0);

handle->timeout_cb = timeout_cb;

handle->timeout = _timer_ticks + timeout;

handle->repeat = repeat;

}

/**

* @brief  Start the timer work, add the handle into work list.

* @param  btn: target handle strcut.

* @retval 0: succeed. -1: already exist.

*/

int timer_start(struct Timer* handle)

{

struct Timer* target = head_handle;

while(target) {

if(target == handle) return -1;  //already exist.

target = target->next;

}

handle->next = head_handle;

head_handle = handle;

return 0;

}

/**

* @brief  Stop the timer work, remove the handle off work list.

* @param  handle: target handle strcut.

* @retval None

*/

void timer_stop(struct Timer* handle)

{

struct Timer** curr;

for(curr = &head_handle; *curr; ) {

struct Timer* entry = *curr;

if (entry == handle) {

*curr = entry->next;

//      free(entry);

} else

curr = &entry->next;

}

}

/**

* @brief  main loop.

* @param  None.

* @retval None

*/

void timer_loop()

{

struct Timer* target;

for(target=head_handle; target; target=target->next) {

if(_timer_ticks >= target->timeout) {

if(target->repeat == 0) {

timer_stop(target);

} else {

target->timeout = _timer_ticks + target->repeat;

}

target->timeout_cb();

}

}

}

/**

* @brief  background ticks, timer repeat invoking interval 1ms.

* @param  None.

* @retval None.

*/

void timer_ticks()

{

_timer_ticks++;

}

c语言写的程序如何移植,完全由C语言编写,高度可移植,超级牛逼的软件定时器!...相关推荐

  1. c语言程序会使cpu变高,用 C 语言写个程序,运行时,cpu占用率一直保持50%

    好记性不如烂笔头 --东西太多,脑子永远不够用 问题 用 C 语言写个程序,运行时,cpu占用率一直保持50% 解决方案 一看题目好眼熟!<编程之美>!然而已经记不清楚了,果然东西需要经常 ...

  2. C语言写CGI程序【转】

    一.CGI概述 CGI(公用网关接口)规定了Web服务器调用其他可执行程序(CGI程序)的接口协议标准.Web服务器通过调用CGI程序实现和Web浏览器的交互, 也就是CGI程序接受Web浏览器发送给 ...

  3. c语言写学程序,入门:我的第一个程序|学编程写游戏(C语言)

    第五步:按键盘上的F11这个键.看看会发生什么吧! 上面显示的就是程序运行的结果哦.酷吧! "太棒了!!!,这么漂亮.我要学C语言!"凡凡兴高彩烈地说. "好啊!你一定行 ...

  4. 写一个关机代码让别人的电脑根据你的指令关机,c语言写小程序恶搞别人

    目录 要求: c语言在电脑上实现控制关机 写关机程序的代码 ​编辑 如何把这个程序让同学运行起来 要求: 运行起来,电脑1分钟内关机,如果输入:我是猪(可以是其他整蛊句子),就取消关机: c语言在电脑 ...

  5. dll文件是什么语言写的程序_易语言图文教学:写好了程序,如何配置程序名称、图标?内详...

    引导语 通过前两篇图文,相信大家能制作出一个简单的易语言程序啦.今天是教大家怎样配置程序.说的再清楚些,就是给你的程序加个图标,改个进程名字,加上版本号,添加作者信息等等. 具体操作方法 打开一个已经 ...

  6. 请用c语言写一个程序使一个小人在一个16*16的迷宫里做随机运动

    好的,下面是使用 C 语言写的一个使小人在一个 16x16 的迷宫里做随机运动的程序. #include <stdio.h> #include <stdlib.h> #incl ...

  7. 二级c语言编译完程序如何运行,计算机二级C语言辅导:C++环境下编译和运行c语言...

    一 单个文件运行 1 打开vc++出现如图 2 从file菜单中选择"new"→c++source file如图 3 单击"--"命令按扭,在choose di ...

  8. c语言日期计算器程序代码,旧计算器(C语言代码)

    #### 原题链接:[题目486 - ACM在线评测系统](http://nyoj.top/problem/486 "nyoj在线评测") #### 原题内容: **题目描述:** ...

  9. 学了java有必要学c语言吗_程序员有必要学习C语言吗?这几点原因很现实

    原标题:程序员有必要学习C语言吗?这几点原因很现实 C语言是编程语言中的一种,有不少程序员会有这样的疑问?难道做程序员就必须要学习C语言吗?甚至有人觉得,我平时的工作中也用不到C语言我为什么要学习呢? ...

  10. 安卓是用java语言写的吗_android开发是用java语言吗?

    android开发的主流语言是java语言,但也可以使用其他语言,例可以通过Android NDK使用C/C++作为编程语言来开发应用程序,也可使用SL4A来使用其他各种脚本语言进行编程. Andro ...

最新文章

  1. 铅笔芯为什么点不着?
  2. 用TextKit实现表情混排
  3. if/ else 你真的会吗?
  4. lua检测表中是否有某个值,如何检查表是否包含Lua中的元素?
  5. 她的癌细胞救了上亿条命,却很少有人知道她的名字
  6. 卢克增加服务器,DNF卢克攻坚服务器优化:增加攻坚队频道,新跨区整合计划
  7. 消息中间件学习总结(22)——MQ 面试专题
  8. ajax的原理和运行机制
  9. linux execl 错误信息,Excel:自动隐藏错误结果的显示信息(转)
  10. 编译Caffe错误:libpython3.5m.a(abstract.o): relocation R_X86_64_32S against
  11. drools规则引擎初探
  12. python人脸对比相似度_相似度算法原理及python实现
  13. 谷歌Chrome紧急更新补丁0day漏洞
  14. 多维数据运算(矩阵乘法)
  15. Android编程获取图片和视频缩略图的方法(图片压缩)
  16. 泛微OA流程action 之 ACTION 封装
  17. 吴恩达深度学习学习笔记——C1W2——神经网络基础——练习题
  18. Elasticsearch:Hadoop 大数据集成 (Hadoop => Elasticsearch)
  19. Linux下 man命令的使用 及 中文man手册的安装
  20. Spark 用代码实现求分位数Percentile(Quentile)的方法

热门文章

  1. Flutter 基础篇-所有知识点架构
  2. 找最长的字符串 (15 分)
  3. 精英讲师培训笔记01-提升口才的三个心法
  4. python opencv 学习笔记
  5. wamp修改端口localhost
  6. Android 圆角的效果实现
  7. Linux常见问题解答--如何修复“tar:Exiting with failure status due to previous errors”
  8. java程序的运行方式
  9. 显示器驱动程序已停止响应 并且已成功恢复
  10. Kubernetes详解(十三)——Pod详解