組み込みプログラミングの世界

今の会社では今年から組み込みシステムの仕事をやり始めているが、最初からまったくの新規でプログラムを作成するということはなく、今のところ既存プログラムの修正という形で仕事に入り始めている。

やり始めて思ったのだけど、とにかくドキュメントが少ない。

依頼元の会社から提供されるのはほとんどソースコードとHWの仕様書のみで、ソフトウェアの構造に関するものはほとんど無いため、構造に関しては自分で調べることになる。
自分の場合は、ハードウェアがらみのシステムにかかわっていたこともあり、「大体こんな構造だろう」と予想はしていたのである程度あたりはつくのだが、まったく経験の無い人(または、業務システム構築の経験しかない人)がこの分野に入ると最初は戸惑ってしまうだろう。

以下、組み込みシステムで特徴的な部分(ソースを読む前に知っておいてよかった点)についてメモ。時間があるときにもう少し詳しく調べてみよう。

  • 「タスク」という処理単位の概念がある。各タスクはシステム動作中に並行して動作しており、メッセージを受けて何らかの処理を実行するイベントドリブン型の動作を行う。
  • コア(OS)の部分は上記の「タスク」が複数登録され、ハードウェアの状態変化を読み取り、必要なタスクにメッセージを送信する役割を果たす。
  • 各タスクは状態を持ち、状態と受信するメッセージによって決まる何らかの動作を行い、次状態へ遷移する。この関係をあらわした表を「状態遷移マトリクス」と呼ぶ。(なぜかこの表だけはたいていドキュメントとして存在する)
  • セマフォ」という排他制御のための仕組みがある。(たぶん複数のタスクからアクセスされるデバイスの制御に使用すると思うんだけど、まだよく知らない)

ふと今思ったんだけど、WindowsLinuxも同じような構造をしているんだろうな。今までLinuxとかのソースコードは覗いてみる気にもならなかったんだけど、少しハードルが低くなったような気がした。