名前はまだない

とりあえずの思考や学習のアウトプットの場

組み込みソフトウェアについて調べた

動機

FPGAを触る前にシステム開発について勉強しており、マイコンなどのハードのことを知る中で「ソフトウェア側ってどうなってるの?」という疑問が生じたので、組み込みソフトウェア開発について調べた。
「組み込みソフトウェア」とは何か 〜PC系ソフトウェアとの違い〜が分かりやすかった。

組み込みソフトウェアの基本要件

  • 自然法則 組み込み開発における製品制御は論理のみで完結せず、自然現象を扱うことも多い。
    なので、自然法則を考慮するというのが組み込みソフトウェア開発での大きな特徴。

  • リアルタイム制御 プログラムの処理時間に一定の時間的制約を課せられる。
    これは利用者が処理の完了を待ってくれなかったり、一定時間内にデータを読み込まないとデータが消えてしまうからなど、製品の仕様に原因がある。
    この時間的制約を守ってソフトウェアを作ることをリアルタイム制御という。

  • 組み込み拘束 組み込み機器はコストを抑えるために必要最小限のリソースしか搭載されておらず、設計後の修正にコストがかかる。
    そのため、ソフトウェア側でその改善を図ることが多い。
    組み込みソフトウェアでは様々な最適化、切り詰めが求められる。

  • 信頼性 製品によっては、ソフトウェアにバグがあると人命に影響を与えるような場合がある。
    また、ソフトウェアの更新には製品のリコールが必要になるため、多大なコストとイメージダウンが生じてしまう。
    更にはソフトウェアがROMに書き込まれていたら変更のしようがない。
    ここは、リリース後にアップデート可能なIT系のソフトウェア開発との大きな違いになる。

スタートアップ・ルーチン

C言語でプログラムを書くときはmain関数以降を実装するが、実はその前にスタートアップ・ルーチンというものが稼働している。
スタートアップ・ルーチンとは、電源が入るかリセットボタンを押されると起動するプログラムで、一般的には以下のような処理を行う。

  • スタックの設定
  • プログラムの実行に必要なデータの設定
  • ROM領域からRAM領域への初期値データの転送(定数、グローバル変数など)
  • 初期値を持たないメモリ領域の0クリア
  • マイコンの動作モードの設定
  • ハードウェアの初期化
  • ハードウェアの自己診断

プログラムの実行後にスタートアップ・ルーチンに戻ってくることもあるらしい。

組み込みソフトウェア開発スタートアップ―ITエンジニアのための組み込み技術入門 (デザインウェーブムック)
この本をザッと読んで全体像を理解した。
パスワード管理端末の設計がおもしろそうだったので、何か自分も自作してみたいと思う。