タグ付けされた質問 「sleep」

3
低バッテリーインジケータ
マイクロコントローラーと組み合わせて使用​​できるバッテリー寿命インジケーターを作成したいと考えています。残りの現在のバッテリー寿命を読み取って、バッテリー寿命を維持するためにマイクロコントローラーをますますスリープ状態にできることを望んでいます。

5
Cortex(ARM)マイクロコントローラーでのWFI(割り込み待機)の最適なパターン
EFM Gekkoコントローラー(http://energymicro.com/)を使用したバッテリー駆動ソフトウェアの開発を検討しており、実行するのに役立つものがない場合はコントローラーをスリープ状態にしたいと考えています。この目的には、WFI(割り込み待ち)命令が使用されます。割り込みが発生するまでプロセッサをスリープ状態にします。 何かをどこかに格納することでスリープが行われた場合、ロード専用/ストア専用操作を使用して次のようなことができます。 //何かが起こるとdont_sleepに2がロードされます //メインループを少なくとも1回繰り返します。割り込みの場合 //次のステートメント中に2にリセットされる原因となります。 //割り込みはその後に発生したかのように振る舞います。 store_exclusive(load_exclusive(dont_sleep)>> 1); while(!dont_sleep) { //次のステートメントとstore_exclusiveの間に割り込みが発生した場合、スリープしない load_exclusive(SLEEP_TRIGGER); if(!dont_sleep) store_exclusive(SLEEP_TRIGGER); } load_exclusive操作とstore_exclusive操作の間に割り込みが発生すると、store_exclusiveをスキップし、システムがもう一度ループを実行するようになります(割り込みがdont_sleepを設定したかどうかを確認します)。残念ながら、Gekkoはスリープモードをトリガーするために書き込みアドレスではなくWFI命令を使用します。のようなコードを書く if(!dont_sleep) WFI(); 「if」と「wfi」の間に割り込みが発生し、dont_sleepを設定するリスクが発生しますが、wfiは先に進み、とにかく実行されます。それを防ぐための最良のパターンは何ですか?PRIMASKを1に設定して、WFIを実行する直前に割り込みがプロセッサに割り込まないようにし、すぐにクリアしますか?または、より良いトリックがありますか? 編集 私はイベントビットについて疑問に思っています。一般的な説明では、マルチプロセッサのサポートを目的としているようですが、次のようなものが機能するかどうか疑問に思っていました。 if(dont_sleep) SEV(); / *次のWFEはイベントフラグをクリアしますが、スリープはしません* / WFE(); don't_sleepを設定するすべての割り込みもSEV命令を実行する必要があるため、「if」テストの後に割り込みが発生すると、WFEはイベントフラグをクリアしますが、スリープ状態にはなりません。それは良いパラダイムのように聞こえますか?
18 arm  cortex-m3  sleep 

3
Arduinoのスリープ方法
Arduinoのスリープモードをどのようにプログラムしますか?特にバッテリー駆動の設計の場合、CPUをスリープ状態にするのに必要なときだけ目覚めるための優れたテクニックは何ですか?

3
マイクロコントローラのスリープレース状態
次のコードを実行しているマイクロコントローラーがあるとします。 volatile bool has_flag = false; void interrupt(void) //called when an interrupt is received { clear_interrupt_flag(); //clear interrupt flag has_flag = true; //signal that we have an interrupt to process } int main() { while(1) { if(has_flag) //if we had an interrupt { has_flag = false; //clear the interrupt flag …

1
STM32 CPUがウェイクアップする原因となった瞬間的なスイッチを検出する
編集:この質問は間違っています。stm325105には、ウェイクアップピンが1つしかありません。しかし、他のSTパーツには複数のウェイクアップピンがあるため、指定された回答はそれらに対して有効です。 ウェイクアップ入力に接続された2つの一時的なボタンを持つstm32f105があります。プロセッサがスタンバイモードになります。ボタンのいずれかが押されるか、RTCタイマーが起動すると、CPUが起動します。 問題は、どのウェイクアップ入力がトリガーされたかに応じて、cpuにさまざまな処理を実行させたいことです。よると、5.3.5からST stm32f105xxリファレンスマニュアル、何のレジスタは、我々が覚めてきたことを示すステータス・レジスタを除いて保存されていません(ただし、誰による)と42個のバックアップレジスタ。 スタンバイモードでは、消費電力を最小限に抑えることができます。これは、電圧レギュレータが無効になっているCortex®-M3ディープスリープモードに基づいています。その結果、1.8 Vドメインの電源がオフになります。PLL、HSI発振器、HSE発振器もオフになります。SRAMとレジスタの内容は、バックアップドメインのレジスタとスタンバイ回路を除いて失われます。 スタンバイモードからウェイクアップした後、プログラムの実行はリセット後と同じ方法で再開します(ブートピンのサンプリング、ベクトルリセットのフェッチなど)。電力制御/ステータスレジスタ(PWR_CSR)のSBFステータスフラグは、MCUがスタンバイモードであることを示します。 このSTフォーラムの投稿、「スタンバイからのウェイクアップの起源を特定する方法」、ソフトウェアでトリガーされたウェイクアップを検出できないことを示唆しています。私はそれ以上の啓蒙を与える他の投稿をそこで見つけませんでした。 ソフトウェアまたはハードウェアを使用して、ウェイクアップした後、どのウェイクアップ入力がトリガーされたかを判断するにはどうすればよいですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.