- ベストアンサー
CPUの処理量を減らすコーディング(組み込み)
処理が重くてプログラムが回らないので、どうにかして実行量を下げ ようとしています。 CPUはSH2(80MHz)、内蔵メモリ(ROM、RAM)と、 外付けのフラッシュROM、RAMがあります。 OSはuItron仕様のRTOSで、プログラムはC(一部アセンブラ) で記述しています。 作成開始前の想定では、昔、68000の12MHzで動かしていた ソフトにシリアル通信が少し増えた程度なので、CPUの能力不足で 困るなどとは想像してなかったのですが、CPUは高速化したものの 外付けメモリの速度が足りないので外部のバスアクセスは実質10M Hz程度しか出ないということが後で分かりました。 内蔵メモリだけで動かせば外部使用時の数倍のパフォーマンスが出る のですが、容量が少なくてソフト全体の20%ほどしか使えません。 I2Cバス(400kbps)と子局機器とのシリアル通信(115 kbps)がメインなので、これらの割り込み処理だけでも内蔵メモ リで駆動できないかと模索中です。 他には、関数の引数(スタック待避・復帰の処理量)を減らすなどを 試していますが、これといった効果が出ていません。 ソースは10万行くらいあり、コーディング流儀の微細な変更でも、 ”積もれば山”の可能性があります。 何かいい案があったら教えてください。
- みんなの回答 (10)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (9)
- R32C
- ベストアンサー率39% (115/290)
回答No.9
- R32C
- ベストアンサー率39% (115/290)
回答No.8
- R32C
- ベストアンサー率39% (115/290)
回答No.7
- R32C
- ベストアンサー率39% (115/290)
回答No.6
- R32C
- ベストアンサー率39% (115/290)
回答No.5
- jacta
- ベストアンサー率26% (845/3158)
回答No.4
- 1839cc
- ベストアンサー率54% (12/22)
回答No.3
- Interest
- ベストアンサー率31% (207/659)
回答No.2
- jacta
- ベストアンサー率26% (845/3158)
回答No.1
お礼
色々とありがとうございます。 いくつか期待できそうなので、さっそく試してみます。 で、近況ですが、おかげさまで、いくつか試してなんとか 予定域まで効率の引き上げつつあります。 やったことは、 1)欲しい演算処理を割り込みの中で行う。 下層タスクで演算させると、途中に割り込まれる度にジャンプ処理 とスタック操作に時間を食われて演算完了が遅れるので、いっその こと他に影響のない範囲で押し込んでしまえばと試したら最終目的 には近づきました。(その分他がとばっちりですが) 2)頻度の多い処理だけを厳選して内蔵ROMに。 デバッグライトをソフト各部に埋め込んで1分あたりの実行回数を 計測し、上位10%を選んで内蔵ROMに詰め込んでみるとかなり の効果がありました。 今分析結果を基に呼び元の処理を見直し中です。