历史上的今天
今天是: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处,而且偶尔还容易忘记.
史海拾趣
|
目前,随着石化、钢铁、造纸、食品、医药企业自动化水平的不断提高,对现场仪表维护人员的技术水平提出了更高要求。为缩短处理仪表故障时间,保证安全生产提高经济效益,本文发表一点仪表现场维护经验,供仪表维护人员参考。 一、现 ...… 查看全部问答> |
|
在工业现场,工作环境恶劣,干扰因素多,因此嵌入式系统的可靠性至关重要,只有高可靠性才能保证系统的稳定运行。 北京恒颐致力于32位嵌入式计算、控制应用在工业控制行业的推广,为广大用户提供低功耗、小体积、高集成度、高可靠性 ...… 查看全部问答> |
|
最近工作一直比较忙,没有及时发帖,不好意思了,今天把我这段时间的搞的小成果,给大家show一下,请大家多指教了。 首先那,先展示一下自己DIY的底板;见下图: 正面: 背面: 分开: ...… 查看全部问答> |
|
F320 开发评估板使用说明书一 BT F320 开发评估板功能简介······································ 2二 BT F320 开发评估板范例程序详细说明······················ 3三 Sili ...… 查看全部问答> |
|
用waveInXXX()录音时media player没声音是怎么回事? WinCE5.0环境, 录音机和media player都是正常的 但是先录音再用media player播放音乐时,media player没声音。 先media player播放音乐再录音也录不下什么声音。… 查看全部问答> |
|
基于51系列单片机及射频技术实现一个刷卡投币控制系统,采用mifare读卡头结合数码管显示。以mcu为控制核心,结合液晶显示技术,实现对mifare刷卡头及投币器的控制。 不知道从哪里下手,跪求高人指点!… 查看全部问答> |
|
看到新闻上不断有报道轿车自燃之后乘客不能及时逃生,大暴雨也导致有驾驶员不幸在轿车中溺水身亡!很多朋友都提到这些事故中的致命汽车中控锁。中控锁是通过车辆总线来控制的,也是可以设置的,把中控设置成熄火后四门全部开锁,关键时刻可 ...… 查看全部问答> |




