IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> [ESP32] cron库的使用 预约时间 freertos定时器 -> 正文阅读

[嵌入式][ESP32] cron库的使用 预约时间 freertos定时器

Cron表达式使用格式

SecondsMinutesHoursDayofMonth MonthDayofWeek[Year]

每个符号代表的含义:

  1. :匹配该域的任意值;如用在分所在的域,表示每分钟都会触发事件。
  2. ?:匹配该域的任意值。
  3. -:匹配一个特定的范围值;如时所在的域的值是10-12,表示10、11、12点的时候会触发事件。
  4. ,:匹配多个指定的值;如周所在的域的值是2,4,6,表示在周一、周三、周五就会触发事件(1表示周日,2表示周一,3表示周二,以此类推,7表示周六)。
  5. /:左边是开始触发时间,右边是每隔固定时间触发一次事件,如秒所在的域的值是5/15,表示5秒、20秒、35秒、50秒的时候都触发一次事件。
  6. L:last,最后的意思,如果是用在天这个域,表示月的最后一天,如果是用在周所在的域,如6L,表示某个月最后一个周五。(外国周日是星耀日,周一是月耀日,一周的开始是周日,所以1L=周日,6L=周五。)
  7. W:weekday,工作日的意思。如天所在的域的值是15W,表示本月15日最近的工作日,如果15日是周六,触发器将触发上14日周五。如果15日是周日,触发器将触发16日周一。如果15日不是周六或周日,而是周一至周五的某一个,那么它就在15日当天触发事件。
  8. #:用来指定每个月的第几个星期几,如6#3表示某个月的第三个星期五。
#include <string.h>
#include <stdbool.h>
#include "cron.h"
#include "jobs.h"
#include "appointment.h"

#define MAX_NUM            5

#define NEED_CHARG         1
#define OFF_CHARG          2

void task_start_cb_callback(cron_job *job)
{
    if (!cb_state)
    {
        start_cb();
    }
}

void task_stop_cb_callback(cron_job *job)
{
    if (cb_state)
    {
        stop_cb();
    }
}

namespace appointment
{
    cron_job * jobs[MAX_NUM * 2] = {0};
    AppoEntry appoentry[MAX_NUM] = {0};
    uint8_t valid_num            = 0;
    bool cb_state                = 0;                 // 0 --未充电      1 --充电
    uint8_t cb_set               = NULL;              // 0 --NULL  1 --需要充电   2--关闭充电
    void set(AppoEntry *entries, uint8_t num)
    {
        uint8_t buff[20] = {0};
        if (num > MAX_NUM || num == 0)
        {
            return;
        }
        memcpy(&appoentry[0], entries, sizeof(AppoEntry) * num);

        cron_stop();
        cron_job_clear_all();

        for (uint8_t i = 0; i < num * 2; i += 2)
        {
            sprintf_s(buff, 20, "0 %02d %02d * * *",
                     (uint8_t)(appoentry[i].start_cron >> 8), appoentry[i].start_cron & 0x00ff);
            jobs[i] = cron_job_create(buff, task_start_cb_callback, NULL);

            sprintf_s(buff, 20, "0 %02d %02d * * *",
                     (uint8_t)(appoentry[i].stop_cron >> 8), appoentry[i].stop_cron & 0x00ff);
            jobs[i+1] = cron_job_create(buff, task_stop_cb_callback, NULL);
        }
        valid_num = num;
        cron_start();
    }

    void get(AppoEntry *entries, uint8_t num)
    {
        if (num >= valid_num || num == 0)
        {
            return;
        }
        memcpy(entries, &appoentry[0], sizeof(AppoEntry) * num);
    }

    void clear()
    {
        cron_stop();
        cron_job_clear_all();
        memset(&appoentry[0], 0, sizeof(AppoEntry) * MAX_NUM);
        valid_num = 0;
    }
}

实用的例子 表达式 含义

  • “0 0 12 * * ?” 每天12:00触发事件
  • “0 15 10 ? * *” 每天10:15触发事件
  • “0 15 10 * * ?” 每天10:15触发事件
  • “0 15 10 * * ? *” 每天10:15触发事件
  • “0 15 10 * * ? 2005″ 2005年的每天10:15触发事件
  • “0 * 14 * * ?” 每天14点开始触发,每分钟触发一次,14:59分结束
  • “0 0/5 14 * * ?” 每天14点开始触发到14:59分结束的每5分钟触发一次事件
  • “0 0/5 14,18 * * ?” 每天14点开始到14:59期间和18点到18:59期间的每5分钟触发一次事件
  • “0 0-5 14 * * ?” 每天14点到14:05期间的每1分钟触发一次事件
  • “0 10,44 14 ? 3 WED” 每年3月的星期三的14:10和14:44触发一次事件
  • “0 15 10 ? * MON-FRI” 周一至周五的10:15触发一次事件
  • “0 15 10 15 * ?” 每月15日10:15触发一次事件
  • “0 15 10 L * ?” 每月最后一日的10:15触发一次事件
  • “0 15 10 ? * 6L” 每月的最后一个星期五10:15触发一次事件
  • “0 15 10 ? * 6L 2002-2005″ 2002年至2005年的每月的最后一个星期五10:15触发一次事件
  • “0 15 10 ? * 6#3″ 每月的第三个星期五10:15触发一次事件
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-04-23 11:00:36  更:2022-04-23 11:01:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:33:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码