2007年10月3日水曜日

虫はいつ現れるか!?

とーい昔、まだえんじにあだった頃のお話です。

やっとの思いである製品の試作品が完成して、客先にぎりぎりセーフで納品。
で、翌日、客先で重役の前で発表されたとの事。

ところがです、担当の方が説明している最中に液晶に表示されている文字の一部がかけちゃったのです...冷や汗ものでした!

早速、プログラムを調べるのですが一向に見つかりません。
再現もしないので困ってしまったのです。

いろいろ調べるうちにノイズの影響と判明。
マイコンとLCDコントローラー間の5cm程度の距離でもちゃんと対策しないといけないんだって実感しました。
この時は小容量のコンデンサをコントローラーのピンのすぐ側に追加してOK。
ほんとにすぐ側に付けないといけないんです。
クロックの配線にノイズがのるとこんな目に遭うのです。

プログラムのバグではなかったですけど、若気の至りの出来事でした。

むしを見つけるには、如何にして症状を再現させるかが重要なポイントです。
頻繁に発生する場合はいいですが、極稀にしか発生しない場合はプログラムを見直すよりも、
発生頻度を上げる工夫をした方が近道の場合もあります。

最近はバグじゃなくてワームに困らされています^^;

きーわーど:フェイルセーフ,ロバスト設計,フォールトトレーラント,信頼性工学

プログラムに使用する言語は何?

技術者ではないのですけど、今でも時々製品のプログラムをしています。

使用するマイコンは何でもOKなんですけど、開発ツールはこだわりがありまして、
小規模マイコンでは未だにアセンブラを使用しています。

それも構造化アセンブラと呼ばれるものです。
NECの78kシリーズの開発環境には標準で付属しているので好んで使用しています。
プリプロセッサーとして実装されています。

構造化出来るし、ラベルをいちいち考えなくていいのでめちゃらくちん。

遠い昔、アセンブラを利用していた時はラベルを考えるのに一苦労してたんですよね~
だんだんいい加減なつけ方になってきて"AAA","BBB"なんて付けたりして、
さっぱし意味が分からなくなっちゃうんです。
でマクロ機能で似たような機能を実現していたんですよぉ。

C言語と違ってコンパクトでかっとびのプログラムが出来ちゃうんです。

いっぺんつこてみての! <- 福井弁です^^~

テルとカツオのC言語講座 その2-volatileとは?

ハードを制御するプログラムを作成していると、最適化を抑止したい場面に遭遇します。

極端な例ですが、出力ポートに連続して信号を出力する場合を考えて見ます。

PORT1=10;
PORT1=20;
PORT1=30;

こんな場合、まともなコンパイラなら最後の行だけを実行します。
でもこれではマイコンの出力ポートには思った通りの信号は出力されません。
で、この変数に付いては最適化をこの抑止してねとコンパイラに伝えるのがvolatileです。
英語の本来の意味は調べてみてね。

EEPROMはnon...memoryです。

今日のレッスンはこれまで。

テルとカツオのC言語講座 その1-#pragmaとは?

C言語で使用されている#pragmaとは?

#pragmaはコンパイラ独自のコンパイラに対する拡張命令(機能)を提供する為のものです。
次の例はルネサステクノロジーのマイコンでの使用例です。
インラインアセンブラの様な使い方も可能な様です。

#pragma sfr
#pragma di
#pragma ei
#pragma interrupt INTTM80 vect_INTTM80

ちなみに#asmでインラインアセンブラを記述出来る処理系もあります。
C言語とアセンブラの両方を使うときびきびした動きのプログラムを作成出来ます。
プログラムが処理系に依存するのはお勧めではないですが、
ソフトはハードよりも硬いらしいのでこのような機能もどんどん使用して性能向上した方がいいと思っています。
コンパイラの最適化機能に頼りすぎたプログラムはどーも信用出来ません。
コンパイラの最適化の癖をつかんでそーすを記述するのが良いと考えています。

カツオ君、どう思いますか?