問題タブ [armcc]
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 - Keil uVision のブール値に対する「列挙型が別の型と混合されている」という警告を防止する
CodeWarrior v5.2 で開発していたアプリケーションを、ARM C コンパイラ v5.06 を使用する Keil uVision v5.25 に移行しています。
コード全体で、プロジェクトのファイルでbool
次のように定義されているブール値を表すために使用しました。types.h
コードをコンパイルしようとすると、コンパイラは、比較の結果をこの型の変数に暗黙的に割り当てる行に関する警告を生成します。
これらの警告が生成される理由を理解しています。次のように明示的にキャストすることで、これらの警告を抑制できることを認識していますbool
。
ただし、ブール条件ごとにこれを行うのはかなり見苦しいです。bool
列挙型と他の型の混合に関する警告を完全に無効にすることなく、Keil uVision / ARM コンパイラを構成 (またはコードを変更) して警告を生成しないようにする方法があるかどうか疑問に思っていました。
これらは、コンパイラを構成するために使用できるオプションです。
c - arm コンパイラ 5 は volatile 修飾子を完全には尊重しません
次のコードを検討してください。
このマシンコードを生成します (ツールチェーンのobjdumpで生成されます):
現在、は揮発性であるため、ステートメントに到達status
したときにメモリから読み取られているはずです。関数からの戻り値が割り当てられ、メモリに格納されているという事実に関係なく、 ( ) をif
と比較する前に、いくつかのロード コマンドが表示されることを期待します。cmp
SUCCESS_CONST
process_package_header()
status
str
cmp
条件の動機を無視するようにしてくださいif
。その目的は、条件フラグとレジスタが物理的な機器によって外部から変更される可能性のある CPU に対する物理的な攻撃を検出することです。
ツールチェーン ARM DS-5_v5.27.0 ARMコンパイラ: ARMCompiler5.06u5 (armcc)
ターゲットはARM CortexM0+ CPU