KDocs 研发资料库
  • 手表穿戴技术应用文档入口汇总
  • JL707N穿戴客述问题FAQ
  • 彩屏仓 硬件开发指南 与 量产作业流程规范
  • 彩屏仓 AC98N和JL701烧录升级注意事项
  • JL707 硬件开发资料
  • JL707 手表硬件设计注意事项 总结
  • 穿戴生产烧录OTA和key文件添加使用说明
  • JL707N-入门到进阶开发指导文档
  • 彩屏仓982相关
  • 彩屏仓耳机介绍
  • 杰理701_707双屏demo介绍
  • 707电子吧唧开发资料
  • GPIO相关
  • UART串口相关
  • SPI相关
  • nandflash相关
  • norflash相关
  • IIC相关
  • PWM相关
  • SD卡相关
  • 定时器TIMER
  • 文件系统接口设计说明文档
  • 音视频录像开发流程
  • rdec编码器
  • 穿戴功耗数据标准
  • 手表蓝牙开发文档
  • 701蓝牙PAN联网demo
  • BLE开发使用说明
  • 701手表2.0.0版本SDK EQ在线调试和离线调试方法 V1.1
  • JL707 手表喇叭输出声音大小评估方法 V1.0
  • JL707 手表音频EQ调试方法 V1.0
  • AC707N 手表通话写卡 软件配置方法
  • 录音功能
  • 701手表2.X.X系列SDK调试EQ配置方法及音频调试技巧V1.1
  • 701手表104版本SDK EQ在线调试和离线调试方法 V1.1
  • mic2dac示例
  • P11 SensorHub相关
  • 手表升级操作文档
  • AC707NGPU
  • DBI模块介绍
  • GPU模块介绍
  • 701N屏幕驱动配置说明
  • 701N_UI编辑工具用户手册
  • 支付宝资料
  • 支付宝硬件接入资料
  • 支付宝乘车码接入资料
  • CAT1 接入文档
  • 701N_WATCH_CAT1开发说明
  • Findmy功能
  • music模式相关
  • 707电池曲线
  • 707N内置FLASH挂载FAT文件系统251112_v1.2
  • AC707N_本地视频播放demo(AVI-MJPEG-PCM)
  • 光波导屏幕调试
  • 耳机研发和生产流程 指南
  • 707-NandFlash 代码和UI资源独立烧录方案
  • 彩屏仓时间同步补丁
  • 彩屏仓抖音点赞移植
  • 707LVGLv8双屏开发
  • 707N蓝牙互传图传demo
  • AVIPCM数据流接入AIVOICE
  • Flash分区操作demo
  • 手表发射问题
  • 701_707 双备份升级DEMO
  • 707_乘车码刷码失败问题_共性

定时器TIMER

📎 原始文档:https://www.kdocs.cn/l/cinMiNbyLmRw 定时器TIMER

  1. 定时器TIMER 定义 定时器功能主要是用作定时周期轮训处理,分为周期性和非周期性两种,下面介绍两种定时器的接口和使用。
  2. 定时器接口定义 定时器的id 必须是u16或者int/u32的类型,不能为char /u8的类型,否则会出现id 范围错误,会变成其他的id ,影响其他定时器id的功能。
/* *****************************
该定时器属于系统轮训定时器。
sys_timer_add 和sys_timer_del
需要成对使用,sys_timer_modify是
修改对应id的延时因子函数;改定时器为
周期性轮询,在不使用的时候需要通过id
删除对应的定时器功能,否则会一直存在。

<该定时器计时准确,但是会有功耗消耗>
****************************** */
u16 sys_timer_add(void *priv, void (*func)(void *priv), u32 msec);
void sys_timer_del(u16);
/* *****************************
该定时器在周期内只会执行一次。
sys_timeout_add 和sys_timeout_del
需要成对使用,sys_timer_modify是
修改对应id的延时因子函数;改定时器在定时
到来时只会执行一次,不会重复轮训,id 根据
实际看是否需要。
<该定时器计时准确,但是会有功耗消耗>
****************************** */
u16 sys_timeout_add(void *priv, void (*func)(void *priv), u32 msec);
void sys_timeout_del(u16);
void sys_timer_re_run(u16 id);//重新跑定时器
int sys_timer_modify(u16 id, u32 msec);// 修改定时器的延时因子

/* *****************************
该定时器属于中断类型,最后的优先级
priority配置代表是否能让系统进入低
功耗,进入低功耗后这个定时器的周期
是根据蓝牙心跳来决定,不是定时的周期。
usr timer add 和usr_timer del
需要成对使用,usr_timer_modify是
修改对应id的延时因子函数;改定时器为
周期性轮询,在不使用的时候需要通过id
删除对应的定时器功能,否则会一直存在。
****************************** */
u16 usr_timer_add(void *priv, void (*func)(void *priv), u32 msec, u8 priority);
int usr_timer_modify(u16 id, u32 msec);
void usr_timer_del(u16 id);

/* *******************************
usr_timeout_add 和usr_timeout_del
需要成对使用,usr_timeout_modify是
修改对应id的延时因子函数;改定时器在定时
到来时只会执行一次,不会重复轮训,id 根据
实际看是否需要。
******************************* */
u16 usr_timeout_add(void *priv, void (*func)(void *priv), u32 msec, u8 priority);
int usr_timeout_modify(u16 id, u32 msec);
void usr_timeout_del(u16 id);

三、定时器使用demo

1、sys_timer_add使用demo

//定时器周期函数
static void sys_timer_test(void)
{
    static u16 cnt  = 0;
    cnt++;
    printf("%s,cnt = %d\n",__func__,cnt);
}
int user_sys_timer_id = 0;//定时器id ,必须u16类型以上
//添加定时器
void user_sys_timer_add_test(void)
{
    if(!user_sys_timer_id){
        user_sys_timer_id = sys_timer_add(NULL,sys_timer_test,1000);
    }
}
//删除定时器
void user_del_sys_timer_test(void)
{
    if(user_sys_timer_id){
        sys_timer_del(user_sys_timer_id);
        user_sys_timer_id = 0;
    }
}
//修改定时器周期
void user_sys_timer_modify(u32 mes)
{
    if(user_sys_timer_id){
        sys_timer_modify(user_sys_timer_id,mes);
    }
}

2、sys_timeout使用demo

//定时器回调
static void sys_timeout_test(void)
{
    static u16 cnt  = 0;
    cnt++;
    printf("%s,cnt = %d\n",__func__,cnt);
}
int user_sys_timeout_id = 0;//定时器id ,必须u16类型以上
//定时器添加
void user_sys_timeout_add_test(void)
{
    if(!user_sys_timeout_id){
        user_sys_timeout_id = sys_timeout_add(NULL,sys_timeout_test,1000);
    }
}
//定时器删除
void user_del_sys_timeout_test(void)
{
    if(user_sys_timeout_id){
        sys_timer_del(user_sys_timeout_id);
        user_sys_timeout_id = 0;
    }
}
//修改定时器周期
void user_sys_timer_modify(u32 mes)
{
    if(user_sys_timeout_id){
        usr_timeout_modify(user_sys_timeout_id,mes);
    }
}

3、usr_timer 使用demo

//定时器回调
static void sys_usr_timer_add_test(void)
{
    static u16 cnt  = 0;
    cnt++;
    printf("%s,cnt = %d\n",__func__,cnt);
}
int usr_timer_add_id = 0;//定时器id ,必须u16类型以上
//定时器添加
void user_usr_timer_add_test(void)
{
    if(!usr_timer_add_id){
        usr_timer_add_id = usr_timer_add(NULL,sys_usr_timer_add_test,1000,0);
    }
}
//定时器删除
void user_del_usr_timer_add_test(void)
{
    if(usr_timer_add_id){
        usr_timer_del(usr_timer_add_id);
        usr_timer_add_id = 0;
    }
}
//修改定时器周期
void user_usr_timer_modify(u32 mes)
{
    if(usr_timer_add_id){
        usr_timer_modify(usr_timer_add_id,mes);
    }
}

4、usr_timeout 使用

//定时器回调
static void sys_usr_timeout_add_test(void)
{
    static u16 cnt  = 0;
    cnt++;
    printf("%s,cnt = %d\n",__func__,cnt);
}
int usr_timeout_add_id = 0;//定时器id ,必须u16类型以上
//定时器添加
void user_sys_timeout_add_test(void)
{
    if(!usr_timeout_add_id){
        usr_timeout_add_id = usr_timer_add(NULL,sys_usr_timeout_add_test,1000,0);
    }
}
//定时器删除
void user_del_usr_timeout_add_test(void)
{
    if(usr_timeout_add_id){
        usr_timeout_del(usr_timeout_add_id);
        usr_timeout_add_id = 0;
    }
}
//修改定时器周期
void user_usr_timeout_modify(u32 mes)
{
    if(usr_timeout_add_id){
        usr_timeout_modify(usr_timeout_add_id,mes);
    }
}
Prev
SD卡相关
Next
文件系统接口设计说明文档