−プログラミング−
|
|
初版 2002年8月20日作成 | |
https://www.sessame.jp/ | |
責任編集 坂本 直史 | |
言語に依存しない項目 |
・使用する言語
・ネイティブ開発かクロス開発か
・デバッグ環境
・レジスタ構成
・レジスタの本数
・アドレッシングモード
・間接アドレッシング
・16ビットのレジスタを8ビット2本にできるか
・キャッシュ
・メモリマップドI/O
・浮動小数点/固定小数点
・ビッグエンディアン/リトルエンディアン
<CPUに依存しない情報>
・ハードウェア制御のタイミング
・エッジトリガとレベルセンシティブ
・チャタリング
・メモリの種類
・速いメモリ遅いメモリ
・フラッシュの場合はリライトを抑える
・ROM化するかしないか
・スタートアップの仕組み
・セルフテストの必要性
<コーディングで理解しておくべきソフトウェア的概念>
・サンプルを出してやる
・禁止
<ソフトウェア的に気を付けるべき部分>
・コンパイラは信用するな
・最適化オプションを外してみる/付けてみる
・ソースでなくバイナリに対して責任を持つという衿持
・言語そのものの仕様に関わる部分
・ベンダごとの拡張仕様に関わる部分
・コンストラクションとデストラクション
・mallocとfree
・システムコールが発行されるので
思っている以上に負荷がかかる
・メモリリークの防止
・newとdelete
・リソースリーク
・同じレイヤーでコンストラクションとデストラクションを行う
・スタックサイズ
・スタックサイズを把握しておく
・コンパイラにも依存する
・両方のアプローチが必要
・ハードウェアレイヤーからボトムアップしたものと
設計からトップダウンで来たものを上手くミックスする
<チューニングと最適化>
<チューニング>
・ROMを一度RAMにコピーする
・時間のかかるスカなコーディングを避ける
・再利用性最適化
・移植性最適化
・省電力最適化
<デバッグ>
・ダミーのスタブやドライバは先に作成しておく
・アサーション
・メンテナンスが容易なコーディング
・ブレークポイント
・トレース
・ウォッチ
・printf を自分で実装する
・会社資産の printf を再利用する
<コードレビュー/コードインスペクション>
・コードインスペクション
・ウォークスルー
・ハンガリアン記法
・複雑度
・KLOC数
・実行経路数
<品質の確保>
・C0/C1/C2カバレッジ
・C0は最低限のマナー
・MC/DCカバレッジ
・標準に則っているか
・バッファオーバーフロー
・セグメンテーションフォールト
・バージョン管理
言語に依存する項目 |
<構造化系言語に依存する項目>
<手続き型プログラミング>
・スパゲッティプログラム
・1 entry 1 exit
・構造化チャート
・PAD
・HCP
・スコープを明確にする
・グローバル変数は多用するな
<C言語に依存する項目>
※C言語に関する部分はMISRA-Cを参考にして挙げる
・配列とポインタ
・暗黙のint
・16ビットか32ビットか
・typedef して使う
・変数が #define されているか
・副作用
・K&RとANSI
<アセンブラに依存する項目>
・積和演算
・キャリー付き演算
・スーパーバイザーコール(特権命令)
・スタートアップロジック
・クリティカルセクション
<OO系言語に依存する項目>
※J-Tasterを参考にして挙げる
・多重継承はあまりやるな
・深い継承はしない
・Cohesion に気を付ける
・あるメソッドで他のメソッドを呼ぶ
・演算子オーバライドは禁止
・関数を使うな
・例外もある
・異常にメモリが少ない場合
・携帯のJavaでゲームを書く場合とか
・実行効率も考える