「CPU ランタイムは貴重なリソースであり、限られた CPU 時間をより有意義なことに費やす必要があります。」
組み込み開発のプロセスでは、GPIO模拟某种通信接口
SPI などの を使用する、空循环来实现延时delay
空などのレジスタのキー ステータス ビットを使用する、ということを行っている必要があります。おそらくそれは、使用されているチップにハードウェア SPI がない、チャネルが足りない、または現時点では CPU がアイドリング以外何もすることができないなどの無力感から来ているのかもしれませんが、私たちはこの認識を持たなければなりません这是在浪费CPU资源
。
CPU は組み込みシステムの心臓部ですが、不必深入参与到每一个细节中去
. 覚えておいてください: CPU はチップ上のすべてのハードウェア リソースであり统领者
、すべてを自分で行うクールな存在ではありません。機能設計を完了するには、オンチップのハードウェア リソースを可能な限り最大限に活用し、一部の特殊なハードウェア回路をチップの外部に拡張することさえ学ばなければなりません。
どれどれ
この記事では、Zhang Zhennan がいくつかの例を通して説明し如何减轻CPU负担
、オンチップおよびオフチップのハードウェアを使用して必要な機能を実現します。
石油検層計器
1.1 背景知識
私は 5 年以上石油計装の仕事に携わってきました。これは非常に伝統的な産業ですが、非常に包括的で技術集約的な産業でもあります。
誰かが言いました:「この章では CPU 使用率について話しているようですが、なぜまた石油機器について話しているのですか?」心配しないでください、Zhennan には彼自身の意図があります。
図 1.1 を参照してください。
図 1.1 石油検層システムの概略図
上の図は、石油検層システムの単純なトポロジ図を示しています。作業時には、伐採車がホイールを介してスチールケーブルを引き上げると同時に、機器が外部に信号(電気または超音波)を送信し、戻ってくる信号を受信し、計算後、結果を地上にアップロードします。同軸イーサネットを介してシステムに接続され、ホスト コンピュータによって曲線から外れます。最終的な曲線は通訳エンジニアに渡され、炭化水素貯留層の位置が特定されます。
もちろん、持ち上げる速度は確実ですが、一定の深度でより多くのデータを収集すること、つまりサンプリング レートを可能な限り高めることが望まれます。このようにして、最終的な対数曲線にさらに詳細を反映できます。
これが最も基本的な原則と背景です。
1.2 ロギングデータ収集・送信の実現
図 1.2 に示すように、回路は比較的明確です。
図1.2 ロギングツールのデータ取得と送信の原理ブロック図
1.2.1 最も直接的な一次解決策
最も直接的な解決策は、誰もが思いつくもので、図 1.3 に示すように、段階的に収集、計算、送信することです。
図 1.3 ロギングデータの収集と送信の最も直接的な実装スキーム
各サイクルで行うことは次のとおりです。「ADC は波形を収集し、主にデジタル フィルタリング、FFT、DPSD などのデジタル信号処理を含む計算を実行し、最終的に McBSP を介してプロトコル形式に従って結果データをパックします ( 「TI DSP 独自の通信インターフェイス)を同軸イーサネット通信モジュールに接続します。もちろん、このサイクルができるだけ短いことを望んでいますが、それにはいくつかのステップの最適化と圧縮が必要です。」
1.2.2 DMA 最適化スキームの追加
它的所有操作都是需要CPU参与的,大量的时间都在等待外设。
上記のスキームを詳しく見てみると、図 1.4 に示すように、CPU の参加を減らし、貴重な時間をアイドル待機に浪費せず、コア アルゴリズムの計算に浪費する方法がわかります。
図 1.4 DMA を追加したデータ収集および送信の最適化スキーム
CPUで波形を取り込み、取り込んだデータから演算を開始しますが、大量の浮動小数点データを含むデジタル信号処理を行うため、演算処理に時間がかかり、1回の計算に約1時間かかります。 10ミリ秒。同時に、ADC 変換をタイムリーに開始し、その変換の時間ギャップで計算を実行します。DMA然后直接启动SPI-DMA传输来读取ADC的转换数据,而CPU不用去等DMA传输完成,
送信の時間を計算に使用し、最後に戻ってすぐに次の計算を実行できます。この時点で新しい波形が準備できています。これにより、1サイクルの時間を10msに圧縮することができ、サンプリングレートは従来の2倍となります。
Zhennan 氏は、この例を通じて皆さんに次のことを伝えたいと考えています。「CPU の実行時間は貴重であり、チップ上のハードウェア リソースを最大限に活用すると、より多くの CPU 時間を解放して、より意味のあることを行うことができます。一部のスキルと DMA の合理的な使用方法それは効果的な方法です。」
実際、多くの場合、使用できるハードウェア リソースはオンチップに限定されません。「私たちは、それを支援するためにいくつかの簡単なオフチップ回路を設計します。そして時には予期せぬ効果を達成することもあります。」以下をお読みください。
スマートドライブカメラ
2.1 カメラのタイミング解析
カメラ モジュールに興味があり、シングルチップ マイコンを使ってカメラ モジュールを駆動してその効果を試したいと考えている人は多いと思いますが、図 1.5 に示すように、成功している人は多くありません。
図 1.5 より一般的な OV7670 カメラ モジュールとモジュール
これにはいくつかの理由があります。
カメラの CMOS チップのタイミングはより複雑です。
SCCB 通信と関連レジスタの設定。
タイミングが速すぎて、固有振動数に応じて活発に出力されるため、捕捉してデータを収集することが困難です。
そのタイミングがどれくらい速いか、図 1.6 に示す下の図を見てみましょう。
図 1.6 OV7670 のタイミング図
OV7670 は VGA モードでアクセス可能です最高帧率30fps
。每秒钟产生30帧640X480尺寸的图像
公式情報によると、VGA モードでの実際の出力ライン数は 510 で、各ラインで出力されるピクセル数は 784 です (余分なラインとピクセルは冗長であり、データは無効です。ここでは HREF が存在することにのみ焦点を当てます)ピクセルデータ中はハイレベル)。このように、PCLK のクロック周期は 1/(30*510*784*2)=41.7ns となります。一般的なマイコンの GPIO を使用してピクセルデータを直接収集することはほとんど不可能です。IO与CPU的速度都不够快。
2.2 DCMI+DMA の使用
このような高速データをカメラから読み取るには、それが利用可能でなければなりません专门的硬件
。内蔵のSTのSTM32F4シリーズマイクロコントローラを選択すると、DCMI(数字摄像头模块接口)
画像取得機能を簡単に完了できます。図 1.7 に示すように、DMA と連動する必要があります。
図 1.7 DCMI+DMA を使用してカメラを駆動する
DCMI はカメラ データを取得し、それを通过DMA直接将数据保存到内部RAM或外部的SDRAM
TFT に直接書き込むことで、リアルタイムの動的な画像表示を実現します。全プロセスにおいて、CPU只不过在作一些配置性的工作
は画像データの取得と送信には関与しませんでした。したがって、ハイエンドのチップを使用すると、開発作業がさらに強力になり、半分の労力で 2 倍の結果が得られます。より多くのものがあるという理由だけで强大的硬件外设来为我们完成特定的功能实现
。もちろん、より強力なハードウェアはより多くの学習コストも意味します。望ましい効果を達成するために、ハードウェアを正しく使用する方法を注意深く学ぶ必要があります。
場合によっては、ハードウェアの周辺回路が CPU コアよりも複雑になることがあります。たとえば、一部のマルチメディア コーデック SOC では、CPU コアは 51 または M0 のみで、チップ上のより大きな面積は H.264 などのコーデック回路です。したがって、組み込み開発エンジニアとしては、「まず自分が持っているハードウェアリソースを十分に理解し、すべての機能をCPUだけに依存して実装しないようにする必要があります。」
コードをスキャンしてグループに参加します
2.3 自作外部回路
このセクションの名前は「スマート ドライブ カメラ」ですが、上記のソリューションはどれも「スマート」とは言えません。上記の仕組みでは、シングルチップマイコンに DCMI などの特殊なハードウェアを搭載する必要があるのですが、DCMI なしでも実現できるのでしょうか?例えば、通常の51やローエンドのM0シングルチップマイコンでもカメラを駆動することが可能です。答えは「はい」ですが、図 1.8 に示すように、外部回路でいくつかのトリックを行う必要があります。
図1.8 オフチップ並列FIFO+タイミング調整による画像取得の実現
図 1.9 に示すように、以下のフローチャートを使えば、その工夫が誰でもわかるでしょう。
図 1.9 オフチップ並列 FIFO による 1 フレームのデータの取得
上の図で説明したロジックに従ってプログラムが実行された後、画像のフレームが FIFO に保存されます。この時点单片机可以慢慢从读取端
(並列 FIFO は書き込みポインタと読み取りポインタに対応して、書き込み端と読み取り端に分割されます)で、画像データが読み込まれます。このようにして、CPU と IO の速度がボトルネックではなくなります。このような仕組みにより、ワンチップで簡単に画像取得を実現できます。
このプロセス中に CPU は何をしましたか? 似乎只有等待帧同步信号VSYNC和操作几个IO
。この方法は DCMI+DMA よりも CPU 効率が高く (DMA は実際にオンチップ データ バス帯域幅の半分を占有するため、CPU の動作効率が低下します)、より柔軟でマイクロコントローラ ハードウェアへの依存度が低くなります。
シングルチップマイコンが7インチ大型液晶画面を賢く駆動
上記のいくつかの例を通じて、ジェナン氏が「スマート ドライビング」と呼ぶさまざまな方法がわかるはずです。はい、ハードウェアに話させてください。私たちは「ハードとソフトの両方」のエンジニアでありたいと考えています。
OK、皆さんに尋ねると、「図 1.10 に示すように、51 または M0 のシングルチップ マイコンを使用して 7 インチの大画面 LCD (800 * 480) を駆動し、ビデオをスムーズに再生できます。信じられますか?」 「違うかもしれません。リフレッシュ レートが不十分です。」 しかし、私がこの質問をしたので、Zhennan はそれに気づいたはずです。ここで、その実現プロセスを説明します。
図1.10 7インチTFT LCDモジュール
まず、図 1.11~14 に示す回路図を見てください。
図 6.11 Qiaodrive 7 インチ LCD 画面の MCU 部分の概略図
図 6.12 Qiaodrive 7 インチ LCD スクリーンの回路図の 74HC595 シリアル/パラレル部分
図 6.13 Qiaodrive 7 インチ LCD 画面の回路図の 8 進 8 進数のカウントとタイミング調整部分
図 6.14 Qiaodrive 7 インチ LCD 画面の概略図の spiFlash と 7 インチ TFT インターフェイス部分
基本的な実装ロジックを図 1.15 に示します。
図 1.15 スマートドライブ 7 インチ LCD 画面の基本実現の論理ブロック図
上記の概略図と論理ブロック図を注意深く観察すると、多くの人がすでに Zhennan の意味を理解していると推定され、図 1.16 に示すように、Zhennan はロジックをより明確にするためのサポート フローチャートを提供します。
図 1.16 Qiaodrive 7 インチ LCD 画面の基本フローチャート
74HC595を2個使用し、16ビットのシリアルデータをパラレルに変換し、TFT液晶の16ビットデータインターフェースに接続します。74HC595 のシリアル データ入力は、MCU の 2 つの GPIO と spiFlash の 2 つのシリアル データ ポートに同時に接続されます。spiFlash が無効になっている場合 (つまり、CS がハイに設定されている場合)、そのデータ ポートはハイ インピーダンスを示し、この時点で 74HC595 は MCU によって動作できます。また、MCU の GPIO がハイ インピーダンスに設定されている場合、2 つの 74HC595それぞれspiFlashデータからダブルビットシリアルを受信できます。このような多重化設計により、「MCU が TFT 液晶を事前に初期化し、純粋なピクセル データ書き込みモードで動作できるようにすることができます。一方、高速データ書き込み段階では、MCU が終了して TFT がデータを受信できるようになります」スピフラッシュより。」
2 つの 74HC595 でシリアル - パラレル変換を実現する主なポイントは LC ラッチ信号の生成であり、8 つの SCK パルスが生成されるたびに、LC の立ち上がりエッジが自動的に生成され、これがタイミング生成および調整ロジックの一部です。実現の基本は、図 6.13 に示すように、74HC161 と 74HC27 の組み合わせにあります。まず 74HC161 をリセットしてクリアします。この時点では [Q2:Q0]=000、74HC27 は 3 入力 NOR ゲートで、その出力は 1Y、つまり 595-LC は 1 です。クロックが入力された後、[Q2:Q0] ] は 001 、 010 ... と増加します。595-LC は 000 までは 0 で、8 クロック後に 595-LC は 1、つまり立ち上がりエッジが生成されます。ここで、Zhennan 氏は、遅延を増やし、74HC595 のラッチ データ出力をより安定させるために、バッファとして 2 段の 74HC1G32 を 595-LC に追加しました。
次に、液晶の WR 信号の生成があります。図 6.12 からわかるように、WR 信号は GPIO と最上位ビット Q2 (はい、はい、またはいいえ) を出力する 8 ビット カウンタの NOR です。Q2 が 0 の場合、WR は GPIO によって制御され、MCU が TFT を事前初期化するために使用できます。GPIO が 0 の場合、WR は Q2 によって制御され、8 クロックごとに立ち下がりエッジが生成されます (前の NOR は、この立ち下がりエッジを遅延させるため、16 ビットのパラレル データが LCD により安定して書き込まれるようにします)。 4クロックサイクル。
基本的なポイントがわかりやすく解説されています。クロック生成に関しては、継続的にではなく、特定の数のクロックが生成されることが唯一の要件です。例えば、1フレームの画像のデータ量は800*480ハーフワードであり、LCDに1フレームの画像を表示するには3072000クロックを出力する必要があります。なので、MCOやPWMは使えず、SPIを使うことになりますが、8ビットSPIなら38万4000回、16ビットSPIなら19万2000回書き込む必要があります。「もちろん、より多くの CPU リソースを節約するために、DMA を使用することもできます。クロックが継続的に生成され、フレームごとの画像が LCD に表示されると、ビデオはスムーズに再生されます。」
以前、同僚に「大画面を賢く動かす」という実験をしたことを話したら、感心されながらも「FPGAを作らないのはもったいない!」とも言われました。 2007 年にインテル中国研究所でインターンとして働いていたときのことです。
さて、この章では 3 つの例を使用して、この章の冒頭の「CPU 時間は貴重なので、限られた CPU 時間をより意味のあることに投資する必要があります。」という文を説明します。
実際の開発では、ハードウェアリソースを最大限に活用し、一部のハードウェア回路を自分で柔軟に拡張することで、予想外の結果が得られたり、不可能が可能になったりすることがあります。
A 「常に覚えておいてください。私たちは多くの場合、組み込みソフトウェアを行っていますが、最終的にはハードウェアを行っているのです。」
1 年間の準備期間を経て、Yu Zhennan 氏は長年の実務経験と組み合わせて、合計 100 回の講義と合計授業時間を含む、新しく体系的なコース「組み込み C 言語の頂点への 10 日間 (マスター C) 」を作成しました。 2,000分以上の組み込みC言語でよくわからない、よく間違える問題を数多く解読していただきました。
この一連のコースが、すでに C 言語を始めていて、まだ [山の中腹] をさまよっている人たちをさらにレベルアップさせ、最終的には組み込み C 言語の頂点に到達できることを願っています。!2023.07.02 18:00よりWeChatグループに設置予定です!
過去の推薦
シスター・シャオユウがソフトウェアとハードウェアを組み合わせて、複数の電圧と電流を収集するための ADC DMAの最適な姿勢を体験させます。
乾物 | STM32 シリアル ポートDMAトランシーバー メカニズムを説明する記事
詳細な長い記事: STM32 はソフトウェアとハードウェアをどのように組み合わせ、コンパイル後に段階的に実行する方法
完全にC で書かれており、移植性が高く、非常に素晴らしいソフトウェア タイマーです。