volatile u32 sys_tick;
u32 last_time;
typedef enum {
ST_INIT,
ST_RUNNING,
ST_WAIT,
ST_ERROR
} SysState_t;
SysState_t sys_state = ST_INIT;
void SysTick_Handler(void) {
sys_tick++;
}
int main(void) {
u32 now_time;
while (1) {
now_time = sys_tick;
switch (sys_state) {
case ST_INIT:
// 初始化操作
printf("System Init\n");
sys_state = ST_RUNNING;
last_time = now_time;
break;
case ST_RUNNING:
if (now_time - last_time >= 1000) { // 1秒逻辑
printf("Running...\n");
last_time = now_time;
sys_state = ST_WAIT;
}
break;
case ST_WAIT:
if (now_time - last_time >= 2000) { // 等待2秒
printf("Back to Running\n");
last_time = now_time;
sys_state = ST_RUNNING;
}
break;
case ST_ERROR:
// 错误处理
break;
default:
sys_state = ST_INIT;
break;
}
}
}
|