組み込みまするβ

組み込みソフトウェア初学者向けブログ

設計

シングルタスクの考え方

組み込みソフト技術者の新人研修 - 組み込みまするβの内容の一つに、交通信号機の開発というものがあります。 この開発でシングルタスクのプログラムを作成する上での重要なことを学習してもらうのですが、 その考え方を記事にしてみました。 なお、シングル…

組み込みソフト版Chronoを作成する

フリーランカウンタを利用した時間経過待ち、タイムアウト判定と時間計測の仕組みは以前の記事で説明していますので、 本記事ではそれをサービスとして提供するコンポーネント(Chrono)を作成します。 時間に関するサービスを提供するコンポーネントはシン…

組み込みソフトウェアのメモリアロケータ

組み込みソフトウェアの設計ルールは会社組織やプロジェクトによって様々だが、 メモリアロケータに関して使用禁止、もしくはプログラムの初期化以後は使用禁止という場合が多いと思う。 これはOSレスやuITRON系のような小~中規模システムだけでなく、 大規…

タスクスイッチのコスト

マルチタスク環境において、何かの待ちや定期処理の実行後は sleepやセマフォ待ち等で間接的に他のタスクへスイッチさせ、CPUの処理能力を有効に活用していると思いますが、 待ちがあるからと安易にタスクスイッチさせてしまうと非効率な動作となる場合があ…

フリーランカウンタで時間サービスを実現する

現実世界における時計の使われ方をイメージしてみましょう。 学校や公園、駅等の大きな時計を例として、ある人が2時17分から30分待ちたい場合、2時47分(厳密には2時48分)になるまで待つことになります。 起点となる時刻"2時17分"を憶えておいて、 (現在時…

時間経過を待つ

組み込みソフトウェアで時間経過を待つにはどうしたらよいでしょうか。 組み込みOSを採用している場合は所謂sleep系関数、あるいは開発環境でwait、delay等の関数ライブラリが用意されていることもあります。 ですがOSレスかつ関数ライブラリも用意されてい…

C++版デバイスドライバのclassと割り込み関数

C++で作成された組み込みソフトウェアのデバイスドライバの実装を見ると、 デバイスドライバのclassとは別に割り込み関数が独立しているケースが多いです。 ですが凝集度やカプセル化、マルチインスタンスへの対応を考えると、 割り込み関数をデバイスドライ…