ARM Cortex-Mマイクロコントローラのコード・カバレッジを測定する

このブログは「Measure code coverage on ARM Cortex-M microcontrollers」を翻訳・一部加筆したものです。

はじめに

ARM Cortex-Mファミリーは、ますます一般的なマイクロコントローラのアーキテクチャとなっています。この記事では、このファミリーのマイクロコントローラATSAMD21G18のコードカバレッジを測定する方法を紹介します。使用するツールはSquish Coco、SparkFun SAMD21 Dev Breakoutの開発ボード、そしてAtmel-ICEプログラマです。

ビルド環境の選択

Atmel StudioSquish Cocoをインストールした後、Cocoツールのビルド環境選択(toolselector.exe、又は、BuildEnvironmentSelection.exe)を起動します。このツールは、オペレーティングシステムのスタートメニューにあります。Windows では、以下のように表示されます:

このツールを起動した後に表示されるダイアログで、まずツール・スイートとしてGNU Embedded Tools (I/O機能なし)を選択し、次にGNU Embeddedディレクトリを選択します。最後に、GNUサポートをインストールするボタンをクリックします。

C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\arm\arm-gnu-toolchain を選択してください。親ディレクトリや子ディレクトリでないことにご注意ください。そうしないと、[Install GNU Support]ボタンが有効になりません。

GNU Supportが追加されたら、Cocoのインストール・フォルダーに移動し、新しく作成されたarm-gnu-toolchainwrapperフォルダーに移動します(例: C:\Program Files\squishcoco\arm-gnu-toolchain\wrapper)。そこにarm-none-eabi-gcc.csproというファイルがあります。このファイルの中には、CONSTRUCTOR_ATTRIBUTEとDESTRUCTOR_ATTRIBUTEという2つの設定があるはずです。これらの設定の値が__attribute__((constructor))である場合は、両方の設定でこの値を削除してください。

Coco の設定(Flavour)を追加します

次にAtmel Studioを開き、メニューのToolsからOptionsを選択します。オプションダイアログが開きますので、ツールチェーンオプションのパッケージ構成を選択してください。ここで、[Add Flavour]ボタンをクリックしてCoco "Flavour"を追加し、[Package Name]フィールドにCocoを、[Package Base Path]フィールドにC:\Program Files\squishcoco\arm-gnu-toolchain\wrapperを入力します。

このCocoの「flavour」は、後でプロジェクトをSquish Cocoサポート(コードインスツルメンテーションなど)でコンパイルするときに使用されます。

デバイス接続の確認

オプションとして、新しいプロジェクトを作成する前に、開発ボードがAtmel Studioで利用可能かどうかを確認します。そのためには、まずメニューのToolsからDevice Programmingを選択します。次に表示されるダイアログで、コンボボックスでAtmel-ICEを選択し、デバイスフィールドでATSAMD21G18を入力または選択し、適用ボタンをクリックします。最後に、[デバイス情報]タブで[読み取り]ボタンをクリックします。これでマイコンの情報が表示されます。

サンプル プロジェクト

プロジェクトでCoco Flavourを使い始める前に、サンプル・プロジェクトでセットアップをチェックすることができます。これを行うには、新しいGCC C実行可能プロジェクトを作成し、そのプロパティを開きます。デバイス・プロパティでデバイスATSAMD21G18を選択し、詳細プロパティでCoco Flavourを選択します。

ツールチェーン・プロパティで、CコンパイラとCリンカの両方について、「その他の設定」の「その他のフラグ」フィールドに、以下のフラグを追加します:

--cs-memory-pool=4096 --cs-libgen=-mthumb --cs-on --cs-hit --cs-counter-size=1 --cs-exclude-file-wildcard=*_samd21.c --cs-exclude-file-wildcard=c:*.* --cs-minimal-api --cs-libgen=-g --cs-libgen=-O0

ここで重要なのは、-cs-libgen=-mthumbを追加することです。なぜなら、デフォルトではプロジェクトがthumb命令セットを使用しているからです。

これに続いて、1つか2つの簡単な関数を追加して、マイクロコントローラー上でプロジェクトのコンパイルとデバッグを試みることができます。

カバレッジ・データの取得

デバイスからカバレッジ・データを取得するには、ブログ記事「リモート・デバッガ接続経由でコード・カバレッジ・データを取得する」で説明したのと同じアプローチを使用できます。CocoのカスタムIO関数を追加(実装)し、GDBデバッガを使用する必要があります。このツールのコンソールウィンドウは、Atmel Studioの[表示] > [その他のウィンドウ] > [GDBコンソール]メニューの下にあります。

これについては、今後のブログ記事で詳しく紹介する予定です。とりあえず、この例を試してみたい方は、こちらのソースコードをご利用ください: GccApplication1.zip

[*] Published on March 5, 2019: Retrieving Code Coverage from ARM Cortex-M Microcontrollers


Blog Topics:

Comments