2012年11月24日土曜日

組み込みシステム OS無し 状態の保存(RAM)

一つ前の 記事と 密接に関係するので珍しく続けて2個の記事を書きます。

一つ前の記事{設定の保存(EEPROM)}の話は、まだ比較的分かりやすかったと思います。

今回の記事はウォッチドッグとも関係してきます。


何らかの理由で、システムの動作がおかしくなった場合にも、出来る限り処理を続行させる必要のある状況もあります。


  バグでソフトが止まったままになる事が最悪です。


言葉だけで書いても分かりにくいので、C言語のスケルトンを載せておきます。

 //----------------------------------------------------------------------------- void check_restore_ram() {
    if( check_ram_status()) { // 保存されているRAMの状態が正しいかチェック
     restore_ram();
    } else {
      clear_ram();
    }
 }
//-----------------------------------------------------------------------------

void save_ram() {
  copy_dram_sram();       // 通常のRAMからバックアップ用のRAMにコピー
  calc_set_check_val();   // バックアップメモリーの妥当性チェックデータを書き込み 
}
//----------------------------------------------------------------------------- void main() {
  check_restore_ram();
  loop(1) {
    func1();
    func2();
    func3();
    wdc_clear();
    save_ram();
   }
}
//-----------------------------------------------------------------------------

雰囲気を理解してもらうために出来る限りシンプルにしています。 

かなり省略している部分もありますが、自分で理解して、省略している部分を補えないと トラブルの元になりますので、頑張って理解して実装してください 

特にclear_ram()の部分とスタートアップルーチンあたりはバッティングします。

スタートアップルーチンの定数設定の部分は時間を浪費するので、大胆にカットして この部分で行うのがいいと思います。

システムのRAM容量しだいですが、複数世代のバックアップを世代管理して妥当性チェックで OKだったものをなんとか使うと言う場合もあるようです。

当然ですが、妥当性チェックのデータ自身もバックアップRAMにおく必要があります。 妥当性チェックの値はチェックサムないしは、CRCにて計算して複数持っておき、不一致が発生した場合は、迷わず初期化するしかないと思います。

電圧低下検地のデバイスからの割り込みが発生した場合、

CPUの動作は不定状態になると仮定する必要があるので、

積極的にリセットを繰り返して、瞬間停電にも備えたほうがいいかもしれません。

 割と大サービスで書いてはあるんですが、あまりに事細かに書きすぎても問題なので、これぐらいの 説明で理解できる方でないと厳しいです。


組み込みシステム OS無し 設定の保存(EEPROM)

前回の記事でウォッチドッグタイマーについて書きましたが 関連項目です

・設定をEEPROMに書き込む
・状態をバックアップされるRAMに書き込む

 とありましたが、

まずは違いについての解説です EEPROMには書き込み回数の上限があるので、
デバイスの劣化を考えると頻繁に 書き込みを行っていると、いつか書き込み不可能になります。 

身近なもので設定を保存しているのもとしては、スマートフォンとか、ルーターが挙げられます。 どちらも常時電源を入れたままで使われることが多いものです。

 1.ルーターの場合
  ・ファームウェアー
  ・設定
   等がEEPROMに書き込まれて保存されているために電源を入れなおした時に、
  同じ状態で  動作できるようになっています。

 2.スマートフォンの場合   もうすこし詳しく、書いてみます
  ・ブートローダー
  ・OS
  ・ディスク(フラッシュメモリー)上のOS、アプリケーション、データ

スマートフォンの場合はフラッシュメモリー上にファイルシステムを構築して、
その上に  主にUnix系のOSを走らせていることが多いです。

android も iPhone も どちらも そうですね。

フラッシュメモリーの耐久性もあがってきているのと、物理ブロックに書き込みエラーが発生するようになった時に代替ブロックを割り当てる論理ブロックを使うようになってきているので出来ることだと思います。

 一見すると、無制限に書き込みを行っているようですが、OSだとバージョンアップした時に書き込まれその後は、読み込みだけです。


ログファイルなども、何かのイベントが発生した結果だけなので、有限です。

製品のライフサイクルを考えて、上限の書き込み回数をしっかりと把握した状態でなら、フラッシュに 現在のシステムの状態を全て保存しておくことも可能です。

ただし、やはり性能が向上したといえども、フラッシュには書き込み回数に上限があります。  そこのところが RAMへのバックアップと違うと言う事を意識して置いてください。

データーシート等を見ていただければ、上限書き込み回数が書かれていますので、一度目を通してみてください。

2012年11月2日金曜日

ラベルを修正しました

更新をサボっていましたが、久々に更新しました。 ついでに、ラベルを修正しました。 半角のカンマと全角のカンマの入力ミスです。 ”,、”並べてあると分かるのですが、

関連項目の検索性をあげるために

細かくラベルを付けるようにしていたために起きました。 

関連する項目をなるべく同じラベルにしています

特に宣伝等はしていないのでこのサイトに来る方は検索で来ていると思うので、そうしています。 放置も多々あると思いますが、終了宣言が無い限りぽつぽつと更新されると思っていてください。

なるべく多くのラベルを付けるようにとしていたのですが、文字数に制限があるようなので、エラーが発生するため、将来的に英文字短縮形にしていく事になると思います。(2012/11/24update)

組み込みシステム OS無し ウォッチドッグタイマー

割り込み処理の話を思いつきで書いていたら行き詰ったままなので、いったん放置して 違うことについて書いてみます。


 組込みシステムでは ”フェールセーフ”になるようにシステムを設計します。

 また別途書くことがあるかもしれませんが、 
・データのバックアップ(主にRAM)
 ・設定のバックアップ(EEPROM)
 ・電圧監視によるリセット
 ・ウォッチドッグタイマーの利用

 それぞれが関係してくるので、

全部を一気にとは行きませんが今回はウォッチドッグタイマーに 関して書いてみます。

 ハード回路としての、ウォッチドッグタイマーもあれば、CPU内蔵のウォッチドッグタイマーも あります。

 処理を簡略化してC言語のソースで表すと

 void main() {
     while(1) {
       func1();
       func2();
       func3();
       clear_wdc(); // ウォッチドッグタイマーのクリア処理
     }
 }

 こんな感じです、どこかの処理に異常が起きた場合にシステムが完全に停止してしまわないように するために、使用されます。

 割り込みの優先順位はかなり高く設定されます (システム全体の健全な動作に関わるため)

 その割り込み処理内で、何らかの処理を行いますが、システムをリセットしてしまうこともあります。

 ウォッチドッグの処理の割り込みの関数にジャンプしてきた場合は、何らかのトラブルが システムに起きていることになります。

 多くの場合は、設計不良、想定外の多重割り込み、場合に寄れば電気的なトラブルの可能性もわずかにありますが、システムごとに違います。

 いくつかの条件が整えば、WDT割り込みが発生したかどうかを確認できます 

・バックアップ可能なメモリーに発生した情報を格納、更新できること
・その情報に何らかの形で外部からアクセスできること
 例えば
  ・EEPROMに書き込んでおいてJTAG接続のICEで確認する
  ・1次電池、2次電池でバックアップされている、RAMに書き込んでおいて、
   サービスコンソールで  参照する
  ・あるいは、システムログとして保存しておいてメール、WIFIでの転送、
   SDカードへの書き込み等 方法としては幾つも考えられます


 関連する項目があるのでさらっとだけ説明して終わりにします。

2013/09/27 何故だか、改行などが変になっていたので修正しました。

2012年9月5日水曜日

組み込みシステム OS無しの開発 その3 割り込み2

ちょっと前回から、時間が経っていますが、

割り込み処理の内部では、割り込み処理でしか出来ない必要最低限の処理を行います。

メイン処理は通常ループしていますが、そこで割り込み処理の内部でセットされた変数を
参照して、 処理を行う事も多いです。

また、確実にタイミングを合わせる必要がある処理に関しては、割り込み処理で直接をします。


 ただし、組込みシステムでは幾つもの割り込みが同時に起きる事を想定しないといけません。

 複数の割り込みが同時に発生した場合の優先順位(ハード的にもついていますが)、割り込みの優先順位の設定が内部レジスタで行えるものもあります。


 タイマー割り込みはよく使う割り込みですが、特にタイマー割り込みの中であれこれと処理をする場合は、処理時間をよく検討して、他の割り込みを処理できない事態を避けないといけません


 ICE等で実行時間を計測して、
・平均的な処理時間と、
・最長の処理時間

を把握する事も大事です

想定外の割り込みオーバーを起こしてしまっている場合は、なかなか原因を特定することが難しいので、注意してください

1万回に1回とか、10万回に1回とかでも、やたらと処理時間がかかっている様だと、どこかに問題があります

2012年8月3日金曜日

組み込みシステム OS無しの開発 その2 割り込み1

組み込みシステムでは、割り込み処理の全てを自前でサポートする必要があります。


 割り込みには複数のレベルの割り込みがあります。

 また、それぞれ、割り込みを許可する許可しないという、

割り込みのマスクという事も出来ますが、
NMIという割り込みを止める事が出来ない最優先の割り込みもあります。


 割り込み処理の基本ということで、まずは単純な割り込みについての説明です

 1.外部より割り込み信号が発生
 2.CPUは該当する割り込みベクターへPC(プログラムカウンターを変更して処理を始める)
 3.アセンブラで記述してある割り込み処理の場合は各種レジスタを保存する
 4.必要な割り込みマスクを設定する
 5.最低限の必要な処理を行う
 6.レジスタの内容を割り込み前の状態に戻す
 7.必要なレジスタ関係のクリアを行い次の割り込みが正常に動作するように設定する
 8.割り込み処理から復帰する

 大まかには、このような流れになります。

 組み込み用のC言語で記述する場合には、レジスタの退避等の処理を自動で記述してくれるものもあります。

 この場合は一度アセンブラソースを確認して見てください、理解が深まると思います。

 また、割り込みが発生した時に割り込み処理ルーチンで全ての処理を実行することはお勧めできません。


 システムでは複数の割り込みを、受け付ける場合が多いので、
多重割り込みという状態が発生しますので、
 なるべく、短い処理を行って、フラグ的なものとして記憶しておいて、

メインの処理の中で処理を行うことが お勧めです。

 一つ前のエントリーで説明を行っていた valatile で指定してある変数を割り込み処理の中で読み書きすることになります。

2012年7月26日木曜日

組込みシステム C言語のキーワード volatile

組込みシステムの割り込みの話を書こうと、数日構想を練っていたんだけど、とりあえずは

大事なキーワード volatileについて書いて見ようと思います。






アセンブラソースを出力させてコンパイルして最適化をしてソースの違いを見てみてください

例)

static volatile int val1;
static int val2;

(ちょっと順番が記憶であいまいですがとりあえず書きます)



void func1(){
    val1++;

  if( 1 == val1) {
        val1++;
     }
}


void func2(){
   val2++;
   if(1 == val2) {
       val2++;
   }
}


この二つのコードは一見同じに見えますが、通常最適化された場合は演算結果をレジスタに残しておいてそのまま 条件判定を行いますが


volatile が付いている場合は、常に最新の内容を見に行くようなコードになっているはずです。


これは、組込みシステム以外ではあまり使われません。


同じ変数に一見同時にはアクセスすることは、あまり考えないかも知れませんが、組込み系では考えられることです。


割り込み処理で詳しくは書きますが、とりあえずこんなおまじないがあるということだけ、先に書いておきます。





2012年7月21日土曜日

組み込みシステム OS無しの開発 その1 void main()

組み込みシステムの場合、組み込みOSを使うケースがかなり多くなってきています。

それでも一部には OSを使わずに全てを、自前のプログラムで管理する開発もあります。


どういったものか理解してもらうために、まずは簡単な例を挙げてみます。


#include <stdio.h>


void main() {

 printf("hello world\n");

}


典型的な、Cの入門のソースです


Windowsのcmd.exe、Linux のターミナルから実行することが多いと思います。


printf は標準出力へ 出力するという命令です


そして、それはstdio.hで定義されている 標準ライブラリの中で実装されています。


OSを一切使わない開発の場合はこれすらも使えない事になります。


mem.h
math.h
strings.h

等も同様です、

ただし実際上は、各CPUメーカー等から組み込み用のライブラリが提供されているので
必要なものだけリンクするという形で使うことが出来ます

今ではあまりありませんが、ROMやRAMの制約でなるべく小さなサイズにしたい場合等はメーカーから提供されているライブラリを使わないという選択肢もありました。


コンパイル時にアセンブラソース出力付きでデバッグ情報付きでどのように処理されているか見ると組み込みシステムの理解に繋がります


是非一度お試しあれ


そしてICEでアセンブラレベルでステップ実行できるようでしたら、何をやっているかの理解がかなり進むと思います。


各種レジスタの設定、プログラムカウンタの設定、割り込みベクターの設定、スタックポインタの設定、割り込みマスクの設定、等システムの状態を設定した上で


最終的には アセンブラレベルで

goto _main

という形で処理が行われます

他にもいろいろあるのですが今回はこのあたりでおしまい。

2012年7月19日木曜日

組み込みシステム 機材のお話(放出予定)

組み込み開発で必要となる機材の調達方法ですが、

1.新品でメーカーから買う
2.レンタルで借りる(受注元が借りて支給というケースが多い)
3.レンタル会社の放出品を買う(販売ページがあることが多い)
4.オークションで入手する
5.電子系の部品会社から通信販売で買う
5.自作する


4.5.あたりでは秋月電子とか有名ですね

でここまでがメインの記事です




==========================================================================
==========================================================================
==========================================================================


これ以降は、ちと個人的な宣伝になります、時々UPDATEする形になると思います。
(保有している機材の放出予定)




準備が整い次第オークションに出す予定にはしていますが、予定は未定です


興味のある方は連絡を頂ければ、メールをさせて頂きます。



一応リンクを貼っておきます

==========================================================================


<ヤフーオークション風夢の出品>


==========================================================================


7/19 現在の予定

・AF9723 10baseIF 付き 1Gbit GANGユニット 2種類 4個
・KMC partner ET2 本体、電源、プローブ(新品)




==========================================================================
==========================================================================
==========================================================================

組み込みシステム で デバッグプリント

基本的には組み込みシステムでは デバッグプリントは使えないことが多いですが、

そのかわりの方法をいかにして実現するかというのも工夫だと思います。

以前に紹介したシリアルポートを利用する方法もありますがそれも出来ないと仮定します。


ICEを繋いだ状態で、動作していると仮定して、ソフトの完成度も上がってきていて、でも時々動作がおかしいような場合は困りますね。

もしも、OSを使っていなくて、メモリー(RAM)に空き容量を確保できるのなら、主要な変数(出来れば構造体にしておいたほうがいい)をリングバッファ的に書き込んでいく方法があります。

リングバッファに 関しては、また別に書く必要がありますが・・・


簡単にこの方法を 説明すると


例)
 int dbg_data[1024];
  int dbg_idx;


こんな感じで変数を作っておいて、毎ループ、主要なデータを保存してやります

カウンターの更新はバッファサイズに合わせてやってください


動作がおかしくなった時に、きっとブレークポイントを設定していると思うので

その時に変数の動きを確認すれば、内部で何が起きていたのか推測できます


上の例では簡略化しすぎているので何もわかりませんけどね。


2012年7月17日火曜日

お知らせとお願い、 組込み、組み込み システム

意外と、組み込みシステム開発、組込みシステム開発、(検索の為に複数表記してます)のブログに巡り合いません。

 リンクを希望の方があれば、お知らせください、さらっと目を通して、基本的にはリンクを乗っけるようにしますので。


 検索して出てくるもので、個別の深い内容のものは、多々あるのですが、全般的にさらっと、流したものが無いので、個別の事柄に関してはあまり深入りせずに、そしてなるべく途絶えないようにと思っています。


参考になるページがあった場合は、記事の中でリンクを貼ると思いますので、今時NGということは無いとは思いますが、そういう場合は連絡をくださいませ。


基本的にこのブログでは、完全にリンクフリーと考えています。


2012年7月15日日曜日

組込みシステムと通信

予想外に番外編で、ネットワークの事をかいてしまって、予想外に多くのアクセスがあってたじろいでるわけなんですが、、、

 ついでといってはなんですが、組込みシステムと通信を取り上げたいと思います。

(タイトルだけみて、なんとなく、バランスを取って、記事をかいてるもんで・・・)

古いところでは

パラレル
RS-232C
RS-485   だったっけかな??

あたりが使われていました

ボーレートも その昔は9600BPSあたりが一般的でした

その後、組込み機器向けのCPUも高速化して ボーレートも二桁ほど上がったりもしています

特に機器内部でのやりとりとかは、動作速度の向上とともに桁違いにあがっています


その後 I2C とかいう通信も出てきていますが、

大きな変化は、PC等でも使われている TCP/IPが一般に使われることが増えてきています

データの収集や、遠隔操作等にも便利なためですね


また、配線が難しい場所とかで、使用されることもあり、無線LANを使われることも多いです

ネットワークの導入が始まった初期の頃は、ネットワーク対応のOSを使用して、ソフトレベルで

完全に対応する形で実装されていました


その後、ネットワーク機能だけの小さな基盤が開発されて提供されるケースが多く見られるようになってきました。


最初は有線LANでしたが、最近では無線LANのものもかなりあるようです。

そういう形で、簡単にネットワークを扱えるようにはなってきていますが、ネットワークの基礎知識もある程度は求められることになります。

組込みに限った話ではないので、ネットワークの仕組みなどについては ちゃんと勉強しておくことをお勧めします。





2012年7月13日金曜日

番外編2 忍者ツールズ 自力先行復旧 初心者不可! DNSの旬のところを使え!update2 12:35

忍者ツールズのDNS浸透に 時間がかかっていて いらついているかたへ

とりえず、技術力に自信がある方にだけに しか 分からない方法でやり方を

お伝えします。

私が試したのはWIN XPですので、自分の環境に合わせてください。

基本的にネットワーク周りの設定を変えられないものでは無理です。

その1. NSLOOKUP コマンドで 現在の ninja.co.jpの アドレスを 確認してメモしておきます

その2. フリーのDNSをさがします  私の場合は あの Gで始まる 有名なところのやつを
使うことにしました


その3.NSLOOKUP コマンドで フリーのDNSを使って IDが引けるか確認する

nslookup ninja.co.jp g..g.g.g

ここでIPが変わってないならアウトですので その2に戻ります

a.b.c.dと 答えが返ったものとします


その4.NSLOOKUP コマンドで 念のために IPからの逆引きをします

 nslookup a.b.c.d で 逆引きの答えが

ちゃんとなっていることを 確認します


その5.TCP/IPのプロパティーの設定から

DNSの設定に g.g.g.g をいれてやります

私はプライマリに一応いれましたが・・・・

今なにか値が入っているならセカンダリに残しておいたほうが無難です


以上です

これでわからない人は やめておいたほうが無難です。


ネットがまったく繋がらなくなります


追加です 2012/07/13 12:22

ルーターを使っている方はルーター内部のDNSの設定の所に追加してやれば
同じことが出来ます。

DNSアドレスを特に自動で取得になっている場合は、おかしくなったとしても、元に戻すのは
簡単です。

フリー DNSで 検索すれば出てくると思います。

あくまでも自己責任とうことで、宜しくお願いします。


2012/07/34 12:34
参考ページがあったのでリンク追加

<Gigazineの参考記事>

番外編 忍者ツールズ、忍者ブログ 障害 2012/07/12 20時ごろより

困ってる、人もいると思うので、記事を書くことにしました。

このブログはGoogleのサービスなので直接影響はありません。

他にもブログがあるのでそちらのほうで影響があったので、あれこれ調べていても情報がないので、自分なりに調べた結果はあとで 書きますが。

とりあえず、

忍者ツールズ、忍者ブログ 障害 2012/07/12 20:20-21:30
一般ユーザーの方にかんしては、72時間程度の時間で復旧します。


いったんここで公開して、その後修正を加えることにします。 2012/07/13 01:45

21時ぐらいまでは、まったく情報が出てくることはありませんでした、


とりあえず、現象面で分かっていることは、
・管理画面にアクセスできない(お名前のほうへリダイレクト)
・個人のブログ画面も同様

21時ぐらいまでの時点では

DNSを引いて見た結果は

どちらも一見正常な値が返ってきていましたが、

IPアドレスは同じでした

そこで考えられたことは、

・サーバークラウドのダウン
・DNSの障害

いずれにしても、復旧までに時間がかかりそうでした。

そのごあれこれ探したところ

Twitterのアカウントがあったため、連絡を取ることに

Facebookにもページがあったので、そちらでも案内を
・侍ファクトリー での告知


そちらでの情報提供を提案


それとともに IPアドレスをチェックして割当先をチェックすると


GMOとのことで、そちらの障害情報をチェックするも特になし


ただ、別件で該当する時間帯に、メンテナンス作業が入っているので、
何かのミスの可能性も考えられました

普段から無料でお世話になっているので出来るだけのサポートはしたいと
あれこれと提案させてもらっていた感じです。

01:53分 一度 さらに公開します

その後DNS障害ということがアナウンスされたので、これは 最悪72時間コースかもと
いう事が判明

それとともに、基本的には 大きな部分の原因はサーバー側では なさそうであることも

DNSを再び引いて見ると 忍者ツールズのIPは引けるものの、ユーザーブログのIPが引けない状態に変化しています(21時ぐらい?)


DNSというのは IPアドレス(人間は覚えられない、数字なので)とninja.co.jpとか の マッチングを
行うサービスのことで、仕組みは、自分が知らない時は、一段上のDNSに聞きましょうという
バケツリレー方式になっています

また、何度も何度も聞くのは、非効率なために、聞いた結果はしばらく覚えて起きましょうという
仕組みで、ある感覚で変更しましたんでよろしくという情報を、またバケツリレーで送る仕組みです


この待ち時間があるために最大72時間ぐらいで、世界中にいきわたるはずという仕組みです



2:00 再び 一度公開します

問題発生時に、心配したのは、見える見えないよりもDNSポイズン?でした

変なソフトとかを入れてしまうと、IPアドレスを取得する時に、なりすました別のサイトに知らない間に、飛ばされてしまう怖いやつです。


幸い情報が取れましたので、その心配もなく、あとは時間が経てば、ほぼ復旧すると思われます


まだまだ、現場では対応に追われているんでしょうが、頑張ってください


あとアクセス解析あたりは、きっと別で動いているようで、物によってはデータも残っている可能性もありそうです。


このあたりは事態の収拾をまって、正式発表をまつしかないところです


いちど 記事としては、これで閉じます、続報などがあるようでしたら 別途あたらしい記事にするとおもいます。

2:07


2012年7月12日木曜日

組込み開発の測定器:ロジックアナライザ

風夢です、実は、本当はこの記事をずいぶん前から書きたかったのですが、他にも書かないとって思うことがあったので、遅くなってしまいました。

以前に、デジタルオシロスコープの紹介をしましたが、似ているようで、違う測定器です。


まず、取り扱える信号の数がオシロスコープと、ロジックアナライザでは圧倒的に違います。

一般的なオシロスコープでは、2CHもしくは4CHが標準的ですが、ロジックアナライザは16CHとか
それ以上になります。

一般的にデータバスや、コントロールラインの信号レベルをH/Lを測定するのがロジックアナライザです。


例えば8ビットでデータを出力するデバイスからの、信号の読み込みをする場合にデバイスからは
リクエスト信号が出力されて、CPUは割り込み処理を行ってREAD信号を発生させてから、データバスに信号が流れます。

(READ信号も、状況しだいで IO READと MEMORY READ の場合もあります 個別のCPUで違います)


当初のロジックアナライザは、このような感じのものでしたが、お値段は怖いほど高くて、扱うのにちょっとびびってしまうようなものでしたが、その後さらに機能面で進化しています。

CPUのデータバスに流れるのは、かなりの割合で実行コードなわけで、それはアセンブラレベルになりますが、CPUが何を実行しようとして ロードしてるのか分かるということになります。

残念ながら、こういう高度なロジックアナライザを使ったことがないので、これ以上の詳細に関しては知りませんが、ICEでやっていることに近いところが外部から観測できることになります。


また、アジレンス等だったかな、デジタルオシロとロジックアナライザが組み合わさった製品も出てきているようです。

組込み開発の市場規模が大きくなるにつれて、それを支援する機材のほうも研究開発されて発展していってます、直接使う機会がなくても大体どういうものなのかを知っておかないと、いざそういう機材を使って開発に当たるときにロスタイムが発生してしまいます。

組込みシステム開発のソフトウェア技術者は、本当に日々勉強していくことが多い大変な分野です、ただし出来上がったものは製品という形で有形の物として存在しますので、やりがいも大きいです。

2012年7月11日水曜日

ライセンス問題 組込みシステムでは避けて通れない話

風夢です、今日はまたまた、ハードから離れた話ですが、ライセンスのことを話題に取りあえげて見ようと思います。


ライセンス、あるいは著作権という単語自体は日常的に耳にする言葉でなんとなく、分ったつもりになっているものですが、今日のソフトウェア開発の場合、デリケートに対応する必要があります。

それというのも、Linuxの普及によるものが大きいです。

有償、無償でいろんなOSがありますが、デファクトスタンダードとしてLinuxがどんどんと組込み機器にも使われてきています。

Linux自体も、ソフトウェア開発者なら一度調べて見るといいと思うのですが、あえて説明をしますが、カーネルとツール類は別物です。


今記事を書こうとしながらも、すぐには思い出せないほど、ライセンスには種類があります。


・コピーレフト
・GPL
・GPL2
・BSDライセンス?
・アパッチライセンス?
・BSDライセンス?
・プロプラエタリライセンス


あと、ソフトに場合によってはデュアルライセンスといって、複数のライセンスから選択をする場合もあります。



組み込み機器では特に、ソースファイルを改変などした場合に、その部分を公開する必要があるかどうかなどありますので、ライセンス関係をしっかりと確認した上で、参考にしたりする場合にはプロジェクトリーダー等に確認をとっておく必要があります。


ライセンスに関しては今後はあまり取り上げないかもしれませんが、大事な問題なので、一度しっかりと勉強をしておくことをお勧めします。



さすがに難解なのと自分自身でも、おさらいをする必要があるので、記事を書きながら探したページのリンクを貼らせてもらいます。

<漢のコンピュータ道(デュアルライセンスで検索しました)>

<Linuxカーネル WIKI>

<組み込みLinuxの手引き>



2012年7月10日火曜日

組込み プルアップ、プルダウン、ソフトエンジニアのためのデジタル回路入門1

組込み開発を続けていくと、いつの間にか回路図を渡されて・・・・ということもあります


このサイトは私の趣味?で書いているサイトなので、とっても不親切ですが、ある程度ボリュームがまとまってきたらそれなりに、役に立つことを想定して、多くのラベルをつけてあります。


今日の記事では、少しデジタル回路について触れようと思います。

用語として羅列して説明がないかもしれませんが、検索されれば、より身につくものと思います。

(このサイト自体が、特にどこかにリンクを貼るでもなく、検索しないとこれません)




・プルアップ
・プルダウン
・ファンアウト
・スリーステートバッファ
・ポートセッティング  CPU内部のポートの状態を特殊レジスタに値を書きこんで決めます。

あと 避けて通れないのは

真理値表という言葉はしってますよね?
・AND
・OR
・NOT
・XOR EORともいうのかな?


デジタルには限らないかもしれませんが電気的には

・+B
・VCC
・VDD
・VSS
・GND

とかも出てくるかも この辺りは電圧に関するものです。


多層基盤が多い最近では、どこから、どんな電圧がとれるか・・・とか回路図が読めないと
アウトです、、、ソフト屋がそんなことをする必要があるかどうかは別としてね。


3層4層は当たり前なので、オシロ、ロジアナ等を使うにはそれなりに苦労をする場合も
多いかも


・IC,LSIのピッチもかつては2.54ミリピッチでしたけど、今は微細化してるので

ちょこっとこの信号を取りたいとかって言う時は、ソフト屋さんの半田づけテクニックでは
きついのは確かですね。

ハーフピッチぐらいが限界かな

やっぱり、ハード屋さんにTPなり、ランドなりを作っておいてもらえたら嬉しいです。


多層基盤の場合は、ノイズ対策などで、表裏がかなりの面積がべたになっていることが
多いです。


こういうのが普通に分かるようになっていれば、きっと貴方は立派な組込み技術者だと思います。


2012年7月8日日曜日

何故?どうして? どうなっているのか?自分の頭で考える

今日は少し、取り留めの無い話ですが、

膨大な、技術や情報を追いかけて、限られた時間の中で、スキルアップを図りながら、仕事を続けていく必要がああります。

IT業界では他の業界以上に、この傾向は強いと思います。

新しい技術がいっせいに広まっていっているときに、オンタイムで仕事で関わっていればいいのでしょうが、そうも行きません。

 かと思えば有望だと思われていたものが急速に廃れることもあります。

広い視野を持って、現在直接自分が関わっている技術以外のものでも、概要については押さえておいて、必要になった時に、これってどんなものなんだろう??ってことになると出遅れてしまいます。




 ところが、IT分野程、裾野の広い業界もなかなか無いとも思います。




 一つ一つ携わっていくプロジェクトの中で、何でこうなんだろう?どうしてこうなんだろう?
自分の頭で考えて、推測していく癖をつけておくことを、お勧めします。




まったく違うアーキテクチャーのCPUを始めてプロジェクトで関わることになった場合でも、ここはきっと同じだろう、ここは間違いなく違うだろうと、推測をして調べることで、効率がUPすることも多いです。




 また、長らくやっていると新規開発のみならず、改造の作業が発生することもあります。


社内で開発されたソースを変更する場合であれば、運がよければ担当者がいる場合もあります


その場合は疑問点等を質問する機会にも恵まれるかもしれません。




 ソースファイルの解析を行う作業は、時にはとても苦痛を伴うものですが、スキルが高い人の
書いたコードを読むことは、非常に勉強になる事が多いです。




例えば、CPUメーカー提供のライブラリのソース、OSのデバイスドライバのソース等、
通常のアプリケーション開発のレベルとは、違ったレベルの記述がなされている場合もあります


 嫌だと思う仕事の中にも、スキルアップのチャンスは転がっているのです、プログラムの開発の思想にも歴史の流れがあるので、書いた人の時代を感じることもあります




簡単な 例をひとつだけ 挙げれば


if( 3 == a) と

if( a == 3) この違いはわかるでしょうか?


もしも =を一つ打ち忘れた場合に ここで差が出てきます

勿論例なので、3を直接書いていますが これも #define もしくは enum を 使うところでしょう


あと 脱線になりますが、

- w3 は 必須だと思います

それが 何故かも 考えて見てください




****
文字だらけで、写真や図を 使わないで書いているのは、なるべく、時代の変化に関係なく
記述しようとおもうからです

また、読まれた方が自分の頭で考えたり、検索して印象深く記憶に入ればと思っています







2012年7月5日木曜日

ハード屋さんにお願いしたいこと(アートワーク)

少し前の記事

空きポートの活用(デバッグ)>

にも書いたことですが、小ロットで作成される、機器の場合、アートワークを決める時点で少し工夫をして頂ければ、ハードデバッグやソフトデバッグに活用できることがあります

JTAGのコネクタのように未実装状態で製品化するというほどのレベルまで行かなくても、使用しないポートをプルアップ、プルダウンしておくのにすこしだけでもパターンを伸ばして頂ければ

・シリアル通信
・IO
・AD/DA

等を付加して、システムトータルでの開発に役に立つことも考えられます


できれば+Bとか取りやすかったり、TPとか立てれるようなランドにしてもらってれば

もっと楽ですけど


発想を、逆転して、ハードデバッグを行うために、そういう冶具を実装した基盤を提供して

スイッチなり、エンコーダー、シリアル入力に基づいて、確認したい動作をするように

ソフト屋に頼んで、先にがっしりとハードを固めてもらうのもありだと思います



2012年7月4日水曜日

組込みシステムに限った話ではないけれど

ソフト開発で生計を立てていく人全般に言えることだとは思いますが、

常に新しい技術が出てきて、枯れていく技術、消えていく技術があります

今現在自分自身に関係がないと思われる事柄でも、IT業界に関わる技術、情報には普段から軽く目を通しておいて、ざっとどういうものかは知っておく必要があります

 詳細な内容の理解までしておく必要はありませんが、いざその技術が直接必要になった場合あるいは、客先でxxxってどうですかね?とか言われた場合に、アウトラインぐらいは知っておいて充分に対応できるぐらいの知識は持っておくことが望ましいです

 今現在、組込み機器にはネットワークあるいは無線LANが内蔵されていくものも多いです

10年前には考えられなかったことですが、5年先にはどうなっているか分かりません

全ての技術を詳細にということは当然不可能ですが、どういうものかという程度を押さえているか
の差は大きいです

何かのプロジェクトに関わる時、あ、、そういえば以前に耳にしたことのあるあれはどうだろう?

ということで、詳細に調べ役に立つことも少なくありません


 常に新しいことに挑戦し、勉強を続けるというスピリットが特に組込み開発を行っていく人には
重要だと思います


 一部には、ソフト業界の中でも職人とも言われることのある、組込み技術者ですがそこに
至る経緯でいくつかのパターンがあると思います


A)ハード開発から、必要性にかられてソフト開発を続けるうちに、ソフトの方がメインに。

B)ハード開発を行ううちに、ソフト担当者との打ち合わせも多く、大まかにソフトのイメージをつかんでソフト屋の言葉を理解できるようになった。

C)ソフト開発を続ける中で、必要性にかられてハード関係の勉強も進めて、ハード屋の言葉を理解できるようになった。(回路図、データシート、測定器類の操作も出来る)

D)ソフト開発を続ける中で、必要性にかられてハード関係の勉強も進めて、ハード屋の言葉を理解できるようになり、問題点がある場合にハード屋さんと協力して問題解決に取り組める




メインのターゲットをソフト開発者にしていますので、もう一つ付け足しておきます


E)ソフト開発を続ける中で、安定したシステム上では何とか組込み開発を行うことが出来る
 (回路図、データシート等は読める)・・・・ただし、設定等はハード屋さんが居ないと出来ない






今あげた中で、サバイバル能力が一番高いのは、AとCになります、ソフトから、あるいはハードからスタートしていても、相手領域でもそれなりの知識と技術を持っているので、最悪のケースは自力でなんとか乗り切ることが出来ます




2,3年の経験ではこの域まで達することは出来ませんが、志をもって、常に広い視野で勉強を続けることで自らのスキルをUPして、やっと到達できます




上の説明では、ネット関係しかあげていませんが、組込みでもデーターベースを使うことも増えてきているようですし、いま一番新しいところではmRubyがHOTです


私の場合で言うなら、Cに一番近いですが、ソフト業界に入る前に、ある程度の電子回路の知識があり、電子回路の設計に進むか、ソフト開発に進むかということで一時迷ったことがありますが、

ソフト開発の道に進んで、ブリッジエンジニアとなるべく、努力を続けてきました(当時そのような言葉はありませんでしたが)


また、規模の大きな開発になってくると、自分の担当部分にしか目が行かなくなりがちですが、システム全体を大まかにでもとらえて、その中での自分の担当部分の役割を確認しておく癖をつけておくことで将来の自分のスキルアップにつながると思います




2012年7月1日日曜日

組込開発の測定器 :オシロスコープ

組込みシステムで 扱う電気信号がどうなっているのかを、目で見える形にしてくれるものが

オシロスコープです


以前には、アナログ式のオシロスコープ(ブラウン管を使った緑色のものでぼわーーんと暗くなる)で信号の波形を見るものでした


それを、デジタル処理で実現したものがデジタルオシロスコープです(緑色のCRTを使ってるものも当然ですがあります)


単純に波形を見ることはもちろん出来ますし、周波数を計ったり、電圧を測定することも出来ます



入出力の信号を見ることで、ソフトが正しく動作しているのか、あるいはハードに問題があるのかを

見つけるために使うことが多いです


外部信号からの割り込み動作が仕様どおりになっているかどうかとか


価格によって性能はぜんぜん違います

今は安くなってはいますし、USB接続でPCとつないでデータを保存できるものもあります


測定できる入力数、測定できる周波数の範囲等で大きく変わります



また トリガー機能、メモリー機能等あります


トリガー ある条件が整った時を基準として、前だったり、後ろだったりの状態を

メモリーすることが可能です、

トリガーから時差をつけてメモリーするというディレイ機能など使いこなすには、それなりの知識が必要となりますが、使えれば役に立ちます


何かのプロジェクトで身近にデジタルオシロスコープがある状況にある方は、管理している人に

お願いして、あれこれと触っておくことをお勧めします

2012年6月22日金曜日

メモリマップドIOとIOマップドIO

組込みシステム開発の場合、ハード屋さんから、割り付け表といわれる資料を貰います


その資料には IOとかアドレスとか書かれています

IOはInput,Outputの略ですね

CPUからの制御線には M,IO,R,Wと有ります(CPUごとには違いますが簡略化します)

それとデータバス、アドレスバス、これを組み合わせて周辺機器(チップ)とのやり取りを行います


IOマップドIO

IOマップドIOというのは、IO信号と、アドレス、Write or Read 信号で外部とのやり取りを
行います


IO命令というのがマシン語レベルであるので、理解もしやすいと思います

ただし、IO命令に使われるアドレス幅に制限がある場合があります

IO命令自体も高速に行われる事が多いのでデータ量が小さい場合には便利です

CPU内臓のIOとは別に使える場合もあります

割り付け表 には IOとして書かれていると思います



<メモリマップドIO>

メモリマップドIOでは、広大なアドレスが使えます

通常、アドレスバスの2のn乗のアドレスバスの信号を一つまたは複数使って
周辺機器(デバイス、チップ)へのアクセス信号をハードウェアロジックで作成します

最近のCPUではアドレスバスの幅も広く、またやり取りするデータ量も多いので、
この方式はよく使われます

IOなのに、なんでメモリーアクセス?って、少し頭が混乱する原因です

欠点は、メモリーアクセスになるので、少し動作が遅い場合があります

ただし、最近のCPUでは、ある程度のアドレスの範囲でアクセス速度を指定できますので、問題にならない場合も多いです

この、アクセス速度の設定などは スタートアップルーチンで記述する事が多いです

特に画面周りがあるものでは、データ量が多くなるので、多いと思います









2012年6月18日月曜日

CPUの動作の仕組みを理解しよう

タイトルだと、たった1行で終わります。

組込み開発に使われるCPUには、膨大な種類があります。

Z80,H8,SHXX,ARMシリーズ、、ETC

プロジェクト毎に、CPUが違ったり、一つの機器に複数のCPUが利用されていることもあります

実際に組込みの開発を行うとなると、膨大な量の資料に目を通す必要があります




一つのCPUに関して、熟知すると、他のCPUに関しても応用が効くようになります


本格的に理解をしようと思う場合、アセンブラの知識が必要になりますが、なんとなく、読めれば


かけなくても大丈夫だと思います

今は、ほぼCコンパイラで99%の処理を記述できると言ってもいいでしょう


要素をあげておきますので、機会があれば調べてみてください

今回の記事では、個々の詳細については触れないで、別の機会に


・リセット時の動作
・PC(プログラムカウンタ)
・SP(スタックポインタ)
・レジスタセット
・割り込み
・タイマー
・割り込みベクター
・NMI
・WDT(ウォッチドッグタイマー)
・IOポート

・機能設定レジスタ(特殊レジスタ)


基本的な機能だけでもこれぐらい、これ以外にも

・シリアル通信
・AD/DA変換
・CPU動作モード(低速・高速、低消費電力モード 等)

CPU自体に、外部とのIOの機能が内蔵されている場合はその機能



ざっと思いついたままに書いていますので、随時更新していきます


2012年6月15日金曜日

組込みでこそ活用できるソースのバージョン管理

ソフト開発を行っている人なら ソースのバージョン管理ツールという単語は良く耳にしていると思います。

 組込開発の場合ハードの開発が同時に行われている場合、一度改造されて、その後また、元に戻る場合があったりします

 その場合、バージョン管理を行っていると、元の状態に戻すのも簡単です


また、ハード自体は同じで、派生品の開発などが行われる場合、バグが発生した場合に、両方のプロジェクトに対応内容を反映させることも容易になります


CVS,SVN(Subversion),Git 等あれこれとあります

大まかにどんな感じかというと

・個々のファイルを更新して登録する時に、個別にバージョンが自動で登録される
 (この時に、更新内容を登録すること、バグ管理とか使っている場合バグNo等有用)

・中間リリース、あるいはテスト部隊に評価バージョンを渡す場合に、プロジェクト全体をひとかたまりのバージョンとして登録しておく

 
・派生プロジェクトが発生した場合は分岐を作成する

・現在(現在に限らず任意)のファイルと以前のファイルの変更箇所を見ることが出来る


もしも、まだ、使ったことが無いのでしたら、WinCVSあたりをとりあえず使ってみて、バージョン管理がどんなものか実感するのがいいと思います


既にかなり枯れた(こなれている)ものになっていて、リポジトリ(管理データの大元)もローカルディスク、ネットワーク上の共有ディスクでの運用も可能ですし、LinuxサーバーでPserverの設定の仕方等も簡単です


ただ、闇雲に毎日仕事の終わりに登録するってのは駄目ですけどね

最低限、コンパイルが正常に通り、機能的にも正常に動作しているってのがありますけどww



2012年6月12日火曜日

組込みで欠かせないICE

風夢です。 ICEという名前は組込み開発をした事のある人なら、ほぼ全員知っているとは思いますが、それ以外の方にはなじみが無いかもしれないです。

簡単に言うと、デバッグを行うためにある高額な開発機材です。

操作するイメージは統合環境のデバッガとほぼ同じような感じです。

InCircitEmulatorの略だったような気がします(スペルに自信なし)


<フルICE>

初期のICEは、ターゲットとほぼ同じCPUが乗っていて、開発用のボードに専用のソケットをつけて、
そこからフレキシブル基盤でICE本体と繋げるようになっていました。ICEの代わりに内蔵ROMにプログラムを書き込んでやると単体で動作するものもありました。

この頃のICEは非常に高額で、1セットの金額で簡単に車が買えるようなものでした

まだまだアセンブラでのデバッグも多かった時代で、サポートソフトも貧弱で、Cの構造体の中身の
数値が見れなかったり、ローカル変数が見れなかったり、動作中にブレークポイントを設定した時に
動作がおかしくなったりして、独特の世界でした

ただし、ハードウェアブレークポイントの設定が出来る(特定アドレスのアクセスでブレーク)とか
実際のCPUが搭載されている(ターゲットとまったく同一ではないけど)メリットはありました

高級だったので、プロジェクトに一台のみというのが当たり前の時代でした


<ROM ICE>

その後出てきた、ROM ICEは、ROMの代わりにRAMにROMの内容を書き込んでやってターゲットボードに接続して、そのほかは何本かの制御線を接続して使うものでした。

価格はかなりやすくなりました。

ただし、デバッグ機能を実現するために、開発用と、リリース用で、一部メモリーマッピングやら
割り込み関係の変更を必要とされる場合もありました。

<JTAG ICE>


さらに時代は進んで、JTAG ICEというものが出てきて一般的になっています。

CPU自体にデバッグサポート用の機能が組み込まれて、接続も2個の小さなコネクタだけで
使えるようになりました

また、開発中のボードにはJTAG用のコネクタを実装して、完成品には付けないという形で
開発専用の基盤を作成する必要もなくなりました

また、CPUのベンダ毎に開発用の統合環境も提供され、デバッグ以外にも、スタートアップルーチンの一部とか、割り込みベクタの設定とかかなりの部分もサポートされて、以前よりも
ソフトウェア開発者の負担が減っているのも大きいです


ざっと、簡単にまとめてこんな感じかな

2012年6月11日月曜日

データシートは印刷したほうがいいかも

組込みシステムの開発で避けて通れないのが、データシートです。

データシートとは、色んなデバイスの、電気的特性とか、動作の仕方とか、主に読むのはハード屋さんですが、ソフト屋さんも必要になる事があるので、開発時には入手しておく事が望ましいです。


日本語で書かれているものもありますが、英語で書かれているものも多いです。

最初は判らないかも知れませんが、データシートを読む程度ならそんなに難しい英語は出てこないので、数をこなすしかありません。

特にメモリー関係は、英語で書かれているものが多いです、RAMは問題になる事は比較的少ないですが、EEPROM等は書き換えのロジックを作成する必要が、ほぼあるので、ソフト屋さんが自分で考えないといけない事も考えられます


また、大昔はデーターシートは紙で提供されることが多かったのですが、PDFで提供されることが最近ではあたりまえになっています。


PDFでみるとどういう経緯でこの設定にしたのか、トラブルが発生した時に悩んで、時間を無駄に
浪費することがあるので全体とはいいませんが、設定に関わる部分だけは、印刷して重要な部分にはマーカーを引くとか付箋をつけるとか、しておくと後々役に立つことがあります

2012年6月5日火曜日

空きポートの活用(デバッグ)

組込みシステムの場合、全てのポートを使い切ることは少ないです。


 また、製品完成時には、ランプその他に使用するIOポートも、開発中にはシリアルポートとして
流用できる場合も多々あります。

 ハードデバッグ、あるいは、アプリケーションのデバッグ中に特定の機能をチェックするために、
シリアルポートを利用して、ターミナルモードの様な物を組み込むと、チェック作業の能率があがる
事も多々あります。


 ただし、パターン設計時にその様なポートを、最低限半田付けできるようになっていないと難しいかもしれません。

 理想的にはランド、もしくはTP(テストポイント)になっていればいいのですが。


 また、シリアルポートが使用できても、TTLレベルでの出力になっている場合が多いので、レベルコンバーター(MAX232?等)を使ってPCとの接続を出来るようにしないといけません。


多少、ハードルは高いとは思いますが、実現できた場合には

・ハードの機能検証をターミナルモードで実行できるようにしておけば、
 ハード検証作業(修正後の確認を含む)にソフト技術者がかける手間が減らせます


・複数人数で開発中の場合に、アプリケーション担当者が(データ作成だけの場合もあり)
 ICE等の操作方法をしらなくても、動作確認が出来る

・上の例と半分かぶりますが、ICE実機、ROM実機とある場合にICE実機を取り合うことが減ります

・PC上のソフトの場合はデバッグプリント等もできますが、組込みシステムでは出来ないことが
 多いので、内部状態をシリアルで出力して、PCにてログしておくようにしておくと、異常な動作を
 発見した場合の解析に役立ちます


・場合によったらカバレッジテスト的にも使えるかもしれません




2012年6月1日金曜日

トラブル1(回路図・・・)

ややこしい話ばかりでもつまらないので、ちょっと 普通ではありえないトラブルの例をあげてみます。


ハード屋さんは、好くある事ですが、デバイスメーカーの標準設計を基本にして、そこに独自の回路をシステムの必要性に応じて、追加して設計します。


その状態で回路図になって、そこから基盤設計(パターン、アートワークとかが関連用語)をして
試作基盤として、やってきます。

その段階で、ソフト屋さんが、ハードの初期設計の動作確認を行うケースもあるのですが、
そのトラブルが発生した基盤では、うんともすんともまったく動作しませんでした。


基盤自体は3層基盤だったか4層基盤だったと思うのですが、まったく何も動きません。


回路図とテスターを頼りにあれこれ探す前に、まずは自分のソフトやら、マッピングの設定が怪しくないかと何日間かは過ごすわけです。


ICEを使って、プログラム自体はそれなりに動いているものの、なぜかデバイスは反応してくれないので、さすがにハードを疑って調べた結果


リファレンス回路をもとに設計したときにデータバスが逆転していました。

データのビット並びが逆になるので、動かなくて当たり前ですが・・・・


こういうトラブルもたまには あるということで・・・


詳しいことはもう、覚えていませんが、よく見つけたもんだと、、どれだけ苦労したとかは

ご想像にお任せします。


2012年5月31日木曜日

このブログについて

あまり親切なサイトでは、ありません。

読者のレベルも想定できないので、用語とかわからないこともあるかも知れませんが、

Google先生にお願いして調べてみてください。


グーグルのブロガー自体も、今のところ、よく理解できていませんので、そのうちにはメールフォームその他つけれればとは思いますが。

とりあえずは、書きたい事を書いていきます。


コメントの管理とかもいまいち??です



組み込みシステムは一般ソフトと何が違う?

開発要員が5人程度の場合だと、4名ほどは通常のソフト開発と変わることは無いと思います。


ほぼ8割の部分は通常のソフト開発と同じです



違いがあるのは

一般的なソフト開発の場合は、パソコンなり、業務用のコンピュータなりの完成されたデバイス(機器)に対して、情報のやり取りを行いますが、組み込みシステムの場合は、そこの部分がプロジェクトごとに違うことになります。


組み込みシステムの開発要員の中に参加するだけの場合は、そんなに怖がる必要は無いと思います。



ただし、ソフト開発のリーダーの場合は、そうは行きません、使われているデバイスの仕様、OSの仕様(OSを使う場合、組み込みシステムではOSが無い場合もあります)、通信が発生する場合もあります。

また、ハード部門が十分な知識を持っていてくれる場合は、サポートを望めますが、最近はLSI側の機能に関しても、プログラムで設定を行うことが多い為、ハード屋さんもよくわからないことが、多々見受けられます。


 また、ハードの開発と平行してソフト開発を行う場合には、評価ボードと言われる、メーカー提供のボード上で、先行して、ソフトウェア開発を行って、試作された基盤(ハードウェア)の評価を行う事が
必要な場合もあります。

 この場合は、IOやらメモリーのマッピングが違う場合もあり、(アドレスが違う) 簡単に移行できるように準備をしておく必要もあります。


長くなるので、ざっと箇条書きにしておいて、後日詳しく記事を書くことになると思います

・デバッグ段階で、ICEと言われる測定器を使います
 CPU毎にICEが変わるので、プロジェクトごとにICEが変わって操作方法も変わります

・開発中のハードの場合、正しく動作しているかどうか確認するためにオシロスコープという
 測定器を使う場合もあります

・シリアル通信やネットワークの通信を行う場合には、プロトコルアナライザという測定器を
 使う場合があります

・また、ROMライターという機械で開発したソフトをIC(ROM)に書き込む作業が必要な事も
 あります


まだまだありますが、とりあえずはこのあたりで。


組み込みシステムとは

ブログを作成するにあたって意外と、組み込みシステムに関するブログが少ないなというのが、印象でした。

単語自体は、耳にすることの多い、組み込みシステムですが、体重計から、テレビ、ハードディスクレコーダー、携帯電話、スマートフォン等多くのものが、組み込みシステムに該当します。


その昔は、ハードを設計する人がアセンブラでがりがりとコードを書いていた時代もあるようですが、今はアプリケーションの充実に伴って、組み込みシステムと言っても、膨大なソースコードが
必要になることも多いです。

また、LinuxやらAndoroid、iTron等のOSを採用していることも多いです。


現在ソフト技術者の方で組み込みシステムと聞くだけで、敬遠される方も多いでしょうが、
実際の開発では、ほとんどの部分をC言語で開発するのが実態だと思います。


開発の規模は、小さいものなら、ハード自体は既にあるものとしても、ソフト1名から始まって
携帯電話や情報家電機器では1000人規模のものもあります。

人数が多い開発に関してはそれぞれにノウハウがあると思いますので、10名以下を
想定して、このブログを書いていきたいと思います。