#ifndef SYS_INITIAL_H #define SYS_INITIAL_H #include #include /** * @brief 应用初始化器:按固定顺序启动模块,成功位置 1,末尾汇总。 */ class AppInitializer { public: /** 启动模块位(成功置 1) */ enum ModuleBit : uint32_t { kNvic = 1u << 0, kSysTick = 1u << 1, kEsp32Hold = 1u << 2, kUsart0 = 1u << 3, kAdc = 1u << 4, kCanFd = 1u << 5, kOtaBootReq = 1u << 6, kAppSpi = 1u << 7, kTaskManager = 1u << 8, kScheduler = 1u << 9, kEthercat = 1u << 10, kEthercatSync = 1u << 11, kWatchdog = 1u << 12, }; /** * @brief 按固定顺序完成模块初始化(过程只置位,结束统一报告成败/失败模块)。 */ static void init(); private: static uint32_t s_mask; static void mark(ModuleBit b); static void report(); }; #endif /* SYS_INITIAL_H */