問題タブ [misra]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 組み込みソフトウェアのミスラ規格
大量のコードを MISRA に準拠させる必要があります。最初の質問:経験に基づいて、組み込みシステム用に適切に記述されたコードを渡すための見積もり
を
誰かに与えることができますか? 「よく書かれた」とは定義が不十分で曖昧であることを理解しているので、生の見積もりを求めます。
2 番目の質問: カスタマイズ可能 (つまり、特定の警告を抑制できる) で、自動ビルド環境 (つまり、コマンド ライン インターフェイス) で使用できるツールに関する推奨事項
。このタスクに役立つその他の有用な提案。
ありがとうイリヤ。
verification - MISRA-2004のコードチェックツールを検証するためのCファイルを作成した人はいますか?
MISRA-2004に準拠しているかどうかソースをコードチェックするためにPC-Lintを使用しています。これは安全関連のプロジェクトであり、TUVによる証明書を目指しているため、ツールに対する信頼の証拠を示す必要があります(「何度も使用した」などは受け入れません)。
私たちの目的は、ネガティブテストの完全なセットを用意し、MISRA-2004セットの各ルールについてツールをチェックし、それを破り、ツールによってエラーまたは警告を強制することです。
誰かがすでにこれを行っており、あなたはあなたの結果/ Cコードを共有する用意がありますか?
c - MISRA Cへの準拠を確認するための無料ツール?
MISRA Cへの準拠をチェックするオープンソースまたは無料のツールはありますか?
c - NULL ポインタ関数の引数をキャストすると、Misra ルール 11.3 に違反しました
を次のように定義しNULL_PTR
ます0U
NULL_PTR
次に、これを引数として関数を呼び出します。
呼び出された関数プロトタイプ:
コンパイル時に、Misra はルール 11.3 違反エラーを発生させました (ポインター型と整数型の間でキャストを実行しないでください)。
しかし、次のように渡せばNULL_PTR
違反にはなりません。
どちらがより良い方法ですか?Misra 11.3 ルールを抑制しますか、NULL_PTR
それともキャストせずにそのまま渡しますか?
java - MISRA C に相当する Java はありますか?
一部の言語では、ルール/ベスト プラクティスなどがあります。ソフトウェアの安全性を促進し、期待される実行時の動作を確保するなどです。頭に浮かぶのは、C/C++ の MISRA と Ada の Ravenscar プロファイルの 2 つです。コードがこれらの基準に従っていると刻印されている場合、コードには通常、あたたかいあいまいな感覚があります。Javaにそのような標準はありますか?
c - ツールがここでMISRAエラーをスローしたのはなぜですか?
MISRAが以下のコードでこのエラーを発生させないようにするにはどうすればよいですか?(unit16_t)でキャストしてみました。しかし、その後、明示的な変換は許可されませんでした。
複雑な式で、基になるMISRAタイプ「unsignedchar」から「unsignedint」への不正な暗黙の変換(MISRA C 2004ルール10.1)
c - MISRA C:2004、ビットシフトによるエラー
MISRA C:2004 チェックをオンにして IAR Workbench コンパイラを使用しています。
フラグメントは次のとおりです。
MISRA エラーは次のとおりです。 エラー [Pm136]: 基礎となる MISRA 型 "unsigned char" から "unsigned int" への不正な明示的変換 (MISRA C 2004 ルール 10.3)
unsigned char
上記のコードには何も表示されません。
なぜミスラはここでエラーをスローしたのですか?での議論 左シフトとは異なる昇格規則を持つ可能性のある乗算について説明します。
私の理解では、コンパイラは式を小さいサイズに降格するのではなく、より大きなサイズのデータ型に昇格させる必要があります。
ここで実際に何が起こっているのですか?
コードを MISRA C:2004 に準拠させるにはどうすればよいですか?
編集1:
エラー行を次のように変更します。
エラーが消えません。
coding-style - MISRA のコメント ルールの根拠
MISRA の規則 2.2 では、「ソース コードは/* ... */
スタイル コメントのみを使用する必要がある」と規定されています。このルールの根拠を知っている人はいますか? //
スタイル コメントの何が問題になっていますか?
c - tolower を static にする
tolower
「パブリック」スコープではなく 、標準ライブラリ関数を静的にする必要があります。
IAR Embedded Workbench コンパイラを使用して、MISRA C:2004 でコンパイルしています。コンパイラはtolower
インラインとして宣言しています:
コンパイラから次のエラーが表示されます。
これが私の提案する解決策です:
- 複数のモジュールで必要と
tolower
されるように、ダミーの状況で別のモジュールで使用します。 - を使用せずに機能を実装します
tolower
。これは組み込みシステムです。 - デフォルトでは空として定義されている「STATIC」マクロを追加しますが、ヘッダー ファイルがインクルードされる
static
前に定義できます。ctype.h
MISRA リンカ エラーの解決策を探しています。tolower
RS232_Server 翻訳単位だけ関数を staticにしたい(tolower
標準ヘッダー ファイルで static にすると、他の将来のプロジェクトに影響を与える可能性があります)。
編集1:
コンパイラは、ARM プロセッサ用の IAR Embedded Workbench 6.30 です。
ARM7TDMI プロセッサを 32 ビット モード (Thumb モードではない) で使用しています。関数は、デバッグ ポートで使用されます
。tolower
編集2:
_LocaleC_isupper
とのエラーも発生しています_LocaleC_tolower
解決:
- Michael Burr の推奨に従って、ベンダーに問題を通知しました。
- ローカリゼーションの問題のため、ライブラリ ルーチンを書き直さないことにしました。
- gbulmer の提案に従って、main.c ファイルに関数ポインターを実装しました。ただし、IAR が問題を解決した後に削除する必要があるため、これは信じられないほどコメントされます。