問題タブ [isr]
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.
timer - sw4stm32で割り込み機能を有効にする方法
私は SW4STM32 ツールチェーンを使用しています。オーバーフロー時に timer2 を使用して LED を点滅させたいのですが、STM32103RET で、LED をオンまたはオフにする関数を次に示します。
timer2 の初期化は stm32 キューブ mx によって設定されていますが、timer2 がオーバーフローしたときにどの関数が呼び出されるかわかりませんか?
assembly - 特殊機能レジスタから変数への値の格納
フリースケール MPC5534 コントローラーに基づく開発プロジェクトに取り組んでいます。特定の要件については、関数からアクセスできる変数に ISR (既に存在する) 中に
2 つの特殊関数レジスタ (つまりSRR0とSRR1 ) の値を格納する必要があります。以下は、既存の ISR のアセンブリ コード スニペットです。
次の方法でレジスタからの値を格納する方法:
レジスタ r4 と r5 がすでに他の関数によって使用されているかどうかを知るにはどうすればよいですか (たとえば、他のプロジェクト ファイルにアクセスできないとします)。もしそうなら、私のアプローチは正しいですか?レジスタの衝突が発生しないようにするために、r4 と r5 をプッシュおよびポップするこの ISR のスタック フレームを明示的に作成する必要がありますか? それは理にかなっていますか?
現在、私はファイルをコンパイルして確認する立場にありません。
freescale または powerPC を一般的に使用したことのある人なら誰でも、私を助けることができるかもしれません。前もって感謝します。
c - メイン コードではグローバルに揮発性修飾子があるが、ISR ではそうではない
私のコードは C で書かれています。グローバル変数を使用してメイン コードと通信する ISR (割り込みサービス ルーチン) があります。ISR は、メイン コードとは異なるコンパイル ユニットにあります。メイン コードに「揮発性」を使用できないが、ISR では使用しない理由はありますか?
私の理由は次のとおりです。volatile 修飾子が、コンパイラによる ISR の完全な最適化を妨げています。ISR の観点からは、変数は揮発性ではありません。つまり、ISR の期間中は外部から変更できず、ISR の期間中は値を出力する必要はありません。さらに、ISR が独自のコンパイル ユニット内にある場合、コンパイラは ISR が最初に使用する前にメモリからグローバルを読み取らせなければならず (MUST)、戻る前に変更を保存し直さなければなりません (MUST)。これについての私の理由は次のとおりです。異なるコンパイルユニットを同時にコンパイルする必要がないため、コンパイラは ISR の範囲を超えて何が起こっているのかを認識できず (またはそのふりをする必要があります)、グローバルが read/ であることを確認する必要があります。 ISR の境界に書かれています。
おそらく、コンパイル単位の重要性を誤解していますか? 私が見つけた参考文献の 1 つは、GCC がこの揮発性の不一致をコンパイル時のエラーにしたと述べています。それらが異なるコンパイル単位にある場合、それらは独立しているべきではないのでしょうか。ライブラリ関数を個別にコンパイルして後でリンクすることはできませんか?
volatile を使用してシステム コードを解読する 9 つの方法
おそらく、シーケンス ポイントの概念から議論を行うことができます。シーケンス ポイントまたは副作用の概念を完全には理解していません。しかし、C99 仕様は 5.1.2.3 パラグラフ 2 で次のように述べています。 "
附属書 C には、以下を含むシーケンス ポイントがリストされています。
- 引数が評価された後の関数の呼び出し。
- ライブラリ関数が戻る直前。
参照: WG14 ドキュメント: N1013、日付: 2003 年 5 月 7 日
注: 前の質問、関数呼び出しと戻り値に関連するグローバル変数アクセスでは、関数呼び出しと戻り値の前/後にグローバルが格納/書き込まれるかどうかを尋ねました。しかし、これは別の質問であり、グローバル変数が異なるコンパイル単位で「揮発性」として異なって修飾される可能性があるかどうかを尋ねます。私は予備的な結論を正当化するために同じ推論の多くを使用したため、一部の読者は同じ質問であると考えるようになりました.
c++ - 各関数と ISR には独自のスタック サイズが割り当てられますか
この質問は、オペレーティング システムまたはプラットフォームに依存していると思います。
port オーディオ ライブラリを使用して Windows で C++ コードを書いていたときに発生しました。
ポート オーディオ エンジンに渡されるコールバック関数にあまり多くのコードを記述しないようにドキュメントに記載されています。システムによっては、ISR から呼び出されたり、別のフォーラムを読んだりして、スタックオーバーフロー。
ポート オーディオ固有のことについて質問するつもりはありませんが、メイン関数よりも ISR に多くのコードが記述されている場合、スタック スペースに問題が生じるのはなぜだろうかと考えていました。
コールバックからいくつかの異なる関数を呼び出したいと思います。このコールバックが実際に ISR から呼び出される場合、ISR からさらに多くの関数を呼び出すことは問題になりますか?
各関数を呼び出すと、各関数には独自の最大スタック サイズがあるため、追加のスタック スペースが許可されますか? これは少し混乱します。
関数と ISR は、完全に割り当てられたスタックまで、好きなだけスタック スタック スペースを使用できると常に考えていました。メイン関数が他の関数よりもスタックの大きな部分を持っていることを意味しますか?
よろしくお願いします。
contiki - Contiki コンテキストで ISR 関数を使用する
Contiki OS を初めて使用するので、基本的な質問があります。
Contiki プロセス内から低レベルの ISR を安全に使用できますか?
私はこれを簡単なテストとして行っており、うまく機能しています。ただし、後でさまざまな条件下で失敗する OS の何かを弱体化させているのではないかと心配しています。
イベントタイマーに基づいて定期的に起動されるプロセスのコンテキストで、LED を点滅するように設定する関数を呼び出しています。LED 点滅関数自体は、Atmel SAMD21 MCU のハードウェア タイマーによって開始される ISR からのコールバックです。
この特定のケースでどのような制約を考慮する必要があるかを明確にしてもらえますか?
ありがとうございました。
c++ - 一時的な volatile 修飾子による共有配列アクセスの最適化
次のシナリオでは、一時的な volatile 修飾子が正しい動作をもたらすかどうか疑問に思っていました。ISR が配列内の値を収集し、十分な値が収集されると、準備完了を通知するとします。
これがISRの擬似コードです
がシグナルされた後に読み取り専用になることを保証できると仮定し、特定のメソッドのみを介して要素にアクセスします。array
ready
cpp-referenceに従って許可されているようです
非揮発性値から揮発性型へのキャストは効果がありません。volatile セマンティクスを使用して不揮発性オブジェクトにアクセスするには、そのアドレスを volatile へのポインタにキャストし、そのポインタを介してアクセスする必要があります。
完全を期すために、メインルーチンは次のことを行います
このようなシナリオでは、内部からの配列への書き込みが実際にRAMで実行されるarray
ことを保証するために必要な配列要素から正しい値を読み取るか、配列要素で揮発性であると期待する必要がありますか?ISR()
なぜ volatile が C で必要なのかに注意してください。この特殊なケースで volatile が必要かどうかについては詳しく説明しません。
c - ARM 割り込みハンドラ
最初に、私はすでにこれを読んでいて、理解できなかったか、明確な答えが得られなかったと言います。私はARMを学ぼうとしているAVRの男です。ATMEL から ATSAM4LC2AA をプログラミングしています。ISR ハンドラーに遭遇した場合、グローバル割り込みを無効にする必要がありますか? もしそうなら、これは正しいコードですか?
javascript - Windows iotを実行しているラズベリーパイ2でクロック割り込みを使用する方法はありますか
Raspberry Pi 2 へのシグナル ジェネレーター Windows Iot ユニバーサル JavaScript アプリケーションを開発しています。
MCP4921 DAC を SPI 経由で接続しました。
私がやろうとしているのは、特定の周波数、振幅、およびオフセットで正弦波を生成することです。私はすでにデバイスを動作させていますが、正確な波を生成しようとすると、アプリケーションは 10 Hz の正確な正弦波でも遅くなります。
現在、このように波が生成されています。
私はsetIntervalを使用しようとしましたが、それは良い習慣ではないことを知っています。再実行する前に少なくとも10ミリ秒待ちます。
ラズベリー タイマー、クロックなどを変更して、0.1 ミリ秒ごとにカスタム割り込み ISR 関数を実行する方法はありますか?
BCM2835 データシートとBCM2836 データシートのデータシートで dma レジスタを確認しました。Raspberry Pi クロックの中断を管理する方法が見つかりません。ピンの中断のみです。
私はArduino Unoでそれを行う方法も知っていますが、ラズベリーレジスタを操作する方法がわからないので役に立ちません。
これは、生成された正弦波の画像です。
前もって感謝します。