14inline constexpr etl::fsm_state_id_t
kUnInit = 0;
15inline constexpr etl::fsm_state_id_t
kReady = 1;
16inline constexpr etl::fsm_state_id_t
kRunning = 2;
18inline constexpr etl::fsm_state_id_t
kBlocked = 4;
19inline constexpr etl::fsm_state_id_t
kExited = 5;
20inline constexpr etl::fsm_state_id_t
kZombie = 6;
35struct StateUnInit :
public etl::fsm_state<etl::fsm, StateUnInit,
36 TaskStatusId::kUnInit, MsgSchedule> {
41 klog::Warn(
"TaskFsm: UnInit received unexpected message id={}",
42 static_cast<int>(msg.get_message_id()));
50struct StateReady :
public etl::fsm_state<etl::fsm, StateReady,
51 TaskStatusId::kReady, MsgSchedule> {
56 klog::Warn(
"TaskFsm: Ready received unexpected message id={}",
57 static_cast<int>(msg.get_message_id()));
66 :
public etl::fsm_state<etl::fsm, StateRunning, TaskStatusId::kRunning,
67 MsgYield, MsgSleep, MsgBlock, MsgExit> {
84 klog::Warn(
"TaskFsm: Running received unexpected message id={}",
85 static_cast<int>(msg.get_message_id()));
94 :
public etl::fsm_state<etl::fsm, StateSleeping, TaskStatusId::kSleeping,
100 klog::Warn(
"TaskFsm: Sleeping received unexpected message id={}",
101 static_cast<int>(msg.get_message_id()));
110 TaskStatusId::kBlocked, MsgWakeup> {
115 klog::Warn(
"TaskFsm: Blocked received unexpected message id={}",
116 static_cast<int>(msg.get_message_id()));
125 TaskStatusId::kExited, MsgReap> {
128 klog::Warn(
"TaskFsm: Exited received unexpected message id={}",
129 static_cast<int>(msg.get_message_id()));
138 TaskStatusId::kZombie, MsgReap> {
143 klog::Warn(
"TaskFsm: Zombie received unexpected message id={}",
144 static_cast<int>(msg.get_message_id()));
163 auto Receive(
const etl::imessage& msg) ->
void {
fsm_.receive(msg); }
170 return fsm_.get_state_id();
TaskFsm(const TaskFsm &)=delete
etl::ifsm_state * state_list_[7]
TaskFsm(TaskFsm &&)=delete
auto Receive(const etl::imessage &msg) -> void
向 FSM 发送消息
auto operator=(TaskFsm &&) -> TaskFsm &=delete
StateZombie state_zombie_
StateUnInit state_uninit_
StateRunning state_running_
auto Start() -> void
启动 FSM(在 TCB 完全构造后调用)
auto operator=(const TaskFsm &) -> TaskFsm &=delete
StateExited state_exited_
StateBlocked state_blocked_
auto GetStateId() const -> etl::fsm_state_id_t
获取当前状态 ID
StateSleeping state_sleeping_
任务状态 ID — 用作 etl::fsm 的状态 ID
constexpr etl::fsm_state_id_t kExited
constexpr etl::fsm_state_id_t kUnInit
constexpr etl::fsm_state_id_t kReady
constexpr etl::fsm_state_id_t kZombie
constexpr etl::fsm_state_id_t kSleeping
constexpr etl::fsm_state_id_t kBlocked
constexpr etl::fsm_state_id_t kRunning
auto Warn(etl::format_string< Args... > fmt, Args &&... args) -> void
以 WARN 级别记录日志
auto on_event_unknown(const etl::imessage &msg) -> etl::fsm_state_id_t
auto on_event(const MsgWakeup &) -> etl::fsm_state_id_t
auto on_event_unknown(const etl::imessage &msg) -> etl::fsm_state_id_t
auto on_event(const MsgReap &) -> etl::fsm_state_id_t
auto on_event(const MsgSchedule &) -> etl::fsm_state_id_t
auto on_event_unknown(const etl::imessage &msg) -> etl::fsm_state_id_t
auto on_event_unknown(const etl::imessage &msg) -> etl::fsm_state_id_t
auto on_event(const MsgYield &) -> etl::fsm_state_id_t
auto on_event(const MsgBlock &) -> etl::fsm_state_id_t
auto on_event(const MsgExit &msg) -> etl::fsm_state_id_t
auto on_event(const MsgSleep &) -> etl::fsm_state_id_t
Sleeping 状态 — 任务已挂起,等待唤醒时钟
auto on_event(const MsgWakeup &) -> etl::fsm_state_id_t
auto on_event_unknown(const etl::imessage &msg) -> etl::fsm_state_id_t
auto on_event_unknown(const etl::imessage &msg) -> etl::fsm_state_id_t
auto on_event(const MsgSchedule &) -> etl::fsm_state_id_t
Zombie 状态 — 任务已退出,等待父任务回收
auto on_event_unknown(const etl::imessage &msg) -> etl::fsm_state_id_t
auto on_event(const MsgReap &) -> etl::fsm_state_id_t