#include "app.h" #include "board.h" #include "flow.h" #include "key.h" #include "work.h" static struct flow business_fw; // 业务流程 static struct flow idle_fw; // 空闲任务 app_t app; static uint8_t business_inspection(struct flow *fl) { FL_HEAD(fl); for (;;) { switch (work.type) { case WORK_PWM_MAP: ssd1306_clear_buffer(); ssd1306_f8x16_string(0, 0, " PERCENT:"); ssd1306_f8x16_number(88, 0, work.pwm_percent, 0); ssd1306_update_screen(); break; case WORK_MOTOR_POS: ssd1306_clear_buffer(); ssd1306_f8x16_string(0, 0, " TAR:"); ssd1306_f8x16_number(48, 0, work.target_pos, 1); ssd1306_f8x16_string(0, 2, " CUR:"); ssd1306_f8x16_number(48, 2, work.encoder_cnt, 1); ssd1306_update_screen(); break; case WORK_MOTOR_SPEED: /* code */ break; default: break; } FL_LOCK_DELAY(fl, FL_CLOCK_100MSEC); } FL_TAIL(fl); } /** * @brief 对流量进行空闲检查 * * 该函数会对传入的流量结构体进行空闲检查。 * * @param fl 指向流量结构体的指针 * * @return 返回值始终为0,该函数不返回实际值 */ static uint8_t idle_inspection(struct flow *fl) { FL_HEAD(fl); for (;;) { GPIO_TOGGLE(LED_BLUE_GPIO_Port, LED_BLUE_Pin); FL_LOCK_DELAY(fl, FL_CLOCK_SEC); } FL_TAIL(fl); } /** * @brief 运行应用程序 * * 该函数用于启动应用程序的运行。 * * @details 此函数会调用 idle_inspection 函数,传入 idle_fw 作为参数。 * idle_inspection 函数的具体作用需参考其实现细节。 */ void app_run(void) { business_inspection(&business_fw); // 业务流程检测 idle_inspection(&idle_fw); } /** * @brief 初始化应用程序 * * 初始化应用程序,包括启动空闲任务。 */ void app_init(void) { key_init(); work_init(); FL_INIT(&business_fw); // 业务流程 FL_INIT(&idle_fw); // 空闲任务 ENABLE_TIM(TASK_TIM); ENABLE_TIM(WORK_TIM); }