【組込みOS開拓史 PART1】組込みOSはじめます。
『組込みOS自作入門』*1という本を2017年の8月から読んでいる。組込みエンジニアとしてのスタートをきった直後、何か作ってみたいとやる気に溢れて購入した。全12章のうち1章~4章くらいまで意気揚々と読んでいたものの、割込みを扱う7章くらいから理解に急ブレーキがかかり、何もかも分からなくなって、大いに挫折した。
その後、何章が読んでは別な本やゲームに気を取られて中断し、内容を忘れて読み進められなくなることが続いていた。今年の夏休みに一念発起して1章から腰を据えて取り組んだが、やっぱり割込みの章で難しくなって辞めてしまった。その時、1年前と比べて何も成長していなんじゃないかと不安になった。組込みの門をいつまでもくぐれない。
本を1ページずつ読み進めているから駄目なんじゃないか。本の説明は分かりやすいけど、覚えておくことが多いので、何日か経つと半分以上は忘れてしまい、いつも思い出すことから始めなければいけなくなる。いっそのこと、自分で作る(という体をとる)ことにしよう。
■要件定義
【要求1】組込みOSを自作する
要件1. 割込みによる文字列の受信処理を行う。
要件2. 優先度つきマルチタスクで動かす。
要件3. タイマ割込みを使ってストップウォッチのようなものを作る
【要求2】OSが起動するまでの処理を自作する。
要件1. ブートローダーを使用してRAM上でプログラムを動かす。
要件2. メモリ領域を設計する。
要件3. ライブラリ関数を自作する。
基本的には『組み込みOS入門』の内容を全部やりたいと思っている。ただ、ソースコードを(可能な限り)MISRA-Cの規約通りに書く、という所にこだわりたい。それと、本の内容だけだとつまらないので、「タイマ割込み」を使った処理を追加することにした。本当はLEDとかデバイスの操作を行いたかったが、H8マイコンの基盤にデバイスをつける方法を調べて絶望したため、放棄する。
■成果物
機能設計書
詳細設計書
試験項目書・ログ
大人のキッザニアなので、ちゃんと残すものを作りたい。機能設計は、タスク、メモリ、通信、など機能ごとに1ファイルを作る。オンボロPCで作業しているため、空き容量の事情でエクセルが使えないので、テキストのべた書きで妥協する。詳細設計書は関数の内容まで書くと膨大な量になりそうなので、関数Aが関数Bを呼ぶ、、みたいにコールグラフを書く程度にしようと思っている。試験については、どうやってやろうか考え中。cygwinでいきなり実行されてしまうので、細かいテストはしようがない。
■スケジュール
11/25-:機能設計(起動・メモリ)
12/2-:機能設計(ブートローダ・通信)
12/9-:機能設計(割込み)
12/16-:機能設計(タスク)
12/23-:詳細設計
12/30-:コーディング①
1/6-:コーディング②
1/13-:試験項目作成
1/20-1/27:テスト実施・リファクタリング作業
機能設計は各機能が依存し合っているのでこの通りは進まないと思う。(起動させるために割込みを使ったり、タスクのためにメモリの設計が必要となったりすると思う。)なので、機能設計は、その時点で想定している設計ができていればOKとする。例えば、11/25-のメモリ設計は、起動処理の時点でのメモリの設計書を作ること目指す。
コーディング期間が短いような気がするが、冬休みに入るのと、機能設計しながらソースも作っていく予定なので、大した量は残っていない想定。1/27日に終わらせることを目標としている。何かをやりきった経験がないので、とにかく「終わらせる」ことを目標としたい。
*1:すごく面白い