【マイクロコントローラ(Micro Controller)】《プロセッサ》
機器に制御目的で組み込まれるCPU,I/Oがワンチップに集積されたLSIのことで、MCUと表現される場合もある。
マスクは覆い隠すものと意味で、具体的にはデータの一部分を覆い隠すという意味で用いる。データの一部分を覆い隠すことで、複数の情報を表現しているデータから本当に必要なデータを抽出したり、その時に関心のないデータを無視したりするのに使用する。
メモリ空間上でどのデータがどこのアドレス上に配置されているか見るための、データの名前とそれが配置されているアドレス情報の組をマップと呼ぶ。
ソフトウェア構成の中でオペレーティング・システムやデバイス・ドライバより上位で、アプリケーション層より下位に位置し(双方の中間層に位置し)、汎用的な機能を持ったソフトウェア・パッケージをミドルウェアと呼ぶ。
通信機能やデータベースとの接続機能を実装したものがよく見られる。
プロセッサが実行する命令をインストラクションと呼ぶ。インストラクションはプロセッサに対して動作を指示する。動作には演算・データ移動・フラグ操作などが代表的である。一方、インストラクションの実行において、命令アドレスポインタ(プログラムカウンタ)の変更が行われ、次の命令の実行に備える。一般命令において、命令アドレスポインタは後続の命令を指すように変更されるが、分岐命令やソフトウェア割込みでは命令で指定したもしくはあらかじめ決められたアドレスに変更される。
インストラクションは操作を表すオペレーションコード(OPコード)、対象データを指定するオペランドフィールド、命令中に直接値を記述する即値データ部などプロセッサの命令形式に従い区分されたフィールドより構成される。
メソッドは、オブジェクトにカプセル化されたデータを利用しながら動作するソフトウェアの単位である。
メソッドの詳細定義は、プログラミング言語によってことなるが、基本は個々のクラスまたはオブジェクトに固有の動作を記述したものである。メソッドの実行は、クラス内部の他のメソッドから呼び出される場合、他のクラスのメソッドから特定のデータ操作や動作のために呼び出される場合がある。また、全てのインスタンスに共通の動作を行うクラスメソッドと個々のインスタンスに関する動作を行うインスタンスメソッドの2種類が存在する場合が多い。
数値、テキストなどの情報のまとまりでアプリケーションに対応して構造と意味を持つ。OSの下で動作するタスクが特定のアプリケーションに特化したメッセージを作成する場合には、C言語であれば構造体、C++であれば静的クラスによってその構造を宣言してメッセージのフォーマットを決める。シングルCPUのOS下であれば、このメッセージをそのままメールボックスに投函して他のタスクに通知することができる。また、マルチCPU間での通信であれば、ここで決めたメッセージが通信擾乱を受ける可能性があるのでエラーチェック用のコードを付加して外部に送出する。
【メッセージキュー(Message queue)】《OS》
複数のメッセージを順序をつけて格納する記憶域とその構造のこと。通常の格納は、着信順であり、取り出しも着信時間の順である(FILO)
通常は、タスクへのOSのサービスとして、送付先の付いたメッセージをキューに入れる、自分宛のメッセージをキューから取り出すなどのシステムコールが用意されている。
メッセージは、その定義タイプによって長さが異なるために可変長レコードのリスト処理が必要になる。
【メモリ】《HW》
→ AEPROM
→ DP(Dual Port) RAM
→ DRAM(Dynamic Random Access
Memory)
→ EEPROM(Elecrically Erasable
Programmable Read Only Memory)
→ EPROM(Erasable Programmable
Read Only Memory)
→ フラッシュメモリ(Flash Memory)
→ マスクROM(Mask ROM)
→ NOVRAM(Non Volatile
RAM)
→ ワンタイムプログラマブル ROM(OTPROM:One
Time Programable ROM)
→ RAM(Random Access Memory)
→ ROM(Read Only Memory)
→ SRAM(Static Random Access
Memory)
→ VRAM(Video RAM)
【メモリチューニング(Memory Tuning)】《SW全般》 → チューニング
【メモリ配置(Memory Allocation)】《SW全般》
マイコンのメモリ空間のうち、どの位置にプログラムのコードや各種データを配置するかを指す。プログラムの実行途中で値の変わる大域変数やヒープ領域はRAM上に配置する必要がある。一方、変更することのない定数データや各種初期値はROM上に配置可能である。
メモリ配置は速度やコードサイズのチューニングにも深く関係する。システムで使用可能なメモリは、通常複数種類あり、その特性(書き込み速度、読み出し速度や書き換え回数の制限等)が異なる。従って、例えば定数はROM上に配置可能でも、その定数のアクセスが多く、かつROMのアクセス速度が遅ければ、RAM上に転送して使用する必要があるかもしれない。また、マイコンのもつキャッシュの特性を考慮して、コードやデータの配置も考慮する必要が生じる場合もある。
【メモリマップドI/O(Memory Mapped I/O)】《HW》
周辺デバイスとの入出力をメモリ空間内に配置する手法。ソフトウェアはデバイスに割り当てられたメモリ空間上のアドレスに値を書く、あるいはそのアドレスから値を読むことでデバイスとの入出力を実現する。
タスク間で数値や文字列など内容に意味のあるメッセージを交換するための仕組み。メールボックスは、OSの実装によって様々な利用方法がある。最も単純な方法は、メールを送出するタスクは、メッセージに送付先タスクの識別子を付けてOSのメールボックス書き込みシステムコールを実行する。受信側は、メール到着を知らせる非同期モジュールをOSに登録するか、受信側の都合の良いタイミングでメールボックスの内容をチェックするシステムコールを実行する。
これによってタスク間で情報交換を行うと同時に、それぞれのタスクの機能を実行するタイミングを調整することができる。さらに送信元は、複数の送信先を指定してメールを送れるので1つのタスクが複数のタスクに情報とタイミングを指定することができる。ただし、タイミングはハードウェア割込みと比べると10から100倍の時間粒度となるので絶対時間精度が必要な用途にはメールボックスを使ってはいけない。
【モジュール化】《SW全般》
広辞苑によるとモジュールとは装置・機械、システムを構成する部分で、機能的にまとまった部分となっています。プログラムを作成する場合、全体を一つのプログラムとして作成するより、小さな独立した機能の単位に分割し、それらを組み合わせ作成した方が、容易にまた保守しやすいプログラムを作成することが出来ます。なぜなら、モジュールに分割しておくと、他の機能との複雑な関連を考慮しなくてよく、その小さな機能にのみ集中できるためです。このようなモジュールをソフトウェア部品化(ライブラリ化)することにより、プログラム開発者は、モジュールの機能と呼出し形式のみを知っていれば、その機能を実現することができ、生産性や品質の向上にも繋がります。
また、近年オブジェクト指向による開発が注目されていますが、オブジェクトもモジュールの概念に相当します。
【モジュールのトレース】《ツール》
障害はデバッグ環境でのみ起こるものではありません。実際には、デバッグ環境で発生した障害現象でも、発生に至った経緯がわからないために迷宮入りすることもあります。このような場合の解析に役に立てるため、「モジュールのトレース」をとっていることがあります。モジュールのトレースとは、多くは一定のメモリをリカーシブルに使用するデータ領域(リング構造)のデータエリアに、動いたモジュール毎にその名前(記号)とリターンコードを順々に入れたものです。これを、メモリダンプやコマンドによる編集、または外部記憶へロギングなどをしている場合にはその中に出力し、障害発生経路の特定に使用します。
実際の稼動プログラムの障害解析に便利な機能には、このほか、他プログラムやOS、ハードウェアとの間のインタフェース情報の記録や不正状態(予め予測している以外の動作)が発生した場合やエラーリターン情報の記録などの手段があります。たとえ、ソフトウェアのバグであっても、障害の解析や対策ができないということが許されない場合が多くあります。このような場合には、プログラムが誤動作やエラーとなった場合に最低限の解析に必要な情報を予め考えて用意しておく必要があります。
【モジュール分割】《SW設計》
モジュールを分割する方法は様々な方法が提唱されており、代表的なものとして
などがあります。
また、分割されたモジュールの善し悪しを見る方法として、
というものが有ります。強度が強いほど、また結合度が弱いほど、良いモジュールであるといわれています。オブジェクト指向におけるカプセル化あるいは情報隠蔽の概念は言い換えれば、強いモジュール強度、弱いモジュール結合度、ということになります。
モジュール分割された各モジュールを設計する際、PAD(Problem Analysis Diagram)やHCP(Hierarchical and ComPact description chart)などの図式を用いると、機能や処理の流れ、構造が見やすくなり、モジュール分割の(レビュー、再分割の)材料として利用することができます。
→ モータドライバ
→ モータの種類
→ モータの制御
→ モータの脱調
モータドライバは、移動指示信号をモータ駆動のための電流または電圧信号に変換する機器です。サーボモータのためのモータドライバでは、モータへの駆動出力と、モータまたは被駆動系の中のどこかに仕込まれた位置または速度を検出するセンサからの信号を処理し、それをモータ駆動出力にフィードバックまたはフィードフォワードする処理回路(サーボ回路)を持っています。
このサーボ処理は
の大きく2通りの動作モードがありますが、最近はほとんどのモータドライバがリアルタイムなPID(比例Proportional, 積分Integral, 微分Differential)等の演算と制御を行うためのCPUまたはDSPを持つようになりました。
モータドライバのファームウェアでは、おおざっぱに言えば、位置サーボでは移動指示のパルスの積分値とエンコーダからのパルスの積分値とを比較し、その差分がゼロになるようにモータへの駆動出力を制御します。また、速度サーボでは移動指示のパルス間隔とエンコーダからのパルス間隔とを比較し、モータ駆動出力を制御します。
実際にモータドライバを使用する際には、モータ被駆動系の機構的な特性に合せてモータドライバの各種パラメータを最適な状態に設定しなければならないのですが、モータドライバが前記のようにインテリジェント化してきているため、支援機能が充実し、最近では調整の労力がかなり削減できるようになりました。
モータは駆動方法によっては大きく
に分けることができます。また、動作によって分類すると
らに区分でき、さらに制御の面からは
に分けられます。
組込み機器で使用するモータとしては、カメラレンズでのズーム駆動、ピント制御など位置制御のためのもの、フィルムカメラでのフィルム送りなど搬送制御のためのものの他に、携帯電話などに内蔵される、回転から単純に振動を得るための小型DCモータがあります。これらをはじめとして、さまざまな組込み機器で大小さまざまなモータが使用されています。
モータを使用する場合、多くは専用の制御LSIにパラメータを設定しコマンドを与えることで駆動制御を行うことができますが、モータの種類や使用目的によってはもっと簡便なオン/オフのみの制御を行うものもあります。詳しくはモータの制御をお読みください。
モータを利用する場合、ただ回すだけの利用を除くと、定速度と定位置(目的位置移動)の大きく2通りの使用法があります。このうち後者で搬送・位置制御を目的としてモータ制御を行う場合、ソフトウェアが意識しなければならないのは回転量(移動距離)、加減速時の加速度値、最高速度、場合によっては加減速カーブの形状、の4つの項目です。ほとんどの場合、ソフトウェアは駆動のためのパルスを払い出す専用の制御LSIに対しこれらについてのパラメータを与え、移動開始を指示することで、あとは停止するまでを制御LSIに委任できます。停止したことは制御LSIの状態をポーリングするか、制御LSIからの割込みによって検知します。この制御LSIの出力はモータを駆動するドライバ機器(モータドライバ)に接続されます。
ステッピングモータを駆動する際に、モータへの駆動周波数が高すぎる、あるいは負荷が大きすぎるためにモータが負荷を駆動しきれず、その駆動部に角度(回転モータ)あるいは位置(直線モータ)のずれが発生してそのまま復帰できなくなることを脱調と呼ぶ。脱調の発生は、制御側からすると意図した制御(定速度あるいは定位置)がなされなかったということを意味する。
ステッピングモータは通常オープンループ制御であるため、制御側から脱調の発生を知ることはできない。そのため脱調を発生させずに負荷を駆動できるだけの十分なトルクを持つステッピングモータを使用することが基本であるが、さらに何らかの脱調検出手段を外付けで併用することもある。
なおサーボモータはエンコーダなどによるクローズドループ制御を行うため、原理上脱調は発生しない。
最近は脱調検出機能を備えたステッピングモータも見受けられるようになっている。
扱うのが複雑で難しいような対象の雛形をつくり問題を理解、検討すること。
航空機や電子システムの開発では、いきなり実機をつくることはせずに、より簡単な雛形を作成して本質的な問題の検討や実験を行う。この作業をモデリングという。従来は物理的なモデルを作っていたが、最近はコンピュータ上で仮想モデルを作る場合が多い。
ソフトウェア開発においては、本質的な部分についてプログラムを書いて検討することができたので形式の異なるモデルを作成する工程を踏まないケースが多かった。しかし、最近の組込みソフトウェア開発では、開発対象が大規模複雑化しつつも高い信頼性を維持する必要からモデリングをおこなうケースが増えてきている。
モデリングの方法には静的なモデリングと動的なモデリングがある。静的なモデリングではUMLや構造化の記法を使ってシステムをモデリングし、その図上で問題の検討を行う。動的なモデリングでは、図に個々のソフトウェアオブジェクトの振る舞いもあわせて記述してコンピュータ上で実際の動作の論理的な整合性を検証する。組込みシステムではNTCR条件をコンピュータ上だけで検証することは難しいので最終的には組込みターゲットを実際に稼動させての検証がかかせない。
実在の構築物や、開発対象などの数理的、図形的表現による雛形。
従来、プログラムの雛形は、プログラムで作ることが一般的であった。C言語での本格的な組込みターゲット用開発の前にBasicやJavaで基本ロジックを汎用コンピュータ上で作成して雛形として検証をすることはよく行われている。こうした作業で得られるJavaプログラムは、本番プログラムのコードモデルと言われる。
こうした手法は有効であるが、開発の主体者である人間にとってプログラムの雛形をプログラムで見せられても理解が難しいことに本質的な差はない。これに対して、モデルの形式として図を使うと人間の幾何形状認識力を使うことができるので雛形の理解性が格段に向上する。この理由からソフトウェア開発においては、モデルとして各種の図形式をもちいてモデルを作る。
参照:ダイアグラム
インスペクションの主催者、および実施時の司会者。
モデレータは、インスペクション実施前に、参加者を選定し参集を呼びかけたり、レビュー対象物の配布などのインスペクション開催準備も行う。
インスペクション実施時には、司会者役となりレビューを進行する。このとき、参加者の発言を促すとともに、議事進行に伴う記録の確認も行う。また、指摘事項についての検討や改定案の検討を行い、個人攻撃などの不適当な指摘があった場合はそれを制し、スムーズに議事進行させる。
インスペクション終了時には、レビュー結果をまとめ、指摘事項についての対策確認、必要ならば再レビューも実施する。
参照:インスペクタ