This commit is contained in:
2026-01-30 17:04:39 +08:00
parent b94a28aacf
commit ef112855bf
30 changed files with 2786 additions and 4505 deletions

View File

@@ -0,0 +1,195 @@
#include "app_timer.h"
#include "app.h"
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
static void app_timer_task(void);
static void app_timer_init(u8 task_num, app_timer_class_t *p_timer_class);
static void app_timer_task_increment_int(u16 ms_tick);
/******************************************
* <20><EFBFBD><E1B9B9>: app_timer
* <20><><EFBFBD><EFBFBD>: Ӧ<>ö<EFBFBD>ʱ<EFBFBD><CAB1>ʵ<EFBFBD><CAB5>
* <20><><EFBFBD><EFBFBD>: <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ƽ<C6BD><E1B9B9><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>ʵ<EFBFBD><CAB5>
*******************************************/
app_timer_t app_timer =
{
.p_timer_class = NULL,
.init = app_timer_init,
.task = app_timer_task,
.increment_int = app_timer_task_increment_int,
};
/* ȫ<><C8AB>ָ<EFBFBD>룬ָ<EBA3AC><D6B8><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><E1B9B9> */
app_timer_t *p_app_timer = &app_timer;
/******************************************
* <20><><EFBFBD><EFBFBD>: app_timer_init
* <20><><EFBFBD><EFBFBD>: <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
* <20><><EFBFBD><EFBFBD>: task_num - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* p_timer_class - <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* <20><><EFBFBD><EFBFBD>: <20><>
* <20><><EFBFBD><EFBFBD>: <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************/
static void app_timer_init(u8 task_num, app_timer_class_t *p_timer_class)
{
p_app_timer->task_num = task_num;
p_app_timer->p_timer_class = p_timer_class;
}
/******************************************
* <20><><EFBFBD><EFBFBD>: app_timer_task
* <20><><EFBFBD><EFBFBD>: <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>: <20><>
* <20><><EFBFBD><EFBFBD>: <20><>
* <20><><EFBFBD><EFBFBD>: ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѵ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************/
static void app_timer_task(void)
{
u16 i;
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ч */
if(NULL == p_app_timer->p_timer_class)
{
return;
}
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
for (i = 0; i < p_app_timer->task_num; i++)
{
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫִ<D2AA><D6B4> */
if (p_app_timer->p_timer_class[i].run_flag)
{
p_app_timer->p_timer_class[i].run_flag = 0; /* <20><><EFBFBD><EFBFBD>ִ<EFBFBD>б<EFBFBD>־ */
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ч */
if (p_app_timer->p_timer_class[i].task == NULL)
{
continue;
}
/* ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
p_app_timer->p_timer_class[i].task();
}
}
}
/******************************************
* <20><><EFBFBD><EFBFBD>: app_timer_task_increment_int
* <20><><EFBFBD><EFBFBD>: <20>жϵ<D0B6><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>: ms_tick - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>: <20><>
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD>ж<EFBFBD><D0B6>е<EFBFBD><D0B5>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ƭ
*******************************************/
static void app_timer_task_increment_int(u16 ms_tick)
{
u16 i;
/* <20><><EFBFBD>º<EFBFBD><C2BA><EFBFBD><EBBCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
p_app_timer->ms_tick++;
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBBCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if(p_app_timer->ms_tick >= 1000)
{
p_app_timer->s_tick++;
}
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ч */
if(NULL == p_app_timer->p_timer_class)
{
return;
}
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
for (i = 0; i < p_app_timer->task_num; i++)
{
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ч */
if (p_app_timer->p_timer_class[i].timer_count)
{
p_app_timer->p_timer_class[i].timer_count--;
/* <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ񵽴<C7B7><F1B5BDB4><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>ʱ<EFBFBD><CAB1> */
if (p_app_timer->p_timer_class[i].timer_count == 0)
{
p_app_timer->p_timer_class[i].run_flag = 1;
p_app_timer->p_timer_class[i].timer_count = p_app_timer->p_timer_class[i].timer_reload;
}
}
}
}
/******************************************
* <20><><EFBFBD><EFBFBD>: app_timer_check_time_out
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD>鳬ʱ
* <20><><EFBFBD><EFBFBD>: time_start - <20><>ʱ<EFBFBD><CAB1>ʼʱ<CABC><CAB1>
* time_now - <20><>ǰʱ<C7B0><CAB1>
* time_out - <20><>ʱʱ<CAB1><CAB1>
* <20><><EFBFBD><EFBFBD>: TIME_TRUE - <20>ѳ<EFBFBD>ʱ<EFBFBD><CAB1>TIME_FALSE - δ<><CEB4>ʱ
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>time_start<72><74>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>time_outʱ<74><CAB1><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ʱ<EFBFBD><CAB1>
* <20><><EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************/
u8 app_timer_check_time_out(u16 time_start, u16 time_now, u16 time_out)
{
u16 timer_activate_val;
/* <20><><EFBFBD><EFBFBD><E3B4A5>ʱ<EFBFBD><CAB1> */
timer_activate_val = time_out + time_start;
/* <20><><EFBFBD>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if (timer_activate_val > time_start)
{
/* δ<><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if ((time_now >= timer_activate_val) || (time_now < time_start))
{
return TIME_TRUE;
}
}
else if ((time_now >= timer_activate_val) && (time_now < time_start))
{
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>ǰʱ<C7B0><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
return TIME_TRUE;
}
return TIME_FALSE;
}
/******************************************
* <20><><EFBFBD><EFBFBD>: app_timer_check_run_time
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
* <20><><EFBFBD><EFBFBD>: time_start - <20><>ʱ<EFBFBD><CAB1>ʼʱ<CABC><CAB1>
* time_now - <20><>ǰʱ<C7B0><CAB1>
* time_out - <20><>ʱʱ<CAB1><CAB1>
* <20><><EFBFBD><EFBFBD>: ʣ<><CAA3>ʱ<EFBFBD><EFBFBD><E4A3A8><EFBFBD>
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD>app_timer_check_time_out<75><74><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>볬ʱ<EBB3AC><CAB1><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>ʱ<EFBFBD><EFBFBD><E4A3AC><EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************/
u16 app_timer_check_run_time(u16 time_start, u16 time_now, u16 time_out)
{
u16 timer_activate_val;
/* <20><><EFBFBD><EFBFBD><E3B4A5>ʱ<EFBFBD><CAB1> */
timer_activate_val = time_out + time_start;
/* <20><><EFBFBD>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if (timer_activate_val > time_start)
{
/* δ<><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD>ʣ<EFBFBD><CAA3>ʱ<EFBFBD><CAB1> */
return (timer_activate_val - time_now);
}
else
{
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3>ʱ<EFBFBD><CAB1> */
return (65535U - time_now + timer_activate_val);
}
}
/******************************************
* <20><><EFBFBD><EFBFBD>: delay_ms
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>ʱ
* <20><><EFBFBD><EFBFBD>: delay - <20><>ʱʱ<CAB1><EFBFBD><E4A3A8><EFBFBD>
* <20><><EFBFBD><EFBFBD>: <20><>
* <20><><EFBFBD><EFBFBD>: ʹ<><CAB9>HAL<41><4C><EFBFBD><EFBFBD><E1B9A9><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>ʱ
*******************************************/
void delay_ms(u16 delay)
{
HAL_Delay(delay);
}