标题: 真正的程序框架 简洁小巧的软件定时器 , 已附移植视频,盖到20楼送源码 [打印本页]

作者: misra    时间: 2021-2-26 12:03
标题: 真正的程序框架 简洁小巧的软件定时器 , 已附移植视频,盖到20楼送源码
还在用各种标志位 全局变量搞定时器,换种更优雅的方式吧

好了首先搞个需求引入 软件定时器的这个话题吧。

需求1:让4个任务分别以1000ms、500ms、500ms、800ms周期性执行。怎么弄
直接给出需求1的代码:
/*-----------------------------------------------------*/
void test1(void)
{
    MLPeriod.init();
    while (1) {
        MLPeriod.run();
        if (MLPeriod.check(1000)) {
            //task1
        }
        if (MLPeriod.check(500)) {
            //task2
        }
        if (MLPeriod.check(500)) {
            //task3
        }
        if (MLPeriod.check(800)) {
            //task4
        }
    }
}

/*-----------------------------------------------------*/
需求2让20个变量,分别以111,111,123,127,118,99,88,58,58,47,33,38,29,1111,2456,678,6789,457,451,20毫秒 周期性变化
                怎么弄?
直接给出应用代码:
/*-----------------------------------------------------*/
ml_u32_t var[20] = {0}; //20个变量
ml_u32_t init_period[20] = {111, 111, 123, 127, 118, 99, 88, 58, 58, 47, 33, 38, 29, 1111, 2456, 678, 6789, 457, 451, 20}; //20个变量的周期值
void test (void)
{
    ml_u32_t j;
    MLPeriod.init();
    while (1) {
        MLPeriod.run();
        for (j = 0; j < 20; j++) {
            if (MLPeriod.check(init_period[j])) {
                var[j]++;
            }
        }
    }
}

/*-----------------------------------------------------*/


代码是不是看起来很简单 没错!使用起来就是这么简单

移植视频如下(单机鼠标可放大):



源码链接:

microLite_timer.h
microLite_timer.c

有疑问或者建议请跟帖回复






作者: hefq    时间: 2021-2-26 21:38
搞得太复杂了,应该精简一下
作者: hefq    时间: 2021-2-26 21:45
启动定时器的地方,和检测定时器的地方经常是不在一起的,所以还是要变量中转
作者: misra    时间: 2021-2-27 08:45
应用场景
周期触发定时器(MLPeriod),适用于对首次触发时间要求不严格的场合。比如,让LED以280ms周期性亮灭。这种情况下我们并不关心LED首次由灭到亮用了多长时间,我们只要求LED在以后的时间以准确的280ms周期性亮灭。

单次触发定时器(MLShot),适用于对首次触发时间要求严格的场合。另外MLshot定时器自动停止后,调用启动函数MLShot.start,亦可实现周期触发。


API接口
microLite_timer支持的MLPeriod接口主要包括:

MLPeriod.Init,初始化定时器;
MLPeriod.run;
MLPeriod.check,检查定时器是否超时。
microLite_timer支持的MLShot接口主要包括:

MLShot.start,启动定时器;
MLShot.stop,停止定时器;
MLShot.check,检查定时器是否超时。
作者: misra    时间: 2021-2-27 08:47
hefq 发表于 2021-2-26 21:38
搞得太复杂了,应该精简一下

一看内容太多,估计你就没细看
作者: jovew    时间: 2021-2-27 10:34
没有看明白! 在研究研究!
作者: 春风十里吹    时间: 2021-2-27 10:56
明明一个简单的指针能摆平的事,硬是要搞得这么复杂,制造麻烦!
作者: misra    时间: 2021-2-27 12:56
春风十里吹死你 发表于 2021-2-27 10:56
明明一个简单的指针能摆平的事,硬是要搞得这么复杂,制造麻烦!

talk is sheep, show me your code
作者: misra    时间: 2021-3-5 07:20
版主  51hei   就是51hei51?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1