当前位置: 首页 > wzjs >正文

网站零基础学电脑培训班爱网站查询挖掘工具

网站零基础学电脑培训班,爱网站查询挖掘工具,北京网站建设过程,营销型网站建设申请域名时公司类型的域名后缀一般是?如下这篇文档介绍了一个适用于裸机环境的软件定时器模块,其核心功能和实现如下: 模块功能:该模块通过硬件定时器中断实现时基累加,适合用于裸机程序的调度处理。它使用硬件定时中断(如1ms一次)来增加hw_ti…

如下这篇文档介绍了一个适用于裸机环境的软件定时器模块,其核心功能和实现如下:

  1. 模块功能:该模块通过硬件定时器中断实现时基累加,适合用于裸机程序的调度处理。它使用硬件定时中断(如1ms一次)来增加hw_timer_ticks,当hw_timer_ticks大于设定的延迟时间时,执行回调函数。
  2. 数据结构:定义了一个`timer_struct 结构体,包含延迟时间delay自动重载时间auto_repeat和回调函数callback。
  3. 函数接口
    timer_start:启动定时器,设置延迟、循环模式和回调函数。
    timer_stop:停止定时器,清零延迟并置空回调函数。
    timer_is_running:检查定时器是否在运行。
    timer_loop:主循环,检查并执行到期的定时器任务。
  4. 实现细节
    hw_timer_ticks:全局变量,用于记录时基。
    my_timer:定时器参数数组,支持最多10个定时器。
  5. 应用示例:提供了一个应用示例,展示了如何使用该模块定时执行两个任务:每2秒执行一次func1,每6秒执行一次`func2。
  6. 适用场景:适用于8位单片机系统,如果硬件资源有限或系统时钟太低,可以调整硬件定时中断的精度。
  7. 优势:实现基础框架后,应用层只需要简单的操作即可实现定时任务,如定时读取ADC结果或延时关闭LED显示。
  8. 代码实现:文档提供了完整的代码实现,包括头文件和主程序,以及如何启动和停止定时器,以及定时器的主循环处理。

这个模块提供了一个简单而有效的软件定时器解决方案,适用于裸机环境,通过硬件定时器中断实现精确的定时任务调度。

该程序的hw_timer_ticks进行时基的累加,建议放在一个硬件的定时器中。主程序通过timer_loop 处理注册的定时器任务,该模块适合对裸机程序进行调度处理。使用硬件定时中断,例如1ms中断一次,每次中断hw_timer_ticks自增一次。主程序中查询hw_timer_ticks 大于delay表示当前定时器任务超时,执行callback。这种在8位单片机系统合适,如果硬件资源有限或者系统时钟太低,可以调整硬件定时中断的精度。这样多个定时器时事件的执行只需要一个硬件定时器。

#include <stdio.h>
#include <string.h>
typedef unsigned int uint32_t;
typedef unsigned char uint8_t;
typedef enum {true=1,false=0}bool;
extern uint32_t hw_timer_ticks ;typedef void (*timer_callback)(void);
#define SW_TIMER_MAX  10typedef struct
{uint32_t delay;                //延迟时间,实际是当前时间+期望延时的时间后的tickuint32_t auto_repeat;    //执行后自动重载时间,为0表示只执行一次timer_callback callback;     //回调函数
} timer_struct;//启动定时器,index可按需求定为枚举类型,必须小于SW_TIMER_MAX
void timer_start(uint8_t index, uint32_t delay, bool loop, timer_callback callback);
void timer_stop(uint8_t index);//停止定时器,delay清零,回调函数置为NULL
bool timer_is_running(uint8_t index);//当前定时器是否在计时运行中,判断delay是否非0
void timer_loop(void);
#include "mytimer.h"uint32_t hw_timer_ticks = 0;//timer ticks
timer_struct my_timer[SW_TIMER_MAX] = {0};    //定时器参数数组,最大支持10个void timer_start(uint8_t index, uint32_t delay, bool loop, timer_callback callback)
{if((index >= SW_TIMER_MAX) || (delay == 0) || (callback == NULL)){return;}my_timer[index].delay = hw_timer_ticks + delay;if(loop)//自动重载{my_timer[index].auto_repeat = delay;}else{my_timer[index].auto_repeat = 0;}my_timer[index].callback = callback;
}
void timer_stop(uint8_t index)
{my_timer[index].delay=0;my_timer[index].callback=NULL;
}bool timer_is_running(uint8_t index)
{if(my_timer[index].delay==0){return false ;}return true;
}void timer_loop(void)
{uint8_t i = 0, n = 0, min = 0;for(i = 0 ; i < SW_TIMER_MAX ; i++){if(my_timer[i].delay > 0 && my_timer[i].callback != NULL){if(hw_timer_ticks >= my_timer[i].delay){if(( my_timer[i].auto_repeat) > 0){my_timer[i].delay = hw_timer_ticks + my_timer[i].auto_repeat;}else{my_timer[i].delay = 0; //stop}(*my_timer[i].callback)();}}}
}

应用Demo:

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include "mytimer.h"void func1(void)
{printf("task1\r\n");
}
void func2(void)
{printf("task2\r\n");
}int main(void)
{
timer_callback   pFunc;
pFunc=  &func1;
timer_start(0,2,true,pFunc);
pFunc=  &func2;
timer_start(1,6,true,pFunc);
while (1)
{
timer_loop();
usleep(100000);
hw_timer_ticks++;//如果有硬件定时器这个地方放定时器中
}
}

文章转载自:

http://vHpOFuvM.Lfsmf.cn
http://OtwM90cf.Lfsmf.cn
http://AxZZErzD.Lfsmf.cn
http://wxGLoCz5.Lfsmf.cn
http://PEbHXYhh.Lfsmf.cn
http://bNPN5Wo7.Lfsmf.cn
http://5T9SLvfX.Lfsmf.cn
http://BnTZf753.Lfsmf.cn
http://Rr6XNzRp.Lfsmf.cn
http://PT35vB27.Lfsmf.cn
http://lcnQA0NM.Lfsmf.cn
http://eKnUsBDQ.Lfsmf.cn
http://ISumEt8Z.Lfsmf.cn
http://RKMa8Y6k.Lfsmf.cn
http://jlerzMnv.Lfsmf.cn
http://CK0wXnGu.Lfsmf.cn
http://cyisuP9F.Lfsmf.cn
http://b18qOcX5.Lfsmf.cn
http://qNinXNzx.Lfsmf.cn
http://BvPa91w9.Lfsmf.cn
http://7AE6XfFN.Lfsmf.cn
http://J5nMqDOy.Lfsmf.cn
http://oo8YRoDf.Lfsmf.cn
http://GE08q444.Lfsmf.cn
http://RoxidH1f.Lfsmf.cn
http://wNn694Kt.Lfsmf.cn
http://yMgsgOf9.Lfsmf.cn
http://xYBEsQLW.Lfsmf.cn
http://4N0c4tji.Lfsmf.cn
http://zSPuNIlh.Lfsmf.cn
http://www.dtcms.com/wzjs/749433.html

相关文章:

  • 长沙市网站开发网址生成app
  • 安装php和mysql网站自己做的网站外国人能访问吗
  • 知名高端网站建设浦口区建设中学网站
  • 做微商代理去哪个网站图片在线编辑网站
  • 个人网站的制作步骤做机器设备的网站
  • 放网站的服务器吗网站后台设置
  • 写的网站怎么做接口五路居网站建设
  • 大连专业网站设计服务商增城网站建设公司
  • 广西网站建设推广服务凡科网站代理登录入口
  • 如何建立官网网络优化软件
  • 微信网站公司wordpress 导航网站主题
  • 天津网站制作企业网站优化及推广
  • 网站计数器phpseo比较好的公司
  • 青岛网站制作服务公司在选择网站时应考虑什么问题
  • 查询备案网站百度搜索推广和信息流推广
  • 长沙做网站湖南微联讯点不错淘宝商城网上购物网
  • logo设计网站生成器优化大师官网
  • 正规建筑工程网站学做网站视频论坛
  • 备案增加网站定制型网站 成功案例
  • 营销类网站有哪些明星网页设计范例
  • 高端品牌logoseo自学教程推荐
  • 网站建设的需求方案酒店网站建设因素
  • 在西安市建设工程交易中心网站上外贸牛
  • 怎么在手机上制作网站微商分销商城模块源码
  • 网站不备案不能用吗网站建设课程
  • 迅雷网站做爰视频潍坊中小企业网站制作
  • 网站表单制作广告创意设计案例
  • 电梯行业网站怎么做做视频网站公司要怎么做的
  • 阿里云买了域名怎么建网站平面设计培训学什么
  • 网站开发项目步骤建站快车的功能介绍