問題タブ [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.

0 投票する
1 に答える
6690 参照

c - ARM7で原子的に比較して交換する方法は?

RTOS のさまざまなタスクと IRQ コンテキストによって共有されるグローバル変数を変更したいと考えています。したがって、この変数をアトミックに変更する必要があります。私の現在の実装では、ステートメントをアトミックに変更するために enable_irq/disable_irq 関数を使用しています。

アトミック操作のヘルパーとして、__sync_bool_compare_and_swapGCCドキュメントの関数を見つけました。

私の現在のツールチェーンは KEIL MDK ですが、以下に示すアプローチに切り替えたいと考えています。

__sync_bool_compare_and_swapARMv4 コマンド セットで (インライン アセンブリとして) 関数を記述するにはどうすればよいですか?

0 投票する
2 に答える
1230 参照

c++ - サードパーティのソース ファイルで警告を抑制する方法は?

私は、GCC と Keil の警告抑制プラグマに精通しています (これらは異なりますが、使い方はほとんど同じです)。サードパーティのヘッダーの場合、次のようなことができます。

しかし、サードパーティのソースからの警告を抑制するにはどうすればよいでしょうか? Eclipse+GCC と Keil の両方がそれらを生成します。私が思いついた唯一の解決策は、他の .c ファイルを含むwhapper .c-file を作成することです。これは非常に汚いトリックのようです。

他の解決策はありますか?

0 投票する
3 に答える
1027 参照

assembly - 正しいアドレスのデータ領域に定義された文字列が見つかりません

Cortex用のARMアセンブリで定義された2つのセグメントがあります-M4、1つはコード(読み取り専用)、もう1つはデータ(読み取り書き込み)です。読み取り専用メモリはアドレス 0x08000000 で開始し、RW メモリは 0x20000000 で開始するように定義されています。各セグメントは独自のアセンブリ ファイルで定義され、ラベル名は正しくエクスポート/インポートされます。

データ セグメントは次のように記述されます。

コードでは、LDR R0, =myString を使用して文字列のアドレスを読み込んでいます

R0 はアドレス 0x20000000 を R0 に正しくロードします。しかし、Keil uVision IDE メモリ ビューを使用すると、そのアドレスのメモリが空になります。代わりに、読み取り専用領域のコードの直後に文字列を見つけました。文字列をメモリ内の正しい場所に配置する方法を教えてください。

ありがとう

0 投票する
3 に答える
11265 参照

c++ - uint8_t と数値の比較

C++ を正しく理解していないのでしょうか、それともコンパイラのバグでしょうか?

(ab) の結果が比較演算で第 2 オペランドの型に暗黙的にキャストされたため、doNothing は (予想どおり) 呼び出されません。数値の場合は、signed int です。わかった。

doNothing はまだ呼び出されていませんが、その理由がわかりません! 数値を明示的に uint8 にキャストしました!

doNothing が最終的に呼び出されるようになりましたが、これもなぜでしょうか? 2つのuint8の減算はどのようにintを返すことができますか?

コンパイラは、ARM Cortex M3 用の uVision ARMCC です。

0 投票する
1 に答える
3371 参照

c - 関数宣言のマクロが機能しない

関数宣言を簡単に変更するためにマクロを使用したいのですが、今のところは次のとおりです。

MYDECLARATION(my_thread); を呼び出すと、エラーが発生します:

識別子リスト パラメータは、関数定義でのみ使用できます。

私はそのように ## を使用しようとしました:

しかし、コードで : が得られると確信voidmythread (void)しています。それを行う方法について何か考えはありますか?

また、一般的なマクロに関するいくつかの優れたチュートリアルを知っているかどうかも興味があります.


ビットマスク コメントへの応答:

私はKEILコンパイラを使用しており、スレッドは次のように機能しています:

私の電話:

私の定義:

新しいテスト:

これは機能しています...だから、機能していない関数名にマクロパラメータを使用するのは事実だと思います...