問題タブ [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 - 1 つのシーケンス ポイント内で volatile 修飾された型の読み取りアクセスが 1 つしかないのはなぜですか?
次のコードがあるとします。
MISRA C 2012 Rule-13.2に問題があることがわかったので、調査することにしました。私はここ(http://archive.redlizards.com/docs/misrac2012-datasheet.pdf)で次のことを見つけました:
1 つのシーケンス ポイント内で volatile 修飾された型の読み取りアクセスが 1 つだけであること
ここでの問題は、1 つのシーケンス ポイント内で volatile 修飾された型の読み取りアクセスが 1 つしかない理由を明確にする例や説明を見つけることができなかったことです。
違反しているコードの解決策を見つける必要がありますが、どうすればよいかわかりません。
これで、1 つのシーケンス ポイント内で volatile 修飾された型の読み取りアクセスが 1 つしかないことがわかりました。問題は、なぜですか?解決策を実装するために理由を知り、コードを変更する理由をここにいる全員に説明する必要があります。
よろしく。
c - 匿名の列挙型が MISRA C 2012 ルール 10.3 に失敗し、名前付き列挙型が失敗しないのはなぜですか?
問題:
C で同じ enum 変数型に割り当てるときに enum 要素をキャストする必要があるのはなぜですか?
MISRA C 2012 ルール 10.3に失敗したため、このコードに問題がありました。
式の値は、より狭いエッセンシャル タイプまたは別のエッセンシャル タイプ カテゴリのオブジェクトに割り当てられません。
コードは次のとおりです。
そして、ツールに欠陥がある可能性があることを示唆する回答を受け入れました. 私はまだそれを信じていますが、それを修正しようとしてだまされて、現在の typedef enum 宣言に名前を付けました。
そして、私が知る限り、両方ともまったく同じです。しかし、その後、驚き!エラーが消えました!ルール チェッカーはこれをエラーとしてフラグ付けしなくなりました!!
次に、いくつかの調査を行ったところ、次の2つの質問が見つかりました。
C でのこれら 2 つの typedef スタイルの違いは何ですか?
と
そして、匿名の列挙型と名前付きの列挙型には微妙な違いがあることに気付きました。しかし、ルール チェッカーが別の形式について不平を言う理由を明確にするものは何もありません。
問題は、MISRA c 2012 のルール 10.3 に違反する可能性のある匿名列挙型と名前付き列挙型の違いは何ですか?
c - Cで揮発性変数の内容を適切に破棄する別の方法は何ですか?
マイクロコントローラーをプログラミングするとき、いくつかのフラグをリセットするために読み取る必要があるレジスターが時々あります。これらのレジスタはメモリ マップされ、コード内で volatile へのポインタとして宣言されます。
例として次のスニペットを想定します。
ここでは、ビットをリセットするためにregを読み取る必要があります。一部のビットをリセットする方法は、読み取る以外にありません。そのため、MISRA ルール チェッカーは、デッド コードがあり、それは正しいと不平を言っています。
私の質問は、「デッドコード」を回避するために**reg 値を読み取って破棄する代替方法は何ですか?** 投稿のメソッドを使用して、揮発性式の結果を void にキャストするため 、非常によく似ています。状況では、まだ MISRA c 2012 ルール違反が発生します。#define MODULE_SCUまたは構造体から何も変更できないため、正しい代替方法を使用することをお勧めします。
このスレッドから読み取ったように、void へのコンパイラーのキャストを黙らせたくありません: void キャストは何をしますか? void にキャストすると、オプティマイザーがその読み取りを最適化して削除する可能性があり、それは望ましくないためです。
スニペットの正確さにあまり注意を払わないでください。質問を説明するためにのみ含めました
c - misra c 2004 のルール 3.1「実装定義の動作が文書化されている」でカバーされる問題
この規則では、ISO/IEC 9899:1990 の付録 G に移動し、実装定義の動作の各ケースを調べて文書化する必要があります。
コードで何を手動でチェックするかを判断するのは難しい作業です。
このルールのために行う手動チェックのリストはありますか?
c - 列挙型の初期化中の MISRA-C 警告
私のコードで定義された次の列挙型
以下の行は、変数の初期化に使用されています。
そして、私は警告を下回りました
エッセンシャル タイプ 'Essentially Enum' の式の値は、エッセンシャル タイプ 'Essentially Enum' のオブジェクトに割り当てられます コメント: MISRA 10.3 (C90-2012 req.)
この警告を解決する方法を知っている人はいますか?
c - Misra C ルール 10.1 - 誤検出警告?
私の CCS 6.1 ARM コンパイラ (LM3Sxxxx Stellaris 用) は、次の警告をスローします。
「MISRA ルール 10.1。式が定数ではなく、関数の引数である場合、整数型の式の値を別の基になる型に暗黙的に変換してはならない」
次のコードの場合:
コードに問題はありません。誤検知ですか、それとも私のバグですか?
c - Misra C ルール 12.2 - 誤検出警告?
私の CCS 6.1 ARM コンパイラ (LM3Sxxxx Stellaris 用) は警告をスローします:
「MISRA ルール 12.2。式の値は、標準が許可する評価の順序にかかわらず同じでなければならない」
次のコードの場合:
コードに問題はありません。誤検知ですか、それとも私のバグですか?