タグ付けされた質問 「state-machines」

8
ステートフル要素の出力がQという名前になることが多いのはなぜですか?
論理回路図では、論理ゲートと組み合わせ回路の入力と出力に名前を付けるためのさまざまな規則を見てきました。しかし、ラッチなどのステートフル要素フリップフロップしばしば私は、抽象との接続がある疑いがあるQ.呼ばれる彼らの「状態」を持つ有限状態マシン「状態」は、多くの場合、うまくとしてQを指摘された理論計算機科学、からの(私はそう尋ねましたそれらも :-) しかし、なぜ人々はこの特定の手紙を選んだのですか?

11
VHDLインタビューの質問-数値を5で割り切れるかどうかを検出する
VHDLのいいインタビューの質問を見ました-数字を受け取り、残りが5で割れるかどうかを検出するシステムを構築します。私はステートマシンでそれを解決しようとしました(modまたはremを使用したくないと思います)そして私は最初の成功をしましたが(5、10、15のような数、20、40、80のような数が働いた)、130、75などの他の数字は失敗しました。 ステートマシンを表示しますが、それは完全な混乱(コードではなく、図面です)であり、先ほど言ったように、動作していません。 基本的に、私がやろうとしたことは、5で割り切れる2進数で書き留め、それらのために機能する状態マシンを構築することです。 この問題を解決する方法と、このような問題に直面したときの考え方を教えていただければ幸いです。 ありがとうございました!

6
シリアルプロトコルの区切り/同期技術
非同期シリアル通信は今日でも電子機器に広く普及しているため、私たちの多くはそのような質問に時々出くわしたと思います。電子デバイスDと、PCシリアル回線(RS-232または同様のもの)で接続され、継続的に情報を交換する必要があるコンピューターを検討してください。すなわち、PCそれぞれコマンドフレームを送信しており、それぞれステータスレポート/テレメトリーフレームで応答しています(レポートはリクエストへの応答として、または独立して送信できます-ここでは実際には関係ありません)。通信フレームには、任意のバイナリデータを含めることができます。通信フレームが固定長パケットであると仮定します。X msDY ms 問題: プロトコルは継続的であるため、受信側は同期を失ったり、進行中の送信フレームの途中で「結合」したりする可能性があるため、フレームの開始(SOF)がどこにあるかはわかりません。Aデータは、SOFに対する相対的な位置に基づいて異なる意味を持ち、受信したデータは破損する可能性があり、永久に破損する可能性があります。 必要なソリューション 短い回復時間でSOFを検出するための信頼性の高い区切り/同期スキーム(つまり、再同期に1フレーム以上かかることはありません)。 私が知っている(そして使用している)既存のテクニック: 1)ヘッダー/チェックサム -事前定義されたバイト値としてのSOF。フレームの最後のチェックサム。 長所:シンプル。 短所:信頼できません。不明な回復時間。 2)バイトスタッフィング: 長所:信頼性が高く高速な回復で、どのハードウェアでも使用可能 短所:固定サイズのフレームベースの通信には適していません 3)9番目のビットマーキング -各バイトに追加ビットを追加します。SOFでマークされたSOF 1とデータバイトには次のマークが付けられ0ます。 長所:信頼性が高く、高速な回復 短所:ハードウェアサポートが必要です。ほとんどのPCハードウェアおよびソフトウェアでは直接サポートされていません。 4)8番目のビットマーキング -上記の一種のエミュレーション。9番目ではなく8番目のビットを使用し、各データワードに7ビットのみを残します。 長所:信頼性の高い高速リカバリは、どのハードウェアでも使用できます。 短所:従来の8ビット表現と7ビット表現の間のエンコード/デコードスキームが必要です。やや無駄だ。 5)タイムアウトベース -定義されたアイドル時間の後に来る最初のバイトとしてSOFを想定します。 長所:データオーバーヘッドなし、シンプル。 短所:それほど信頼できません。Windows PCなどのタイミングの悪いシステムではうまく動作しません。潜在的なスループットのオーバーヘッド。 質問: 問題に対処するために存在する他の可能な技術/解決策は何ですか?上記のリストで簡単に回避できる短所を指摘できますか?システムプロトコルをどのように設計しますか(または設計しますか)?
24 serial  communication  protocol  brushless-dc-motor  hall-effect  hdd  scr  flipflop  state-machines  pic  c  uart  gps  arduino  gsm  microcontroller  can  resonance  memory  microprocessor  verilog  modelsim  transistors  relay  voltage-regulator  switch-mode-power-supply  resistance  bluetooth  emc  fcc  microcontroller  atmel  flash  microcontroller  pic  c  stm32  interrupts  freertos  oscilloscope  arduino  esp8266  pcb-assembly  microcontroller  uart  level  arduino  transistors  amplifier  audio  transistors  diodes  spice  ltspice  schmitt-trigger  voltage  digital-logic  microprocessor  clock-speed  overclocking  filter  passive-networks  arduino  mosfet  control  12v  switching  temperature  light  luminous-flux  photometry  circuit-analysis  integrated-circuit  memory  pwm  simulation  behavioral-source  usb  serial  rs232  converter  diy  energia  diodes  7segmentdisplay  keypad  pcb-design  schematics  fuses  fuse-holders  radio  transmitter  power-supply  voltage  multimeter  tools  control  servo  avr  adc  uc3  identification  wire  port  not-gate  dc-motor  microcontroller  c  spi  voltage-regulator  microcontroller  sensor  c  i2c  conversion  microcontroller  low-battery  arduino  resistors  voltage-divider  lipo  pic  microchip  gpio  remappable-pins  peripheral-pin-select  soldering  flux  cleaning  sampling  filter  noise  computers  interference  power-supply  switch-mode-power-supply  efficiency  lm78xx 

5
マイクロコントローラーの割り込み処理とFSMの例
最初の質問 マイクロコントローラでの割り込みの処理について、一般的な質問があります。私はMSP430を使用していますが、質問は他のuCにも当てはまると思います。コードに沿って頻繁に割り込みを有効/無効にするのが良い方法かどうか知りたいのですが。つまり、割り込みの影響を受けないコードの一部がある場合(または、さらに悪いことに、何らかの理由で割り込みをリッスンしてはならない場合)、次のことを行う方がよいでしょう。 クリティカルセクションの前に割り込みを無効にしてから、再度有効にします。 それぞれのISR内にフラグを設定し、(割り込みを無効にする代わりに)クリティカルセクションの前にフラグをfalseに設定し、直後にtrueにリセットします。ISRのコードが実行されないようにするため。 どちらもないので、提案は大歓迎です! 更新:割り込みと状態チャート 具体的な状況をお知らせします。4つのブロックで構成されるステートチャートを実装するとします。 遷移/効果。 終了条件。 エントリー活動。 活動を行う。 これは大学で教授が私たちに教えたものです。おそらく、それを行う最良の方法は、このスキームに従うことではありません。 while(true) { /* Transitions/Effects */ //---------------------------------------------------------------------- next_state = current_state; switch (current_state) { case STATE_A: if(EVENT1) {next_state = STATE_C} if(d == THRESHOLD) {next_state = STATE_D; a++} break; case STATE_B: // transitions and effects break; (...) } /* Exit activity …

3
同じキー行を同時に押す
VHDLでキーパッドを設計しています。キーを1つだけ押すと、すべてが正常に動作します。ステートマシンでキーを押すために各列をスキャンしています。キーが押されていない場合は、pin4pin6pin7pin2 = "0000"次の状態に切り替えて次の列をスキャンする状態です。したがって、私は列に設定pin3pin1pin5順番にし"001"、"010"そして"100"。 スキャン中pin3pin1pin5と"001"している場合pin4pin6pin7pin2され"0100"、その後、単純に「9」を押します。pin4pin6pin7pin2入力pin3pin1pin5ポートおよび出力ポートとしてVHDLで宣言します。私は同時に6と9を押したときpin6とpin7していますhigh。最初に押されたキーが読み取られ、2番目のキーは無視されます。3と7を同時に押すと、最初の数ミリ秒前に最初のキーが押され、最初のキーが読み取られ、2番目のキーは無視され、にpin2なりpin4ますhigh。 ここがトリッキーな部分です。4と6を同時に押すpin7とhigh、そうなるはずですが、とにlowなりpin4pin6pin7pin2 = "0000"、どうして、どうしてかわかりません。"0000"キーが押されていないことが検出されるため、ステートマシンは状態から状態にジャンプします。4と6を押しながら4を数回押して離れると、6が数回押されたことが検出され、大きなバグです。これをデバッグするのを手伝っていただければ幸いです! 同じ行のキーについてのみ、「1」と「2」、「7」と「8」でも同じことが起こります。これは進行中のプロジェクトなので、VHDLコードをオンラインにすることはできません:(これを克服するためのヒントを教えていただければ幸いです! 以下では、ボードにコードをアップロードしていません。コードが実行されていません。Pin5グラウンドに接続して、1、2、4、5、7、8、*、0を1回Pin3押すとPin3LEDはオンになりませんが、6を押してから4を同時に押すと、LEDがオンでPin7LEDがまだオンですが、私のコードが実行されているとき、これは起こりません。多分私は何かを間違って接続し、幸いにもPin7オンになっています、私は知りません... 以下は、キーパッドボードの回路図です。

2
組み込みプログラミングステートマシン
私は、gccを使用して32ビットMCUに重要な有限状態マシン(UML階層状態チャートとして指定)を実装することを検討しています。 うまくいくものとうまくいかないものの経験則はありますか?私の直感は、スイッチベース(または計算されたgoto)の実装はわずかにパフォーマンスが向上する必要があると述べていますが、関数ポインターベースの遷移テーブルは一般に保守性が高いと評されています。 また、組み込みアプリケーション向けにBoost MSMを評価した人はいますか?Boost MSMは一般に非常に効率的であると称賛されていますが、組み込みアプリケーションの効率はPCプログラミングの世界とは異なる方法で測定される場合があることを知っています。 MSMのコンパイルされたステートマシンエンジンがどのように見えるか知っていますか?スイッチジャンプテーブルのようなものですか、それとも関数ポインタ遷移テーブルのようなものですか?動的メモリ割り当てを使用しますか、それとも静的に使用できますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.