RTスレッド入門スタディノート-グローバル割り込みの操作に精通している

序文

  • RT-Threadには、グローバル割り込みの操作がたくさんあり、グローバル割り込みの[無効化]と[有効化]は誰もが知っています。
  • グローバル割り込みの無効化と有効化を正しく理解する必要があります。
  • 以下のように、リンクリストの正しい動作を保証するために、[割り込み保護]
    /* lock interrupt */
    temp = rt_hw_interrupt_disable();

    /* remove from old list */
    rt_list_remove(&(object->list));

    /* unlock interrupt */
    rt_hw_interrupt_enable(temp);

 

問題と分析:

  • rt_hw_interrupt_disableの後、割り込みをトリガーできますか?
  • 実際の検証、およびrt_hw_interrupt_disableの実装方法の分析の後、次の結論が得られます。
  • rt_hw_interrupt_disableは、グローバルな[割り込み要求]をシールドし、有効な割り込みを構成するだけで、[割り込み]は可能ですが、割り込み処理機能ISRは一時的に実行されません。
  • つまり、ハードウェア構成で割り込みが有効になっている場合、rt_hw_interrupt_disableの後も、[割り込み]機能はあります。たとえば、GPIO外部割り込みを設定し、割り込みを有効にします。rt_hw_interrupt_disableの後、外部割り込みを生成できますが、実行[ISR]はトリガーされません。
  • [キー]:rt_hw_interrupt_disableの後、トリガーされた割り込み、ISRは一時的に実行できませんが、ハードウェアは通常[保留中]割り込みフラグビットを設定します。
  • rt_hw_interrupt_enableの後、[pending]の割り込みは、割り込み[ISR]ハンドラーを実行します。

 

コンセプトコーミング

  • 単一割り込み生成:ボタン、GPIO外部割り込みなどのハードウェア割り込みを有効にするように構成し、押すと割り込みをトリガーし、ハードウェアは[保留中]割り込みフラグビットを設定し、割り込みを実行します[ISR]
  • 単一の割り込みの無効化:ボタンなどのハードウェア割り込みを無効にするように構成し、それを押しても割り込みはトリガーされなくなります。【ISR】割り込み処理機能があっても実行されません。
  • グローバル割り込みの禁止:つまり、物理割り込みはもうトリガーされません[この関数は見つかりません]!
  • グローバル割り込み要求シールド:rt_hw_interrupt_disable、トリガーされた割り込みは[保留中]割り込みフラグビットのみを設定でき、CPUは操作を実行し続けます。
  • 相互に排他的または重要な操作の場合、グローバル割り込み要求をシールド+処理+グローバル割り込み要求を開く方法を使用して、操作が排他的に操作を完了できるようにすることができます。

 

RT-ThreadPMでスリーププロセスを整理します

  • スリープ操作は次の場所で実行されます:アイドルスレッド(最低スレッド優先度)
  • SLEEPに入る前に、グローバル割り込み要求は禁止されています!rt_hw_interrupt_disable
  • スリープ前のピン処理など、スリープ状態になり、CPUが動作を停止し、[フリーズ]がここにあります!
  • スリープ中も、キーGPIO外部割り込み、LPTimerなどの[割り込みを有効にする]によってトリガーされ、CPUをウェイクアップすることができます。
  • CPUがウェイクアップした後、次の操作[スリープ後の処理]に進みます。
  • PMはスリープを終了し、グローバル割り込み要求rt_hw_interrupt_enableをオンにします。このとき、応答割り込みISRがオンになります。
  • 割り込み[保留]フラグビットに従って、ウェイクアップ割り込み処理機能[ISR]を入力して実行してください。
  • このようにして、深い眠りの間、システムクロックが停止し、ピンがオフになります。目覚めたときに、クロックとピンを復元できます。[睡眠の全過程が完了しました]
  • 中断やタスク切り替えによってシステムが間違ったクロックで実行されることを心配する必要はありません。
  • グローバル割り込み要求をオフにすることを心配しないでください。ボタン、LPTimerなどは、割り込みをトリガーしてMCUをウェイクアップすることはできません。

2021-02-24_142531.png

 

総括する

  • 割り込みのトリガーと実行フローを正しく理解する必要があります
  • RT-Theadグローバル割り込みの動作を正しく理解する:rt_hw_interrupt_disableおよびrt_hw_interrupt_enable

おすすめ

転載: blog.csdn.net/tcjy1000/article/details/114040028