問題タブ [keil]
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 - ARM7で原子的に比較して交換する方法は?
RTOS のさまざまなタスクと IRQ コンテキストによって共有されるグローバル変数を変更したいと考えています。したがって、この変数をアトミックに変更する必要があります。私の現在の実装では、ステートメントをアトミックに変更するために enable_irq/disable_irq 関数を使用しています。
アトミック操作のヘルパーとして、__sync_bool_compare_and_swap
GCCドキュメントの関数を見つけました。
私の現在のツールチェーンは KEIL MDK ですが、以下に示すアプローチに切り替えたいと考えています。
__sync_bool_compare_and_swap
ARMv4 コマンド セットで (インライン アセンブリとして) 関数を記述するにはどうすればよいですか?
c++ - サードパーティのソース ファイルで警告を抑制する方法は?
私は、GCC と Keil の警告抑制プラグマに精通しています (これらは異なりますが、使い方はほとんど同じです)。サードパーティのヘッダーの場合、次のようなことができます。
しかし、サードパーティのソースからの警告を抑制するにはどうすればよいでしょうか? Eclipse+GCC と Keil の両方がそれらを生成します。私が思いついた唯一の解決策は、他の .c ファイルを含むwhapper .c-file を作成することです。これは非常に汚いトリックのようです。
他の解決策はありますか?
assembly - 正しいアドレスのデータ領域に定義された文字列が見つかりません
Cortex用のARMアセンブリで定義された2つのセグメントがあります-M4、1つはコード(読み取り専用)、もう1つはデータ(読み取り書き込み)です。読み取り専用メモリはアドレス 0x08000000 で開始し、RW メモリは 0x20000000 で開始するように定義されています。各セグメントは独自のアセンブリ ファイルで定義され、ラベル名は正しくエクスポート/インポートされます。
データ セグメントは次のように記述されます。
コードでは、LDR R0, =myString を使用して文字列のアドレスを読み込んでいます
R0 はアドレス 0x20000000 を R0 に正しくロードします。しかし、Keil uVision IDE メモリ ビューを使用すると、そのアドレスのメモリが空になります。代わりに、読み取り専用領域のコードの直後に文字列を見つけました。文字列をメモリ内の正しい場所に配置する方法を教えてください。
ありがとう
c++ - uint8_t と数値の比較
C++ を正しく理解していないのでしょうか、それともコンパイラのバグでしょうか?
(ab) の結果が比較演算で第 2 オペランドの型に暗黙的にキャストされたため、doNothing は (予想どおり) 呼び出されません。数値の場合は、signed int です。わかった。
doNothing はまだ呼び出されていませんが、その理由がわかりません! 数値を明示的に uint8 にキャストしました!
doNothing が最終的に呼び出されるようになりましたが、これもなぜでしょうか? 2つのuint8の減算はどのようにintを返すことができますか?
コンパイラは、ARM Cortex M3 用の uVision ARMCC です。
c - 関数宣言のマクロが機能しない
関数宣言を簡単に変更するためにマクロを使用したいのですが、今のところは次のとおりです。
MYDECLARATION(my_thread); を呼び出すと、エラーが発生します:
識別子リスト パラメータは、関数定義でのみ使用できます。
私はそのように ## を使用しようとしました:
しかし、コードで : が得られると確信voidmythread (void)
しています。それを行う方法について何か考えはありますか?
また、一般的なマクロに関するいくつかの優れたチュートリアルを知っているかどうかも興味があります.
ビットマスク コメントへの応答:
私はKEILコンパイラを使用しており、スレッドは次のように機能しています:
私の電話:
私の定義:
新しいテスト:
これは機能しています...だから、機能していない関数名にマクロパラメータを使用するのは事実だと思います...