Some Days You Get the Bear

IT系エンジニアの、日々の気づきや考えたこと。

組込みソフトのつくり方

組込みソフトを「そもそもどうやってつくるか」を
網羅的に説明しているような(私の思うような)ものがない、気がする。
 
最近は、SDKフレームワークのようなものでブラックボックス化している開発環境もあり、
このあたりがますますわかりにくくなっている(ように思う)。
 
どういうことをやらないといけないのか/考えないといけないのか、を知っておかないと、
「どうできるのか」が見当がつかなくて、
何かをしたいときに対処も思い浮かばない(かもしれない)。
 
もしかしたら、もう今後は
こんなことは知らなくてもつくれるようになるのかもしれないけれど、
自分のつくるものが、どこまでコントロールできるものなのかを知っておくのは
悪くないと思う。
 
 
こんなことをまとめときたい、って思っていることを書いておく。

実際のところは、
スタートアップルーチンで何してるかや、セクションのことが、
あんまり認知されていないなー、と感じている程度のこと。
組込みのプログラムって、こんなふうに動いているんだよ、
というのをわかってほしいなー、と思ってる程度のこと。
 
 

・スタートアップルーチン
 何をしているか、おおまかな流れ
 ※サンプルを使って説明する

 ・CPU(レジスタ)設定
  ・クロック
  ・メモリ
 ・メモリ初期化
  ・dataコピー
  ・ゼロクリア(任意だけど)
 ・ペリフェラル初期設定
 ・OS初期化処理(RTOSがあったらこのあたり?)
 ・main()をcall
 ・終わらないために∞ループ
 
・ベクタ&ベクタテーブル
 ・起動のしくみ=リセットベクタ
 ・割り込み
 ・タイマ
 
・メモリ配置
 ・リンカスクリプト(ARMでは「スキャッタ」)
 ※サンプルを使って説明する
 ・メモリ配置(ROM、RAM)
 ・セクションとは
 ・static、const、グローバル変数
 

RTOSことはじめ
 ・RTOSを「載せる」とは
  ・プログラム構成(≒メモリ配置イメージ)
  ・RTOSがあってもなくても大きな違いはない(と思う)
  ・プロセスモデルあり(参考)
 ・RTOSの機能
  →何かの引用で十分
 ・RTOSの使い方
  →何かの引用で十分
 ・T-Kernelのスタートアップルーチン(参考)
  =フレームワークというか、実装箇所のガイドラインというか
 

・ドライバのつくり方
 ・組込みシステムにおけるデバイスドライバとは
 ・ペリフェラル
  ・レジスタの種類をざっくり(目安程度で)
   ステータスレジスタ、データレジスタ、みたいなの
  ・ペリフェラルの種類
   何かのCPUをサンプルに →他のCPUになっても類推はできる
 ・UARTをサンプルに、コードで説明
 ・ベアメタルとRTOSによる違い →ないけど
 ・T-Kernelのフレームワーク(参考)
  ベアメタルとの違いの一例として