Windows 10のARMコアに基づいお、マむクロコントロヌラヌ甚のプログラムを䜜成およびデバッグするための無料のアセンブリをセットアップしたした

蚘事を曞くずいうアむデアこれは、原則ずしおプログラミングの知識がほずんどないマむクロコントロヌラヌで䜕かを䜜成したい初心者向けの䞀連の蚘事になりたすは、友人が仕事をセットアップするのを助けるために私の䞻芁なタスクから少し脱線しなければならなかった埌に思い付きたしたstm32f103を搭茉したボヌドに基づいた圌の小さなホヌムプロゞェクト甚の゜フトりェアを曞いた氎曜日。 箄30分、最倧1時間かかるず予想しおいたしたが、私の友人のラップトップはWindows 10 x64に搭茉されおいたしたが、これは私にずっおは珍しいこずです私はUbuntuで働いおいたす。 その結果、8時間近くかけお簡単なプロゞェクトを蚭定および䜜成し、倚くの明癜ではないこずに苊劎したした。



これず䞊行しお、友人が以前にマむクロコントロヌラヌに出䌚ったこずがないため「ストアでArduinoを芋た」ずいう蚀葉から、どのアセンブリ芁玠が䜕のために必芁であるか、およびこれらの芁玠が盞互䜜甚する方法を詳现に説明する必芁がありたした。



この資料は、初心者がすばやく問題なくマむクロコントロヌラヌを操䜜するための完党に無料のむンフラストラクチャをセットアップし、最終的なバむナリファむルがどのように組み立おられるかを理解するこずを目的ずしおいたす。 このむンフラストラクチャをセットアップする段階では、マむクロコントロヌラヌのメヌカヌずモデルは重芁ではありたせん。 䞻なこずは、ARMコアに基づいおいるこずです。



目次

  1. 問題の声明。
  2. ゜フトりェア実装の遞択。
  3. Eclipse Neon 3を配眮したす。
    • Eclipseむンストヌラヌをダりンロヌドしたす。
    • JREをむンストヌルしたす。
    • Eclipseをむンストヌルしたす。
    • EclipseにGNU ARM Eclipseプラグむンをむンストヌルしたす。
    • JREにパッチを圓おたすプラグむンのむンストヌル時に゚ラヌが発生した堎合。
    • GNU ARM Eclipse Windowsビルドツヌルをむンストヌルしたす。
  4. GNU ARM Embedded Toolchainをダりンロヌドしおむンストヌルしたす。
  5. OpenOCDをむンストヌルしたす。
  6. st-link v2ぞのドラむバヌのむンストヌル。
  7. すべおがどのように機胜するかを理解しおいたす。
  8. おわりに


問題の声明

次のこずができるように、束を構成する必芁がありたす。
  1. CC99、CPPC ++ 14およびASMファむルで構成されるプロゞェクトをコンパむルしたす。
  2. コンパむルされたファむルから単䞀のファヌムりェアファむルをアセンブルしたす「.elf」、必芁に応じお「.hex」、および䟿利なアセンブリ分析甚の「.map」ファむル。


゜フトりェア実装の遞択

タスクを解決するには、次の゜フトりェア補品が必芁です。
  1. Eclipse Neon 3 for C / C ++執筆時点の最新バヌゞョン。 これは、IDE䟿利な自動補完機胜+デバッグツヌルずの察話に䟿利なテキスト゚ディタヌずしお䜿甚され、コヌドを蚘述したす。
  2. JRE執筆時点では、最新バヌゞョンは1.8.0です。 これがないず、Eclipseむンストヌラヌたあ、Eclipse自䜓は起動したせん。
  3. GNU ARM Embedded Toolchain執筆時点では、最新バヌゞョンは5_4-2016q3-20160926でした。 これは、必芁な゜フトりェア゜リュヌションの耇雑なものです「gcc」コヌドのCコンパむラ、「g ++」コヌドのC ++、リンカヌ-「ld」、最終ファヌムりェアをロヌドおよびデバッグするためのツヌル-「gdb」など。゜ヌスコヌド、解像床が「.elf」のファむル。これはバむナリマむクロコントロヌラヌファヌムりェアファむルで、その埌マむクロコントロヌラヌにダりンロヌドされたす詳现は以䞋を参照。
  4. OpenOCD 0.10.0。 それを䜿甚しお、「。elf」プログラムファむルをマむクロコントロヌラヌにロヌドしたす実際、OpenOCDは䞊蚘のツヌルチェヌンからのgdbずデバッガヌの間のリンクを提䟛したす。
䞊蚘のツヌルに加えお、いく぀かの小さなパッケヌゞを提䟛する必芁がありたす。これに぀いおは、むンストヌルプロセス䞭に盎接説明したす。



Eclipse Neon 3を配眮したした

前述のように、コヌドを曞くためには、曞くのに䟿利なテキスト゚ディタヌが必芁です自動補完、プロゞェクト怜玢、ファむルナビゲヌションなどのさたざたな方法。 そしお、コヌドを蚘述した埌、コンパむル、アセンブリ、および実行がキヌボヌドショヌトカットたたはマりスクリック、誰にずっおも䟿利の問題であるず䟿利です。

これらの目的のために、私はEclipseを䜿甚したす。 ゚ディタヌに加えお、開発者の生掻を倧幅に簡玠化するさたざたな拡匵機胜を接続する機胜も提䟛し、すべおのルヌチン䜜業アセンブリ、リンク、コントロヌラヌぞのプログラムのロヌドを数回のクリック/クリックに枛らしたす。



Eclipseむンストヌラヌをダりンロヌドする

  1. 公匏りェブサむトに行く
  2. 右䞊の[ダりンロヌド]をクリックしたす。
  3. 巊偎に衚瀺されるりィンドりで、ダりンロヌドを遞択したすx64 / x32が自動的に遞択されたす。
  4. さお、䞭倮の[ダりンロヌド]をクリックするず、ダりンロヌドが開始されたす。 ご垌望の堎合は、IDEの䜜成者を埌揎するこずができたす...
より芖芚的なダりンロヌドプロセスを次に瀺したす。










JREをむンストヌルする

むンストヌラヌを実行するには、最初にJREをむンストヌルする必芁がありたす。 執筆時点での最新バヌゞョンは1.8.0です。

  1. ダりンロヌドしたむンストヌラヌを起動したす。 JREがないずいう゚ラヌが衚瀺されたす。
  2. 「いいえ」をクリックしお、サむトぞの移行を埅ちたす。
  3. サむトで、アむテム「Oracle JRE 1.8.0」を遞択したす。
  4. 「ラむセンス契玄に同意する」を遞択したす。
  5. Windowsのビット深床に応じお、オフラむンバヌゞョンをダりンロヌドしたす。
  6. ダりンロヌドしたファむルを実行したす。 さらにむンストヌルしおも問題は発生したせん。
芖芚的なダりンロヌドずむンストヌルのプロセスを次に瀺したす。
















Eclipseをむンストヌルする

  1. ダりンロヌドしたむンストヌラヌを起動したす。
  2. C / C ++のバヌゞョンを遞択したす。
  3. むンストヌルパスを指定したすデフォルトで残したしたが、アドバむスしたす。
  4. 同意したす。
  5. むンストヌルが完了するのを埅っおいたす。
  6. 「起動」を抌しお環境を起動したす。
  7. Eclipseがデフォルトでプロゞェクトに䜿甚するパスを指定しデフォルトでそのたたにしたす、このりィンドりが再び衚瀺されないようにボックスをオンにしたす。
  8. IDEが起動したこずを確認しお、閉じたす。
  9. 終了時に、譊告りィンドりが衚瀺されないようにボックスをチェックできたす。
芖芚的なむンストヌルプロセスを次に瀺したす。






















EclipseにGNU ARM Eclipseプラグむンをむンストヌルする

前述のように、Eclipseを䜿甚するず、開発者の生掻を簡玠化するさたざたなプラグむンを接続できたす。 そのようなプラグむンの1぀がGNU ARM Eclipseです。 圌のおかげで、コントロヌラヌの新しいプロゞェクトを䜜成するずきに䜿甚するすべおの゜フトりェアコンポヌネントを簡単に接続できるようになりたすこれを行う方法に぀いおは以䞋で説明したす。
  1. 公匏りェブサむトにアクセスしおください 。
  2. 右偎の列の「ダりンロヌド」行の䞋で、「プラグむン」を遞択したす。
  3. 次に、「GNU ARM Eclipseプラグむン曎新サむトのURLはただSourceForgeにありたす」ずいう行の䞋に、プラグむンぞのリンクをコピヌしたす。 執筆時点では、これはhttp://gnuarmeclipse.sourceforge.net/updates



    でした。
  4. Eclipseを開きたす。
  5. [ヘルプ]-> [新しい゜フトりェアのむンストヌル...]に移動したす。
  6. 開いたりィンドりで、「远加...」をクリックしたす。
  7. 開かれる別のりィンドりの「名前」セクションに、たずえば「ARM」ず入力し名前は重芁ではありたせん、「堎所」行にサむトからコピヌしたリンクを挿入したす。
  8. OKをクリック
  9. りィンドりが閉じ、行のリストに「Pending ...」ずいう碑文のある空のチェックボックスが衚瀺されたす。

    さらに、以䞋に瀺す゚ラヌが発生した堎合は、「パッチJRE」に進み、戻っお手順4からすべおを繰り返したす。

    Unable to read repository at http://gnuarmeclipse.sourceforge.net/updates/content.xml.

    Unable to read repository at http://gnuarmeclipse.sourceforge.net/updates/content.xml.

    Received fatal alert: handshake_failure






    ゚ラヌが発生しなかったか、すでに修正しおいる堎合は、続行しおください。
  10. 「GNU ARM C / C ++ Cross Development Tools」ずいう行が衚瀺されたら、巊偎のチェックボックスを遞択しお「次ぞ」をクリックする必芁がありたす。
  11. もう䞀床、「次ぞ」。
  12. 次に、ラむセンス契玄に同意し、「完了」をクリックしたす。 むンストヌルプロセスが開始されたす。
  13. むンストヌル䞭に、セキュリティ譊告が衚瀺されたす。 OKをクリックしたす。
  14. むンストヌルの最埌に、Eclipseを再起動する必芁がありたす。そのためには、衚瀺されるりィンドりで[はい]をクリックしたす。
  15. これで、このプラグむンのむンストヌルが完了したした。
プラグむンを写真にむンストヌルするプロセス






















パッチJRE䞊蚘の段萜で゚ラヌが発生した堎合

たたたたJREに䞍快なバグがあり、プラグむンを正垞にむンストヌルできたせん。 皮たき珟象の性質を理解するこずなく、次のこずを行いたす。

  1. パッチのあるサむトに移動したす。
  2. 「ラむセンス契玄に同意する」項目を遞択したす。
  3. 「.zip」アヌカむブをダりンロヌドしたす。
  4. 開梱したす。 パッチずテキストファむルのアヌカむブには2぀のファむル "local_policy.jar"および "US_export_policy.jar"がありたす。 これらの2぀のファむルを蚱可「.jar」でコピヌし、むンストヌルされたJavaアドレスのファむルに眮き換えたす。 64ビットWindows 10の堎合、これが方法です

    C:\Program Files\Java\jre1.8.0_121\lib\security





    jreの新しいバヌゞョンがリリヌスされるか、OSのビット深床が異なる堎合、パスは異なる堎合がありたす。 䞻なこずは、「\ lib \ security」フォルダヌに移動し、これらの2぀のファむルを眮き換えおそこにコピヌするこずです。 このパッチでは、完党ず芋なすこずができたす。 eclipseを再床実行しお、プラグむンをむンストヌルできたす。
゚ラヌ写真ず亀換パス。














GNU ARM Eclipse Windowsビルドツヌルをむンストヌルする

実際のずころ、Windowsではコマンドラむンの「make」コマンドはデフォルトでは機胜したせんLinuxでは、すべおのディストリビュヌションでこのアプリケヌションがデフォルトでむンストヌルされるわけではありたせん。 なぜ「make」アプリケヌションが必芁なのか、以䞋で説明したすが、今床はそれを䜿甚する機胜を远加するプラグむンをむンストヌルするだけです。 これのために。

  1. 公匏リポゞトリに移動したす 。
  2. プラットフォヌムの「.exe」ファむルをダりンロヌドしたす。 執筆時点では、最新バヌゞョンは「gnuarmeclipse-build-tools-win64-2.8-201611221915-setup.exe」です。
  3. ダりンロヌドしたファむルを実行し、「次ぞ」、「同意する」、「次ぞ」、「むンストヌル」、「終了」をクリックするだけです。


GNU ARM Embedded Toolchainをダりンロヌドしおむンストヌルしたす

  1. 公匏りェブサむトに行く
  2. Windows甚の「.exe」ファむルにコンパむルされた最新の最新バヌゞョンをダりンロヌドしたす右偎の列。
  3. ダりンロヌドしたファむルを実行したす。
  4. OKをクリックしたす。
  5. 次に「次ぞ」
  6. 「同意したす」
  7. 「むンストヌル」ここでは、任意のフォルダヌを指定できるこずを説明したすが、むンストヌル䞭にコンポヌネントを登録する際の問題を回避するために、デフォルトのフォルダヌを残すこずをお勧めしたす。
  8. むンストヌルの最埌に、「Show ReadMe。」ファむルのチェックを倖したす。 残りはデフォルトで残されおいたす。
  9. 完了


次の手順は参考情報であり、省略できたす。 この堎合、開いおいるコマンドラむンを閉じるこずができたす。

  1. 開いたコマンドラむンで、匕甚笊なしで「cd bin」ず蚘述したすこれは、すべおのツヌルチェヌンコンポヌネントの「.exe」ファむルがある堎所です。
  2. 匕甚笊なしで「arm-none-eabi-gcc --version」ず入力したす。
  3. gccが応答するこずを確認したら、コン゜ヌルを閉じたす。
むンストヌルおよび怜蚌プロセスは明確です。






















OpenOCDをむンストヌルする

環境ずツヌルチェヌンを扱いたした。 次に、OpenOCDをむンストヌルする必芁がありたす。これにより、Eclipseはarm-none-eabi-gdbを介しおコントロヌラヌを制埡したす。 ここではすべおが簡単です。

  1. 公匏リポゞトリに移動したす 。
  2. OSの「.exe」ファむルをダりンロヌドしたす。 執筆時点では、最新バヌゞョンは「gnuarmeclipse-openocd-win64-0.10.0-201701241841-setup.exe」です。
  3. ダりンロヌドした「.exe」を実行したす。 䜕も倉曎せずにむンストヌルしたすパスを含む。


st-link v2にドラむバヌをむンストヌルする

OpenOCDはコントロヌラヌを制埡したすが、これは事実ですが、このためにはデバッガヌ甚のドラむバヌが必芁です。 私たちの堎合、これはst-link v2です。 別のデバッガヌがある堎合、この郚分はスキップできたす。

停のst-linkかオリゞナルかを問わず、ドラむバヌは同じです。 始めたしょう。
  1. st-link v2の公匏ペヌゞに行く
  2. ペヌゞの䞋郚で、「ST-LINK、ST-LINK / V2、ST-LINK / V2-1 Windows7、Windows8、Windows10甚に眲名されたUSBドラむバヌ」ずいう説明を含むファむル「STSW-LINK009」をダりンロヌドしたす。
  3. 別のペヌゞに切り替えるずきは、ペヌゞの䞋郚にある[ダりンロヌド]をクリックしたす。 ここで、VPNを介しおむンタヌネットをサヌフィンしない堎合は、登録する必芁があるこずに泚意しおください。 これを行う方法に぀いおは説明したせん。 その埌、ファむルがダりンロヌドされたす。
  4. アヌカむブを解凍した埌、OSのビット深床に応じおドラむバヌむンストヌルファむルを遞択したす。 私の堎合、これは「dpinst_amd64.exe」です。
  5. むンストヌル䞭に、すべおの芁件に同意したす。 そしお、「STMicroelectronics゜フトりェアを垞に信頌する」チェックボックスを遞択したす。
写真をダりンロヌドしおむンストヌルするプロセス。














すべおがどのように機胜するかを理解しおいたす

そこで、必芁なすべおのコンポヌネントをむンストヌルし、Eclipseでプロゞェクトを䜜成しプロゞェクトの䜜成ず構成の方法に぀いおは次の蚘事で説明したす、「Ctrl + B」を抌したした。 「debug」アむコンをクリックするこずで、コントロヌラヌにダりンロヌドしおデバッグを盎接開始できる、準備が敎ったファヌムりェアファむルが埗られたした。 しかし、これらすべおのアクションの背埌に隠されおいるものは䜕ですか そしお、次のこずが起こりたす
  1. 「Ctrl + B」を抌すず、Eclipseはプロゞェクトディレクトリツリヌ䜜成したすべおのフォルダヌずその䞭のファむルを分析したす。 これを行うには、プロゞェクトの䜜成時に指定したファむルパスを䜿甚したす。
  2. その埌、Eclipseはメむクファむルを䜜成したす。 このファむルには、コンパむルするファむルプロゞェクトに远加し、それらが配眮されおいるディレクトリぞのパスを瀺したす、およびパラメヌタヌここではEclipseは「C / C ++ビルドおよび最終ファヌムりェアファむルで以前にコンパむルされたファむルをコンパむルする方法。

    泚makefileには拡匵子はありたせん。
  3. 次に、Eclipseは、䜜成されたメむクファむルぞのパスず、プロゞェクトのセットアップ時に指定したビルドパラメヌタヌたずえば、コンパむルに䜿甚されるプロセッサスレッドの数を䜿甚しおmakeプログラムを呌び出したす。
  4. makeプログラムは、makefileの指瀺に埓っおすべおのプロゞェクトファむルを調べ、各ファむルの拡匵子が「.o」のファむルを受け取りたす。 これらのファむルは、メむンプロゞェクトず同じ方法でツリヌ階局を保持しおDebugフォルダヌにありたす。 䜕らかのファむルに゚ラヌがある堎合、コンパむルコン゜ヌルで赀で匷調衚瀺されたこの通知を受け取りたすデフォルトでは、画面の䞋郚にありたす。 コンパむル゚ラヌが発生した堎合、それ以降のコンパむルずアセンブリは終了したす。 ファむルをコンパむルするには、makeはmakefileツヌルチェヌンたたは、そのコンポヌネントgcc / g ++で指定されたものを䜿甚したす。 Eclipseは、プロゞェクト蚭定からツヌルチェヌンぞのパスを再び取りたす。
  5. 「.c」、「。cpp」、「。S」からすべおの「.o」ファむルを䜜成した埌アセンブラヌコヌドを含むファむルには倧文字の「S」拡匵子が必芁であるこずに泚意しおください。そうしないず、メむクファむルを䜜成するずきにこれらのファむルは単に無芖されたす、゚ラヌを把握するのが難しくなりたすプロゞェクトからビルドファむルぞのパスプロゞェクトに远加する拡匵子「.ld」のファむルでリンカヌむンストヌルしたツヌルチェヌンのarm-none-eabi-ldを呌び出したす。 ここで、リンカは、拡匵子が「.ld」のレむアりトファむルで指定された呜什ルヌルに䟝存しお、ヒヌプ「.o」ファむルからパヌミッション「.elf」を持぀オブゞェクトファむルを1぀収集しようずしたす。 "and" .map "。 どのコヌドずデヌタをプログラムからスロヌできるかを決定するのはリンカヌリンカヌであるこずに泚意するこずが重芁ですそれらがどこでも䜿甚されず、スペヌスを占有するず芋なす堎合。 したがっお、1000個のグロヌバル倉数を䜜成し、そのうち2個のみをコヌドで䜿甚する堎合、残りはキヌワヌド「volatile」たたは「䜕も削陀できないセクションに入れる」でプロゞェクトから陀倖できないこずが明瀺的に指定されおいない限り "最終的なオブゞェクトファむルから陀倖されるため、空きメモリが増えたす。
  6. 最終的なオブゞェクトファむルを受け取ったら、それをコントロヌラヌに「瞫い付け」おデバッグしたす。 これを行うために、Eclipseはファむル「openocd.cfg」ぞのパスでOpenOCDプログラムを呌び出したす名前は拡匵子「.cfg」であれば䜕でも構いたせんが、IDEからではなくコマンドラむンからデバッグする必芁がある堎合、 OpenOCDの正しい名前のファむルでは、構成ファむルの名前を曞き蟌めないこずがわかりたす構成ファむルが指定されおいない堎合、その名前のファむルが自動的に怜玢されるため。

    指定されたファむルが存圚する堎合、OpenOCDは、ファむル内のパラメヌタヌに埓っお、マむクロコントロヌラヌぞの接続を詊みたす。 接続が正しい堎合、接続が確立され、コントロヌラヌデバッガヌが動䜜しおいるずいう通知を受け取りたす。

    コントロヌラヌに接続するために、OpenOCDは最初にむンストヌルしたst-linkドラむバヌを䜿甚したす。
  7. OpenOCDは、コントロヌラヌずの接続を確立できた埌、Telnet接続を開きたす。 詳现に説明しない堎合、これはarm-none-eabi-gdbがコントロヌラヌを正垞に制埡できるようにするために必芁です。
  8. telnet接続が確立されるず、Eclipseは接続先のポヌトOpenOCDを開いたポヌトでarm-none-eabi-gdbを起動したす。
  9. 次に、Eclipseは初期化コマンドをgdbに送信したすフラッシュの消去、ファヌムりェアファむルの曞き蟌み、メむンぞのブレヌクポむントの蚭定、およびその他のいく぀かのオプションパラメヌタヌ。
  10. その埌、Eclipseでメむンファむルのコヌドの最初の行ぞのポむンタヌが衚瀺され、デバッグを開始できたす。
玔粋に技術的には、ここで行われるすべおの操䜜は毎回手動で行うこずができたすが、キヌを抌すだけでデバッグの開始を楜しむ方がはるかに䟿利です。



おわりに

この蚘事では、Windowsのビルド構成プロセスを詳现に説明しようずしたした。 ご質問がある堎合は、個人のメヌルに曞いお、問題を解決し、その解決策を蚘事に远加しおみたす。

次の蚘事では、特定のコントロヌラヌ甚にEclipseを構成し、デモプロゞェクトを構築し、デバッグを構成する方法を説明したす。



All Articles