問題タブ [synchronisation]

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 投票する
0 に答える
92 参照

raspberry-pi - Raspberry Pi での IMU-Camera の時刻同期

ラズベリーパイでMPU6050 IMUを使用しています。必要な周波数、たとえば 200 Hz でデータを取得したい場合は、0.005 秒ごとにデータが必要です。これを達成するにはどうすればよいですか?シリアル通信にはi2cを使用しています。これを行うことができる他の方法を自由に提案してください。

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

java - 同期ブロックが正しく動作しない

以下のコードを実行しようとしていますが、正しい出力が得られません。

期待される出力「ようこそ新しいプログラマー」

実際の出力「新しい歓迎プログラマー」

ここで私はどこで間違ったのですか?誰でも私を修正してもらえますか?

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

c - Cortex M0 で割り込みを無効にしない同期メカニズム

質問を明確にするために、次のものがあると仮定します。

  1. 静的ボタン オブジェクト:static Button_T sButton = {0};
  2. Button を取得する関数:メイン ループ コンテキストvoid GetButton(Button_T * p_button);から呼び出される
  3. ISR ハンドラ:void ButtonISRHandler(void);

仮定:

  1. GetButton実行は、実行されない割り込みによって中断される可能性がありますButtonISRHandler
  2. ButtonISRHandler実行は他の割り込みによって中断される可能性があります
  3. GetButtonButtonISRHandler実行にかかる時間は、2 つの割り込み呼び出し間の最小時間よりも短くなります。
  4. ボタン割り込みは、たとえば 10 ミリ秒ごとにトリガーされる周期的な割り込みです。
  5. ButtonISRHandlerボタンの PIN 状態の確認や、ボタンがタッチされたかどうかの検出 (タッチ ボタンの場合) などの手順があります。特定の PIN 状態が、たとえば 5 回の連続した呼び出しで安定している場合、sButtonオブジェクトの状態が更新されます。
  6. Button_Tは一般的なオブジェクトです。従来のタクト スイッチやタッチ ボタンなどの可能性があります。
  7. ScanButtonAndUpdateButton_T オブジェクトのリストを処理できますが、GetButton関数は 1 つのボタン オブジェクトに対してのみ動作します。

問題は次のとおりです。プログラムカウンターが内部にあるときに割り込みが発生する可能性がある古典的なケースGetButton

質問は次のとおりです。割り込みを無効にせずGetButtonに同期する方法は?ButtonISRHandler

私のターゲット プロセッサは LDREX/STREX 操作のない Cortex M0 であるため、この場合の優れたソリューションとなる C11 のアトミックを使用できません。

私の提案する解決策

でクリティカル セクションを使用しGetButtonます。

プログラム カウンタがクリティカル セクション内にあるときに割り込みが発生した場合は、割り込みでは処理せずScanButtonAndUpdate、割り込みで処理しExitCriticalSectionます。実行を延期ScanButtonAndUpdateします。

ScanButtonAndUpdate割り込みとメイン コンテキストから同時に関数を呼び出す可能性はありません。この動作はセマフォによって保護されています。

実装

このソリューションはテスト済みで、問題なく動作しますが、これが隠れたバグのない最適なソリューションであるかどうかはわかりません。

EDIT 1:仮定を更新し、不足しているScanButtonAndUpdate機能を追加しました