トップページ⇒tech
18コメント11KB

”組み込み”プログラムと移植性・保守性

■ このスレッドは過去ログ倉庫に格納されています
0001休職中プログラマNGNG
私は、受託開発を主としたソフトハウスで、組み込み系のプログラマをしています。(現在は、病気で休職中です。)
”組み込み”プログラムにおいて、移植性・保守性を損なわず、かつ、高速でコンパクトなコードを作成するノウハウに関して、このスレで意見を交換できればと思います。

私自身の経験としては、”V832・GreenHills”から、”SH4・日立純正コンパイラ”へC言語のプログラムを移植するという作業をした事があります。
お客様から仕事を請け負った時点では、
�@初期化や終了処理に関して仕様変更があるので、対応してほしい。
�Aメインとなる処理部分(音声入力に関して専門的な知識が必要)は、コンパイルを通すだけで良い。
という条件でした。
しかし、実際に移植して動かしてみると、メインとなる処理部分の実行時間が、クロック周波数が同程度であるにも関わらず、1.2倍ほど掛かる事が分かりました。
今にして思えば、請け負った時点で、2つのCPUの汎用レジスタの数の違いを、考慮するべきでした。
私は、SH4のアプリケーションノートを読んで、以下のような対策を取りました。
�@汎用レジスタに割り付けられる局所変数は4つという事なので、局所変数を減らす。
�A局所変数を減らすために、モジュールを細かく分割し、変数を各モジュールに閉じ込める。
�B最終的に、関数コール以外で、メモリアクセス(スタック)が発生しないように再コーディングする。
※お客様からのご要求もあり、アセンブラは使用しませんでした。
その結果、メインとなる処理部分の実行時間は、V832の0.8倍程度になりました。
今現在でも上記の方法が、ベストだったのかは、分かりません。

私の経験が、同様の問題を抱えてられている方の、ご参考になれば幸いです。
また、「自分はこういう工夫をした」という体験談や「自分ならこうする」といったご意見を支障のない範囲でお聞かせ下さい。
0002無色プログラマNGNG
私も組み込みで飯を食っていました。とくにワンチップでした。わ
けあって今は無職です。

>クロック周波数が同程度であるにも関わらず、1.2倍ほど掛かる事が分かりました。
CPU やコンパイラが変わるならば、その処理時間が数割変わるのは
当然だと思います。処理時間の低下は許さないとの条件だったので
しょうか?

移植と保守性のためには、できるだけ C で記述します。自前の
RTOS を使っていますが、そのコンテキスト・スイッチもできるだ
け C で記述します。シミュレータを介在させて VC++ でも動作す
るようにしています。組み込みの C と VC の両方を通すことによ
り、C ソースの移植性は高まります。

割り込みや I/O 周りは移植性を保つことには無理があります。こ
れらの部分はできるだけ他から独立させます。
0003デフォルトの名無しさんNGNG
>>1-2
ジサクジエーン
0004デフォルトの名無しさんNGNG
質問
組み込みってよく聞くけど、どういうもの?
パッケージアプリでも受注プログラムでもないみたい。
どういうのを組み込みって認識したらえーの?
0005デフォルトの名無しさんNGNG
>>4
なんつーか、大元の定義とは大幅にずれた認識だけど、オレ的には

よっぽどのことが無い限りアップデートも出来ないしログすら取れない
孤立無縁な機器に使用されるプログラム

のことを勝手に組み込みプログラムと呼んでる。
ケータイとかはどうか知らんけど、炊飯器やポットなんかはそうだよね。
0006デフォルトの名無しさんNGNG
>>4
・主にROMで実装するプリント基板上に固定されたプログラムを組み込みソフトという。
・組み込み機器用のソフト。
・組み込み機器とは独立して動く部品のこと。
例:炊飯器の制御基板。
0007デフォルトの名無しさんNGNG
6より5の方がいいな。
『「組込み」とは「組込みソフト」のこと』ってダメな辞書じゃないんだから...
0008デフォルトの名無しさんNGNG
組込み系は 単純に 機械・装置に組み込まれるって事でいいんじゃないの?

実際には4ビットマイコンから32bit迄幅広くて
 4ビットと32ビットじゃテクニックもスタイルも違うからひとまとめにはならないけどね


>>5 は最近はFlashマイコンの普及である程度のアップデート可能な時代だし
 限定しすぎかと
0009デフォルトの名無しさんNGNG
話はずれるけど、PCのBIOSも組み込みに分類されるの?
0010デフォルトの名無しさんNGNG
>>8
そうだね。便利な世の中になったもんです。

うちの電子レンジも、こないだ日立のサイトで
パッチが出てたからファームアップグレードしなきゃなぁ
0011デフォルトの名無しさんNGNG
大まかな分類としては
○1 4/8/16/32 の分類

○2 C使っていいかどうか?
   日立のH8は、あれは16bitだよね 実際、H16はH8の性能良すぎて出さなかったみたいだし

○3 さらに、RT OS/モニタの上で動かすか

 みたいな感じで分かれてると思う。 金が動くのは3がYesの場合だね
 後は厳しい 
0012デフォルトの名無しさんNGNG
1の
>移植性・保守性を損なわず、かつ、高速でコンパクトなコードを作成するノウハウ

って 結局さ、最適なアルゴリズムを素直にコーデングするって事しかないんじゃないの?
0013デフォルトの名無しさんNGNG
>>9
組み込み系のプログラマから言わせてもらうと、
PCのBIOSは組み込みに分類されます。
携帯システムも、HW固定でROMに焼くから、俺ら的には組み込み。

組み込み系のOSってのもちゃんとターゲットCPUごとにあって、国産ではμITRONとか。
0014デフォルトの名無しさんNGNG
至極当たり前の工夫だけど、うちの場合。

最近はμITRON以外にWindowsCEも相手にしなきゃならないとかで、
これまではHardwareマターごとにヘッダやライブラリを切り替えていたところに、
OSマターでもヘッダとライブラリを換えるようにしてまする。
OSのシステムコールをラップするライブラリと、タスク(CEではスレッド)メインルーチンがOSマターです。
ロジック部で#ifdefをどこまで減らせるかで、保守性は決まると思ってますが。
0015デフォルトの名無しさんNGNG
既存スレ
http://pc.2ch.net/test/read.cgi/tech/988084737/
0016休職中プログラマNGNG
>無色プログラマさん
情報、ご提供ありがとうございます。
お客様から「処理時間の低下は許さない」という絶対条件はありませんでした。
しかし、お客様に実行時間を報告した時「何でこんなに遅くなってしまうのでしょうね?」と質問され、明確に回答する事ができませんでした。
通常であれば、無色プログラマさんの言われる通り「CPU やコンパイラが変わるならば、その処理時間が数割変わるのは当然」と答えれば済む話なのですが、金払いの良いお得意様とあって、そのように回答するのは躊躇してしまいました。
本音としても、”V832・GreenHills”と”SH4・日立純正コンパイラ”の性能差が、数割もあるとは思えませんでした。
私は、2つのチップの汎用レジスタの数の差の方に、着目しました。

>>4さん
弊社では、主に、ROMに実装されるプログラムを組み込みプログラムと呼んでいます。

>>12さん
>結局さ、最適なアルゴリズムを素直にコーデングするって事しかないんじゃないの?
おっしゃる通りです。そのための工夫や体験談を交換しましょうという意図です。

>>14さん
情報、ご提供ありがとうございます。
私は、”Hardwareマター”と”OSマター”という用語に馴染みがないのですが、
”Hardwareの種別毎に”といった理解の仕方でよろしいのでしょうか?
(弊社では、WindowsCEからは、手を引くという方針です。
 替わりに、自社OSや統合開発環境を売るという方針で動いています。)

>>15さん
趣旨の違うスレだと思います。
0017 NGNG
移植性云々を議論しているのに>>1で機種依存文字を
使っているのはネタなのか.
0018デフォルトの名無しさんNGNG
>>16
主旨が違うという妄想はどこから?
組み込み相談室で移植性と保守性の相談をすればいいんじゃねえの?
■ このスレッドは過去ログ倉庫に格納されています