hubeiluhua 发表于 2025-7-5 10:26

主循环状态机框架

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;
      }
    }
}
页: [1]
查看完整版本: 主循环状态机框架