が計算?内部割り込みハンドメインのループ?(組み込みリアルタイム応用)
質問
の開発をしている組み込み用モーター制御のが、私の疑問をすると一部の計算に変換するADC値に署名した物理的価値観(アンプ).
うに計算の割り込みハンドラやきだけ使用のハンドラをセットにグローバル旗の計算は、メインのループがフラグを設定されてい?
よろしくお願いします。
解決
これに対するすべての答えがあります。それはあなたのタイミング要件、既存の割り込み負荷などによって異なります
かなり単純な乗算か何かであるならば、私はあなたが割り込みでそれをするだけです。
あなたがしていることを知っていて、あなたよりもあなたの割り込みにもっと時間を費やしてはいけません。
他のヒント
割り込みハンドラでできることが少ないほど、より良くなる。現在、それはあなたのアプリケーションにとって大きな取引ではないかもしれませんが、システムのロードが高く、他の優先順位の高いタスクを保持して割り込みを処理するのに時間がかかりません。グローバルフラグを設定するのではなく、セマフォと適切なマルチスレッドを調べたい場合があります。
でんのADC値速度をどのように必要なことを思い出します。必要な場合は一時的に基づいて行動しADC値は、取り組んでいく必要があると述べる.しかし、そのような場合には、自分自身の費用の算定の"リアル"のアナログ値ADCからカウントを使う方法で自重要な閾値のADCが可能となります。
例えば、ADC出力8数万ボルトのレンタルをお勧めいたしており火災の緊急停止の場合には、ADCの報告より1.5v、書割り込みコードのE-stop12能となります。しまものADCカウントのメインループに翻訳のためのユーザー向けのユニットユーザインタフェース等の目的での
の一般原則であることを保証できるお客様の納期は、構造および設定など、これにより期限があります。がない限のかたまりをビニール袋に入れ、主なループ再び一般).
考えるべきことはデータの一貫性です。ADC(位置、電圧、電流など)から複数の関連値を取得している場合は、一貫したセットを使用していることを確認するために何かをしたい場合があります。これは、バックグラウンドアップデートがISRの更新よりも優れていることを意味します。アルゴリズムの所与のパスに対する単一の読み取りの一貫性さえも重要かもしれません。この背景コードを検討してください。
delta = data-lastData;
//ISR could update data here.
lastData = data;
something = K1* data + K2 * delta; //this may be wrong now
.