この投稿では、状態遷移時における静的変数の初期値について説明したいと思います。
組込みソフトウェアの静的変数の初期値は、通常、Power On Reset時に設定されます。しかし、組込みシステムでは、下図のようにハードウェアやソフトウェアの状態が遷移する際に、それぞれの状態に応じた初期値の設定が求められる場合があります。
C言語の静的変数の初期値設定は、下図 E1(S1)の時に設定します。E2~E10は、アプリケーション層の各コンポーネントで初期値設定することが多いと思います。状態遷移をコンポーネント単位で判定して実行するのはコンポーネントが複雑になりやすく、バグの作り込み原因にも繋がります。状態遷移判定と状態遷移時の静的変数の初期設定、状態毎のコンポーネント実行は、準RTOSサービスとして作ることをお勧めします。
C言語の静的変数の初期値は、下図のE1(S1)のタイミングで設定します。一方、E2~E10では、アプリケーション層の各コンポーネントで初期値を設定するケースが多いと思われます。状態遷移をコンポーネント単位で判定・実行すると、コンポーネントが複雑化しやすく、バグの原因にもなりかねません。そのため、状態遷移の判定や、遷移時の静的変数の初期化、状態ごとのコンポーネント実行は、準RTOSサービスとして実装することをお勧めします。