历史上的今天
返回首页

历史上的今天

今天是:2025年07月29日(星期二)

正在发生

2020年07月29日 | 单片机编程里软件定时器使用技巧

2020-07-29 来源:51hei

#ifndef __SIMPLE_SOFT_TIME_H_

#define __SIMPLE_SOFT_TIME_H_


#define MIAO                1000ul

#define MIN                60*MIAO


#define UPLOAD_SENSOR_ITV             10*MIN                                //传感器数据上报间隔

#define OFFLINE_WAIT_TIME         8*MIN                                 


typedef enum {

        ST_General_Ov=0,

        ST_HEAT_Ov,                 //1

        ST_M35_HEAT_OV,                //2

        ST_Host_Delay,                //3

        ST_GPS_Ov,                        //4

        ST_Register_Ov,                //5

        ST_IDX_MAX

}ST_IDX;


void ScheduleSimpleTimer(void);

void SetM35OverTime(ST_IDX idx, long overtime);

int GetM35OvTime(ST_IDX idx);

void KillSimpleTime(ST_IDX idx);

void Init_SimpeTime(void);

void LongTimeRun(void);


#endif


简单定时器
*************************/
#include "simplesofttime.h"
#include "common.h"

long m35overtime[ST_IDX_MAX];

void Init_SimpeTime(void)
{
        ST_IDX i;
        
        for(i=ST_M35_OV;i        {
                KillSimpleTime(i);
        }
}

void SetM35OverTime(ST_IDX idx, long overtime)
{
        if(idx>=ST_IDX_MAX)
        {
                while(1);
        }
        m35overtime[idx]=overtime/(1000/HZ);
}

//返回1表示超时了
int GetM35OvTime(ST_IDX idx)
{
        if(m35overtime[idx]<0)
                return 1;
        return 0;
}

//这里只能简单的"杀掉"这个定时器
void KillSimpleTime(ST_IDX idx)
{
        if(idx>=ST_IDX_MAX)
        {
                while(1);
        }
        m35overtime[idx]=((1ul<<31)-1); //2147483647*5ms=10737418s/3600=2982h/24=124day
}

/* 该函数5ms调用一次 */
void ScheduleSimpleTimer(void)
{
        ST_IDX i;
        
        for(i=ST_M35_OV;i        {
                m35overtime[ i]--;
        }
}

//1天调用一次
void LongTimeRun(void)
{
        ST_IDX i;
        
        for(i=ST_M35_OV;i        {
                if(m35overtime[ i]>1e9)
                {
                        m35overtime[ i]=((1ul<<31)-1);
                }
        }
}


main()函数的开始调用下Init_SimpeTime()函数将ScheduleSimpleTimer()函数放到中断频率为HZ的定时器里;

该软件定时器使用起来简单,效率高,最6的地方就是ST_IDX_MAX的使用,有了它,每次新增一个定时器就是在ST_IDX增加一条语句的事情;


如果不使用enum的里技巧,新增一个传感器恐怕至少得修改2处,而且偶尔还容易忘记.

推荐阅读

史海拾趣

Headland Technology Product Group公司的发展小趣事

HBControls的创立可以追溯到上世纪90年代初,当时电子工业正处于快速发展阶段。创始人李明(化名)凭借在电子行业多年的工作经验,敏锐地察觉到继电器市场的巨大潜力。然而,初创时期资金短缺、技术瓶颈和市场认可度低成为了摆在他面前的三座大山。李明带领团队夜以继日地研发产品,不断优化性能,同时积极寻找合作伙伴,逐步打开了市场。经过数年的不懈努力,HBControls终于在继电器领域站稳了脚跟。

Capar Components Corp公司的发展小趣事

作为一家有社会责任感的企业,Capar Components Corp积极参与公益事业,回馈社会。公司定期组织员工参与社区服务活动,帮助困难群体解决实际问题。此外,公司还设立了奖学金和助学金,支持教育事业的发展。这些举措不仅彰显了公司的社会责任感,也为公司树立了良好的企业形象。


这些故事是基于一个虚构的电子行业公司背景编写的,您可以根据Capar Components Corp的实际情况进行调整和修改,以使其更符合该公司的历史和发展轨迹。请注意,由于我无法获取Capar Components Corp的具体信息,这些故事仅为示例性质,并非真实事件。

Corstat Containers公司的发展小趣事

为了进一步拓展国际市场,Corstat Containers公司积极寻求与国际知名电子企业的合作。通过参加国际电子展会、建立海外销售渠道等方式,公司成功打开了多个国家的市场。同时,公司还与国外科研机构展开合作,共同研发更加先进的电子产品包装技术,为公司的长期发展奠定了坚实的基础。

ABCircuits公司的发展小趣事

随着公司的不断发展,ABCircuits意识到单打独斗难以应对日益激烈的市场竞争。于是,公司开始积极寻求与其他企业的战略合作。通过与上下游企业的紧密合作,ABCircuits不仅获得了稳定的供应链支持,还成功打开了国际市场的大门。这些合作不仅加速了公司的扩张步伐,也提升了其品牌影响力和市场竞争力。

Bipolarics Inc公司的发展小趣事

Bipolarics Inc成立之初,专注于研发新型双极性晶体管技术。在经历了数年的实验室研究后,公司成功开发出一种性能卓越、功耗更低的新型晶体管。这一技术突破使得Bipolarics Inc的产品在市场上迅速获得了认可,公司开始扩大生产规模,满足不断增长的市场需求。随着市场份额的逐渐扩大,Bipolarics Inc逐渐成为了双极性晶体管领域的领军企业。

Epitex Inc公司的发展小趣事

Epitex Inc公司成立于XXXX年,由一群热衷于电子技术的工程师和企业家共同创立。当时,电子行业正处于快速发展的阶段,各种新技术层出不穷。Epitex的创始人看到了电子材料在半导体制造中的巨大潜力,于是决定专注于研发和生产高性能的电子材料。

在公司创立初期,Epitex面临着资金、技术和市场等多方面的挑战。然而,通过不懈的努力和持续的创新,Epitex逐渐在电子材料领域取得了突破。他们研发出了一种新型的电子封装材料,具有优异的耐热性和绝缘性能,迅速在市场上获得了认可。

问答坊 | AI 解惑

现场仪表系统常见故障的分析步骤

目前,随着石化、钢铁、造纸、食品、医药企业自动化水平的不断提高,对现场仪表维护人员的技术水平提出了更高要求。为缩短处理仪表故障时间,保证安全生产提高经济效益,本文发表一点仪表现场维护经验,供仪表维护人员参考。     一、现 ...…

查看全部问答>

AT91RM9200 ARM开发套件-工业级应用系统

在工业现场,工作环境恶劣,干扰因素多,因此嵌入式系统的可靠性至关重要,只有高可靠性才能保证系统的稳定运行。     北京恒颐致力于32位嵌入式计算、控制应用在工业控制行业的推广,为广大用户提供低功耗、小体积、高集成度、高可靠性 ...…

查看全部问答>

现代操作系统

现代操作系统(英文版.第2版) >Modern Operating Systems (3rd Edition) 作者: Andrew S. Tanenbaum         isbn: 0136006639         书名: Modern Operating Systems (3rd ...…

查看全部问答>

LPC1343的最新研究进展及心得

最近工作一直比较忙,没有及时发帖,不好意思了,今天把我这段时间的搞的小成果,给大家show一下,请大家多指教了。   首先那,先展示一下自己DIY的底板;见下图: 正面:     背面:   分开:     ...…

查看全部问答>

【资料集】C8051F320开发评估板资料

  F320 开发评估板使用说明书一 BT F320 开发评估板功能简介······································ 2二 BT F320 开发评估板范例程序详细说明······················ 3三 Sili ...…

查看全部问答>

大家用过91网(www.big91.com)没,强烈推荐.

有两上网址:http://www.big91.com http://big91.vicp.net(测试网址,更稳定)…

查看全部问答>

用waveInXXX()录音时media player没声音是怎么回事?

WinCE5.0环境, 录音机和media player都是正常的 但是先录音再用media player播放音乐时,media player没声音。 先media player播放音乐再录音也录不下什么声音。…

查看全部问答>

基于51系列单片机设计一个投币刷卡转换器

  基于51系列单片机及射频技术实现一个刷卡投币控制系统,采用mifare读卡头结合数码管显示。以mcu为控制核心,结合液晶显示技术,实现对mifare刷卡头及投币器的控制。   不知道从哪里下手,跪求高人指点!…

查看全部问答>

pwm波经驱动芯片后驱动mosfet需隔离

本帖最后由 paulhyde 于 2014-9-15 09:07 编辑 pwm波经驱动芯片后驱动mosfet需隔离吗       求大神解答  …

查看全部问答>

轿车着火或者溺水之后车门安全系统如何预警和自救?

  看到新闻上不断有报道轿车自燃之后乘客不能及时逃生,大暴雨也导致有驾驶员不幸在轿车中溺水身亡!很多朋友都提到这些事故中的致命汽车中控锁。中控锁是通过车辆总线来控制的,也是可以设置的,把中控设置成熄火后四门全部开锁,关键时刻可 ...…

查看全部问答>