第 4 章

GCCによる開発とInsightによるデバッグ

GNUを使ったSTM32の開発ツールの製作
山際伸一
本誌 2008 年 5 月号付属の ARM 基板を使って組み込みソフト

ブです．

ウェア開発を行うには Keil 社のツールμ Vision を用いた．μ③ GNU̲tools̲binary

Vision は，Cortex-M3 向けのコンフィグレーションや最適化などが自動的に行われるため，Cortex-M3 でのプログラム

ARM 開発向けにコンパイル済みの GNU ツールです．
④ GNU̲tools̲src開発に適した環境である．今回は ARM 専用の開発ツールではGNU ツールのソース・ファイルです．

なく，GNU が提供するフリーの開発環境を使い，プログラムここでは，GNU ツールをセットアップするので，③をコンパイルし，バイナリ・ファイルをダウンロードして実行GNU̲tools̲binary フォルダの「arm-tools.tar.bz2」をする方法について解説する．

Cygwin のホーム・ディレクトリ（デフォルトの Cygwin の（筆者）

インストールでは C:¥cygwin¥home¥ ユーザ名）にコピー

1．Cortex-M3 を GNU ツールで動かすします．Cygwin のコンソール画面を開き，以下のコマンドを実行します．

● GNU 開発環境を用意する
まず，GNU（GNU s Not UNIX）ツールを用いた C 言語

$ cd ¥usr¥local$ tar jxvf ˜/arm-tools.tar.bz2

開発環境をそろえます．ここで用意する開発環境はCygwin

これで，コンパイル済みの C コンパイラ，アセンブラ，（GNU の開発ツールを含む UNIX のさまざまなフリー・ソリンカなどが ¥usr¥local¥arm-tools フォルダに展開されまフトウェアを Windows に移植したもの）で動作します．

す．これで開発環境の準備は完了です．

Cygwin のサイト（http://www.cygwin.com/）からCygwin をインストールします．
次に，本誌の Web サイト（http://www.cqpub.co.
jp/dwm/）から「download̲files̲yamagiwa.zip」をダウンロードします．そのファイルを適当なフォルダに解凍しま

これから解説するサンプル・プログラムが，ダウンロード・ファイルの gcc̲sample¥cortex̲m3 フォルダにあるので，そのフォルダをホーム・ディレクトリにコピーしておきます．
$ cp -R download̲files̲yamagiwa¥gcc̲sample¥cortex̲m3 ˜¥す．以下の四つのフォルダが含まれています．
① gcc̲sample

先ほど展開した GNU 開発環境が正しく動作するかをテ後述する GNU ツールを用いた Cortex-M3 向けサンプストするため，以下のコマンドを実行してみます．

ル・プログラムです．

$ cd cortex̲m3② gdb-stub$ make clean

後述するGNU ツールを用いたCortex-M3 向けGDB スタ

Keyword62$ makeμ Vision，GNU，Cygwin，C コンパイラ，アセンブラ，リンカ，GCC，T バリアント，インテル HEX，モトローラ S，DfuSe，GDB スタブ，スタートアップ・ルーチン

Design Wave Magazine 2008 June

ARM基板を使ったシステム開発の基礎
ここで，GCC やGAS などのコマンドが実行されてエラーが発生しなければ開発の準備は完了です．
もし，何かしらの原因で GCC などが実行できない場合には，コラム 1（下記参照）のソースからのコンパイルを実行

セッサのアーキテクチャをきちんと理解していないと，メモリ・マップや初期化ルーチンなどを正しく記述できません．そこでまずは，Cortex-M3 向けのプログラムを作成する際の注意点を最初に考えてみます．

してください．
（1）Cortex-M3 および STM32 アーキテクチャの注意点● GNU ツールで Cortex-M3 向けプログラムを開発する
ここでは GNU ツールを使って，ARM 基板用に以下のような機能を持つアプリケーション・プログラムを開発する

ARM 基板の STM32 に搭載されている Cortex-M3 プロ
セッサの注意点に関して考えてみます．
Cortex-M3 向けのプログラムを開発する際，これまでの方法を解説します．

ARM アーキテクチャと異なる以下の事柄があります．

① A-D コンバータからの値を RS-232-C シリアル接続を介① Thumb 命令のみを実行する② RS-232-C シリアル接続からの入力文字が「0」のとき，ARM 基板上の LED1 を消灯する③ RS-232-C シリアル接続からの入力文字が「1」のとき，ロセッサの派生CPU ですが，サポートする命令はThumb，または，Thumb-2 のみです．従って，GCC で開発をするイン・オプションを追加する必要があります．本稿では①は無限ループで出力し続け，②と③の操作はいつでもThumb 命令を用いる方法を解説していきます．

み機能を使う必要があります．

Thumb 命令を実行するとはいえ，Thumb 命令のいくつかは Cortex-M3 ではサポートされていません．例えば，ています．これだけの仕様が固まっていれば，チェックをBLX 命令（32 ビット・アドレス分岐＋LR に戻り番地を格納忘れなければスムーズに開発が進みます．GNU ツールをする命令）はサポートされておらず，BX 命令のみを用いてベースとした開発では，ターゲットとなる Cortex-M3 プロ

32 ビット・アドレス分岐を実現する必要があります．

コラム 1 クロス開発環境をコンパイルする
リストA

ARM 向けクロス開発環境の構築

場合，ソース・コードからクロス開発環境を作る方法を説明します．
本誌 Web ページから提供されるダウンロード・ファイル download
̲files̲yamagiwa.zip を解凍した GNU̲tools̲src フォルダの中には，binutils-2.16.tar.bz2
gcc-3.4.5.tar.bz2
insight-6.4.tar.bz2の三つのファイルが含まれています．
これらのファイルをホーム・ディレクトリにコピーします．
リスト A に示す手順で ARM 向けのクロス開発環境を構築します．
クロス環境を構築する際には順番があり，binutils というパッケージ，GCC パッケージという順で構築が必要です．さらに，GCC を構築する際には PATH 環境変数に binutils で構築したコマンドへのパスを追加する必要があります．
最後に後に説明する Insight の構築をしています．
約 1 時間から 2 時間くらい静かに見守っていると，一連のコンパイルが完了します．

4#!/bin/shtar jxvf binutils-2.16.tar.bz2
cd binutils-2.16./configure --target=arm-elf -prefix=/usr/local/arm-tools
makemake install
cd ..
export PATH=/usr/local/arm-tools/bin:$PATH
tar jxvf gcc-3.4.5.tar.bz2
cd gcc-3.4.5./configure --target=arm-elf--prefix=/usr/local/arm-tools --enable-languages=c
makemake install
cd ..
tar jxvf insight-6.4.tar.bz2
cd src./configure --target=arm-elf -prefix=/usr/local/arm-tools/gdb
makemake installcd ..

Design Wave Magazine 2008 June

56② Thumb 命令の中でサポートされていないものがある

Keil 社のμ Vision では，GUI が必要な設定項目を表示し何らかの理由で arm-tools.tar.gz を展開したコマンドが動作しない

3

際には，必ず Thumb 命令を出力するようにコマンド・ラARM 基板上の LED1 を点灯する受け付けるようにします．これを実装するためには割り込

12Cortex-M3 プロセッサは，ARM7-M と呼ばれるARM プ

して 1 秒ごとに出力する

063