第１章

組み込み機器のソフトウェア開発の実際

クロス開発とは何か
山際 伸一

本章では，組み込み機器とは何か，そしてその実現方法について簡単に説明した後，その上で動作する組み込みプログラムの開発が，Windows 上で動作するアプリケーション・プログラム開発とどのように異なるかについて解説する．さらに，組み込み機器開発で特有なデバッグ手法についても，さまざまな形態のデバッガを例にあげて解説する．
(編集部)

1 組み込みシステムとは● 組み込みシステムの実現方法
組み込みシステムを実現するためには，大きく分けて次の二つの方法があります．

● 組み込みシステムって何？

（1）すべてハードウェアで制御している場合「組み込みシステム（Embedded System）」とは，いったい何

まず一つは，図 1（a）のようにハードウェアだけでシステムでしょうか．組み込みシステムとは非常に簡単にいうと，あるを実現する方法です．たとえば，選択したモードをフリップフ

特定の処理を行うために専用に設計され，組み込まれたシステロップで保持し，それにより選択された回路が動作して機器のムであるといえます．

さまざまな状態を制御します．

組み込みシステムにはさまざまなものがあります．たとえば，

図 1（a）の回路は標準ロジックの 74 シリーズの IC が使われ

電子炊飯器は組み込みシステムの例としてふさわしいでしょう．

ていますが，最近ではより高度で規模の大きな回路を必要とす

炊飯器を使うとき，炊飯モード（最近だと玄米モードとか早炊ることから，PLD（Programmable Logic Device ：プログラミン

きモードなどがある）を選択し，スタート・ボタンを押すといっグ可能なロジック・デ バ イ ス ）や ASIC（ Application Specific

た操作を行います．この操作の順序やモードの判別，またモー

Integrated Circuit ：アプリケーションのために専用に設計されドごとの温度や時間の制御は，炊飯器に 組み込まれた 専用シ

た IC）が使われています．

ステムが行っているわけです（イラスト 1）．

（2） CPU ＋ソフトウェアで処理している場合

この定義からいうと，パソコンは組み込みシステムとはいい

この方法は，汎用の CPU（Central Processing Unit）と ROMがたいところがあります．パソコンはインストールするソフト（Read Only Memory）や RAM（Random Access Memory）な

ウェアによって，さまざまな処理を行わせることができるからどのメモリを接続したハードウェア（CPU ボード）を必要とすです．

るので，（1）の延長線上にあるといえばそうなのですが，それだけではシステムは動作しません．CPU を動かすためのプログ
ラムを作成して，メモリに格納して初めてシステムとして完成します〔図 1（b）〕
．つまり，まったく同じ CPU ボードでも，メモリに格納するプログラムを入れ替えると，別の動作を行わせることも可能です．
組み込みソフトウェアとは，CPU ボードのメモリに格納し，CPU ボード上で動作させるソフトウェアのことを指します．
本特集では，（2）の実装を主眼において，組み込みソフトウェアを作成していく方法を解説します．

● ソフトウェアのメリット
先ほど説明した（1）の方法では，回路図を作成すればよいわ
けですが，（2）の方法では，CPU ボードの回路図と，その上でイラスト 1 電子炊飯器はれっきとした組み込みシステム

44

走らせるソフトウェアの両方を開発する必要があります．一見，Jan. 2005

1

クロス開発とは何か（2）の方法はハードウェアとソフトウェアの両方が必要となる＋5V

ので，設計がたいへんだと思うかもしれません．しかし，（2）10kの方法には次のような大きな利点があります．

13
12

R2

一般的にソフトウェア開発では，開発ツールを安価でそろえ

10k
Tr1
2SC1815（東芝）
C6

ることができます．すでに説明したように，同じ CPU ボード
でもソフトウェアを入れ替えることで別の処理を行わせること

10μ
R 1 1k GNDができます．また，メモリの容量に空きがあれば，機能を追加することも可能です．さらにプログラムに不具合（バグ）が見つかっても，即座に修正することができます．

IC3D

11
13

11

74HC00N

GND

IC4A
5
4
PRE Q
2
D

1
2

3
1

C5

C4

IC4B
9
10
PRE Q
12
D

＋5V

R3

47n
0.1μ

要になります．また別の処理を行わせたり機能を追加するには，そのための回路が必要になります．また回路にまちがいが見つかったときに，それを修正するために多くの手間やコストがかかります．

● ソフトウェアのデメリット

CLK
6
CLR Q
74HC74N

4
5まず，ソフトウェアを動作させるには，CPU ＋メモリという

1200p

C 102

ハードウェアが必要だということです．とはいえ，わざわざ

6

IC3C
74HC00N

31

4 C 105
IC7A
NE5532N 0.1μ
（TI）
VEE
GND
GND

9

8

1

IC5
SER

15
QA
1
＋5V
QB
2
11
SCK QC
3
10
SCL QD4QE
512
RCK QF
6
QG
7
QH
14

VCC
C 103
C 101 R 103 330p
C 104
22μ 12k R
102
R
10V 101 7.5k 2 8 0.1μ
6.8k

IC3B

74HC00N 10

GND
SDATA
LB
BCK

ソフトウェアで開発する際にもいくつかデメリットはあります．

3

74HC00N

一方，ASIC などのハードウェア開発では，一般的に高価な開発ツールを必要とするので，開発には大きな投資や時間が必

IC3A

CLK
8
CLR Q
74HC74N

13

G
QH＊
74HC595N

2
3

9

4

VCC
C3

1 PA23
3 PA2247 ̲WRH
48 ̲WRL

VCC

32

TC554001AF

21 D7
20 D6
19 D5
18 D4
17 D3
15 D2
14 D1
13 D0

̲WRL 7
̲RD 32
̲CS2 30

43 ̲RDA[0..18],TCK,TMS,̲TRST,̲ENABL

45 PD3146 PD3056 PD2957 PD2858 PD2759 PD2660 PD2562 PD2464 PD2365 PD2266 PD2167 PD2068 PD1969 PD1870 PD1772 PD16

D[0..7],PD[8..31]

A18
A17
A16
A15
A14
A13
A12
A11
A10
A9
A8
A7
A6
A5
A4
A3
A2
A1
A0
*WE
*OE
*CE

5
DQ7
DQ6
DQ5
DQ4
DQ3
DQ2
DQ1
DQ0

29 D7
28 D6
27 D5
26 D4
25 D3
23 D2
22 D1
21 D0

C1+

VS-

3
4

C1C2+

5

C2-

TXD0

11

TXD1

10

VCC

2

ＤＳＵＢ メス
P1

6
5
9
4
8
3
7
2
6
1

ADM3202

14

T1IN

T1OUT

T2IN

T2OUT
R1IN

13

R2IN

8

7

7

int registers[NUMREGBYTES / 4];
stepData instrBuffer;static const char hexchars[] = "0123456789abcdef";
static char remcomInBuffer[BUFMAX];

DB9

C13
0.1uF

1

6

typedef struct{
short *memAddr;
short oldInstr;}
stepData;

C16
0.1uF

16
VCC

VS+

U11
ADM3202NP

A2（a）すべてハードウェアで実現する#define SIG_IRQ 0x18
#define SIG_FIQ 0x1C

VCC

C19
0.1uF

73 PD1574 PD1475 PD1376 PD1278 PD1180 PD1081 PD982 PD8
83 D7
84 D6
86 D5
88 D4
89 D3
90 D2
91 D1
92 D0

9
6
10
11
5
4
12
1
31
2
3
13
14
15
16
17
18
19
20

24

*WE
*OE
*CE

I/O8
I/O7
I/O6
I/O5
I/O4
I/O3
I/O2
I/O1

A18
A17
A16
A15
A14
A13
A12
A11
A10
A9
A8
A7
A6
A5
A4
A3
A2
A1
A0

MBM29F040C

̲WRL 29
̲RD
24
̲CS1 22

A1

C38
0.1uF

GND

̲CS3
̲CS2
̲CS1
̲CS0

VCC

53
54
49
50

A18
A17
A16
A15
A14
A13
A12
A11
A10
A9
A8
A7
A6
A5
A4
A3
A2
A1
A0

extern _breakpoint_address;
extern _ilegalinst_address;

R9 2.2K
RXD0

12

R1OUT

RXD1

9

R2OUT

GND

PD15/D15
PD14/D14
PD13/D13
PD12/D12
PD11/D11
PD10/D10
PD9/D9PD8/D8PD7/D7
PD6/D6
PD5/D5
PD4/D4PD3/D3PD2/D2
PD1/D1PD0/D0

A18 1
A17 30
A16 2
A15 31
A14 3
A13 28
A12 4
A11 25
A10 23
A9 26
A8 27
A7
5
A6
6
A5
7
A4
8
A3
9
A2 10
A1 11
A0 12

U5
MBM29F040C

J2
DF1B̲3P̲2.5DSA

SH70451
2
3char * strcpy(char *dest, const char *src){

CON8BT

while(*src != '¥0'){*dest = *src;
src ++;
dest ++;}*dest = 0;
return dest;

VCC
VCC
RTS
CTS
RXD
TXD
GND
GND

}

CPU ＋ ROM ＋ RAM

図 1 組み込みシステムの実現方法

Jan. 2005

J6
1
2
3
4
5
6
7
8

PA8
PA9
TXD0
RXD0

1
2
3

VCC

15

PA14/*RD
PD31/D31/?ADTRG
PD30/D30/*RQOUT
PD29/D29/*CS3
PD28/D28/*CS2
PD27/D27/DACK1
PD26/D26/DACK0
PD25/D25/DREQ1
PD24/D24/DREQ0
PD23/D23/RQ7
PD22/D22/RQ6
PD21/D21/RQ5
PD20/D20/RQ4
PD19/D19/RQ3
PD18/D18/RQ2
PD17/D17/RQ1
PD16/D16/RQ0

A18
A17
A16
A15
A14
A13
A12
A11
A10
A9
A8
A7
A6
A5
A4
A3
A2
A1
A0

C37
0.1uF

16

PA23/*WRHH
PA22/*WRHL
PA13/*WRH
PA12/*WRL

37
27
25
24
23
22
21
20
19
18
17
16
15
13
11
10
9
8
7

C17
0.1uF

PA7/TCLKB/*CS3
PA6/TCLKA/*CS2
PA11/*CS1
PA10/*CS0

PB9
PB8
PB7

C20
0.1uF

PB6/*IRQ4/A18/*BACKPB1/A17
PB0/A16
PC15/A15
PC14/A14
PC13/A13
PC12/A12
PC11/A11
PC10/A10
PC9/A9PC8/A8
PC7/A7
PC6/A6
PC5/A5
PC4/A4
PC3/A3
PC2/A2
PC1/A1
PC0/A0U4
TC554001AF
41
39
38

GND

128
127
AVCC
AVREF
PB9/*IRQ7/A21/*ADTRG
PB8/*IRQ6/A20/*WAIT
PB7/*IRQ5/A19/*BREQ

VCC

8

VCC

0.1UF

（b）CPU ＋ソフトウェアで実現する

ソース・リスト

News Flash ――日立，東芝，松下がテレビ向け液晶ディスプレイの合弁会社を設立へ（株）日立製作所と（株）東芝，松下電器産業（株），および（株）日立ディスプレイズは，薄型テレビ向け液晶パネルを製造および販売する合弁会社を共同で設立する．合弁会社の社名は「（株）IPS アルファテクノロジ」．2005 年 1 月 1 日に発足する予定．

45

8

ASIC を開発するよりは，はるかに安い価格で CPU ボードを実● 組み込みシステム向け CPU

現することができます．

組み込みソフトウェアを動作させるために欠かせないのが CPU

もう一つは処理速度です．ハードウェアだけで処理する場合です．多くのベンダから「組み込みシステム向け CPU」なるものとソフトウェアで処理する場合を比較すると，一般的にはハーがリリースされているということは読者の皆さんもご存じでしょ

ドウェアでの処理のほうが高速です．人間がボタンを押してう．この「組み込み向け」という意味は何でしょうか．

LED を点灯させる…といったようなそれほど高速でない処理

組み込みシステムにおいては，次のような事がらに配慮しな

は，ソフトウェアでも十分に処理できますが，ns オーダの性能ければなりません．

が要求されるような処理は，ハードウェアで行わせるべきで（1）コストしょう．

基板面積，部品価格など，物理的なコスト．大きなチップは

もちろん，ソフトウェアでの処理性能を上げるために，より高速な CPU を使うという方法もあります．しかし高性能な CPU

組み込みシステムに適さない．
（2）消費電力

はコストも高く，それが製品に跳ね返ってくるので，どれくらいの性能の CPU を採用するかといった問題は，実は非常に重バッテリ駆動の製品は当然ながら，据え置き型でも低消費電力が望ましい（冷却ファンなどは故障の原因にもなる）．

要な問題でもあります．

◆ COLUMN1 HDL を使ったハードウェア開発
ソフトウェアとハードウェアの比較で，ハードウェアの設計には語でハードウェアを開発することもできるようになってきました．

回路図を，ソフトウェアではソース・リストを使うと説明しまし

HDL によるハードウェア開発は，リスト A のようなソース・リた．しかし最近のハードウェア開発では，ソース・リストで入力す

ストを入力し，これを論理合成してハードウェアの回路を生成しまるという設計手法が普及しています．

す．回路がまちがっていれば，テキスト・エディタ上でソース・リ

ハードウェアを記述するソース・リストを，HDL（Hardware

ストを修正して再度論理合成すればよいわけです．回路図を使わ

description language）と呼びます．現在では HDL として一般的なず，大規模な論理回路を設計できるので，ASIC 開発などでは必須

ものに，VHDL や Verilog-HDL があります．また，最近では C 言の設計手法となっています．

リスト A HDL ソース・リストの例（VHDL）
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity crc16_general_multi is
generic (ROUND_NUM: integer:= 8);
port (
data_in: in std_logic_vector(
ROUND_NUM - 1 downto 0);
shift_in: in std_logic;
init_in: in std_logic;
init_val: in std_logic_vector(15 downto 0);
final_val: in std_logic_vector(15 downto 0);
genpoly_val : in std_logic_vector(15 downto 0);
reset_n: in std_logic;
clk: in std_logic;
data_out: out std_logic_vector(15 downto 0));
end crc16_general_multi;
architecture RTL of crc16_general_multi isfunction fast_round(prev_parity : std_logic_vector(15 downto 0);data: std_logic_vector(ROUND_NUM - 1 downto 0);
genpoly : std_logic_vector(15 downto 0))
return std_logic_vector isvariable tmp_result : std_logic_vector(15 downto 0);
variable d_bit: std_logic;
variable d_val: std_logic_vector(15 downto 0);

46

begin
tmp_result := prev_parity;
for I in ROUND_NUM - 1 downto 0 loopd_bit:= tmp_result(15) xor data(I);for J in 0 to 15 loop
d_val(J):= d_bit;end loop;tmp_result := ((genpoly and d_val) xor(tmp_result(14 downto 0) & '0'));end loop;
return tmp_result;end fast_round;signalparity_reg: std_logic_vector(15 downto 0);

begin
u0: process (clk, reset_n) begin
if (reset_n = '0') thenparity_reg <= (others => '0');
elsif (clk'event and clk = '1') thenif (init_in = '1') thenparity_reg <= init_val;
elsif (shift_in = '1') thenparity_reg <= fast_round(parity_reg,
data_in, genpoly_val);
end if;end if;end process;data_out<= parity_reg xor final_val;

end RTL;

News Flash ――アイワイバンク銀行で，平成 18 年より WindowsServer ベースの勘定系システムが稼動（株）アイワイバンク銀行は，平成 18 年を目途に，現行の勘定系システムを WindowsServer ベースのシステムに移行することを決定した．システム構築を日本ユニシス（株）が，システム・インテグレーションを（株）野村総合研究所が担当する．

Jan. 2005

1

クロス開発とは何か（3）性能

表 1 組み込み向け CPU のいろいろ処理対象に対して十分に速い（とくに人間の操作に十分追いつける程度）．
（4）供給の安定性
工場の制御システムなどでは，5 年や 10 年といった長期間使われる場合が多い．修理しようとしたときにすでに部品がない
ようでは困る．
これら要求を十分に満たすものが「組み込み向け CPU」なのです．
表 1 に，組み込み向けと呼ばれる CPU の主なものを示しまプロセッサ名PIC マイコン
Z80
H8
SH-2（SH7145）
SH-4（SH7750）
MIPS（VR7701）
ARM（XScale PXA250）
PowerQUICC Ⅱ（MPC8280）
参考： Pentium4

消費電流/電力

60mA
200mA
500mA
6W
500mW
2W
115W

クロック周波数（Hz）
数〜十数 M
数〜十数 M
十数 M
50M
200M
400M
400M
500M
3G

す．組み込みシステムとは，最初に説明した電子炊飯器のよう
01101000 11110000 10101111
00000001 10010010 ……(2 進数表記)
68 F0 AF 01 92 5A BC 11 70
82 96 BD 1E FF 00 ……(16 進数表記)

な簡単なものから，DVD/HDD レコーダといった高機能なものまで，さまざまなものがあります．そのため性能や消費電力，

1

そしてコストに応じて，いろいろな CPU が各社からリリース

2

されているのです．
また，組み込み CPU ではないものの，いちばん下に，最近のパソコンに用いられる CPU を挙げてみました．とくに，消費電力では，組み込み向けプロセッサは非常に有利であることがわかると思います．しかし，プロセッサとしての処理能力は，
パソコン向けのプロセッサよりも劣っています．これは，チッ
プの大きさを小さくすることでコストダウンを図るためや，消費電力の低減にともなうトレードオフによるものです．
組み込みシステムは特殊で，たいてい，プロセッサの周辺
チップはあらかじめ決まっていることが多いため，たとえば，
DRAM コントローラや，グラフィック・コントローラといった
ハードウェア・ロジックを搭載しているものが多く見うけられます．このような，「アプリケーションを見据えた」プロセッ
サ・アーキテクチャをとるのも組み込みプロセッサの特徴です．

.text.align0.global_main_main:
mov ip,sp
stmfd
sp!,{fp,ip,lr,pc}
sub fp,ip,#4
bl___gccmain
ldr r3,.L3
mov r1,#16
mov r2,r1@movhi
strh r2,[r3, #0]@movhib.L2.L4:.align
0
.L3:
.word
_xyz
.L2:
.L1:
ldmea
fp,{fp,sp,pc}.comm_xyz,4@2

機械語

マシン寄り

3

人間寄り

4

アセンブリ言語
高級言語

A1
short int xyz;

5main(){
xyz = 0x10;}A2

図 2 機械語/アセンブリ言語/高級言語

2 組み込みソフトウェア開発方法

6

れたリストです．

● 機械語/アセンブリ言語/高級言語● PC 上での Windows プログラミング

ソフトウェアとは，CPU を動かすための命令の集まりです．

読者が Windows プログラムを PC で開発する場合を考えてみ

図 1（b）では英語に似たアルファベットや数字が並んだ文字列てください．つまり，PC 上でのプログラミングということにが示されていますが，CPU が実際に理解するのは 0 と 1 をなりますが，PC はたいていの場合，ディスプレイ，キーボー

組み合わせた数値でしかありません．これを機械語と呼びます．

ド，マウスといった開発者に優しいインターフェースがあり，

機械語のままでは人間が理解できないので，それを人間が理解それらを操作することでプログラムを作成していくことになりできるような文字列に置き換え，ソフトウェアを開発します．

ます．また，Windows では，図 3 のようなインタラクティブな

これをアセンブリ言語と呼びます．

開発環境が提供されているので，作ったその場で動作確認を，

アセンブリ言語は，加算なら ADD，引き算なら SUB といった，CPU の一つ一つの動作を記号に置き換えたものです．機械ディスプレイを見ながら可能で，さらに，作業状態を HDD に保存しておき，あとで作業を再開することができます．

語よりは人間が理解しやすいものの，処理単位があまりにも細このような，ソフトウェアを動作させる環境上でプログラム

かすぎて，大規模なプログラムを作成するのには向きません．

開発も行うことを「ネイティブ開発環境」といいます．また自分

そこで，より人間の考える処理内容を記述できような言語が考自身で自分用のプログラムを開発することになるので，セルフ

え出されました．これを高級言語と呼び，現在の組み込みソフ

開発とも呼びます．

トウェアでは一般的に，C 言語が使われています（図 2）．

● 組み込み機器のソフトウェア開発

ちなみに，図 1（b）で示したソフトウェアは，C 言語で書かJan. 2005

組み込みシステムの場合，必ずしも，ディスプレイを接続でNew Products ――松下，ホール・センサを削減した光ディスク用モータ・ドライブ IC を発売
松下電器産業（株）は，光ディスク・ドライブに必要なモータ・ドライバをすべて内蔵している IC「AN41222A」（デスクトップ PC 向け）と「AN41230A」（ノート PC 向け）を発売した．スピンドル・モータ・ドライブ部のホール・センサの数を削減し，薄型化および軽量化を図っている．

47

7
8

図3
ネイティブ開発環境の例（Visual C++）

きる RGB コネクタや，文字を自在に入力するためのキーボー

入力しなければなりません．また，正しく文字が入力されたこと

ド接続コネクタが存在するわけではありません．それらのコネを画面表示などで確認しなければなりません．

クタをもっていない場合も多くあります．たとえば，最初に説● クロス開発環境とは明した電子炊飯器では，状態出力としては LED 表示や，せい

そこで，画面やキーボードやストレージを持っている PC 上

ぜい LCD で数桁の数字を表示する程度しかできません．もちで組み込み機器用のソフトウェアを開発し，作成したソフト

ろんキーボードも接続することはできません（イラスト 2）．

ウェアを組み込み機器に転送して実行するという手法が採用さ

しかし，C 言語を代表とする高級言語でソフトウェアを開発すれています．このように，プログラムを開発する環境と実行す

るには，英語のようなアルファベットの文字列や数字をたくさんる環境が異なる場合を，「クロス開発環境」と呼びます（図 4）．

PLD を使ったハードウェア
開発

アプリケーションが実行されるマシンのプロセッサ」となりまネイティブ開発環境では「開発しているマシンのプロセッサ＝◆ COLUMN2

すが，組み込みシステムの場合，このイコールの関係が成り立ちません．そのためクロスと呼ばれているようです．

ソフトウェアとハードウェアの比較で，ハードウェアは修
正がたいへんだということを説明しました．しかし，現在ではハードウェアの修正も簡単にできる PLD（Programmable
Logic Device）と呼ばれる便利なデバイスも存在します．
74TTL による回路では，回路を修正するにははんだごてなどを使って端子の接続の状態を変更する必要がありました．しかし PLD は，端子の接続状態や回路情報をデバイス内部に保持して動作するので，はんだごてなどを使わなくても PLD の中身を書き換えれば，回路状態などを変更することができるのです．
現 在 で は ， よ り 大 容 量 の P L D と し て F P G A（ F i e l d
Programmable Gate Array）と呼ばれるデバイスも存在しています．ASIC の開発は高額な開発費や開発期間が必要です
が，FPGA は開発者の手元でいつでも回路を開発できるので，ASIC 開発のプロトタイプとしてもよく使われます．最近では大容量の FPGA も安くなってきているので，量産品にそのまま FPGA を採用する事例も増えています．

48

イラスト 2 キーボード入力や画面表示の無い組み込み機器で，どうやってプログラムを開発する？

News Flash ――富士ゼロックス，上海工場の生産ラインを拡張し，ディジタル複写機と複合機の生産を拡大へ
富士ゼロックス（株）は，上海工場の生産ラインを拡張し，11 月 1 日より本格的に稼動を開始した．2005 年度には，ディジ
タル複写機と複合機の生産能力を 3 倍に拡大する見込み．

Jan. 2005

クロス開発とは何か

1

図 5 に代表的な組み込みクロス開発環境を示します．開発する CPU ボードは，クロス開発環境では「ターゲット・システム」と呼びます．そして開発のために使うマシン（組み込みシステ
ムのプログラムを実際に入力するマシン）を，「ホスト」と呼ぶのが一般的です．
ホストには，Windows や Linux などを走らせた PC を使いま

開発環境と
実行環境が
同じ

開発環境と
実行環境が
異なる

す．ターゲット・システムはホスト PC とケーブルなどで接続します．そしてホスト上で組み込みシステム用のプログラムを作成し，ターゲット・システムにダウンロードして動作確認をしていくことになります．

● ソフトウェア開発ツール（a）ネイティブ開発

C 言語に代表される高級言語で作成したプログラムは，コン（b）クロス開発

図 4 ネイティブ開発とクロス開発

1

パイラと呼ばれるツールでアセンブリ言語に変換されます．ア
センブリ言語は，アセンブラと呼ばれるツールで機械語に変換されます．また，大規模プログラムの開発では，機械語に変換

シリアル，USB，Ethernetなど

2されたサブルーチンなどの塊を連結して，一つのプログラムを作成します．この機械語に変換されたサブルーチンの塊をオブターゲット・システム

3

ジェクト・ファイルと呼び，これを連結して最終的な実行形式
ファイルを生成するツールをリンカと呼びます．これら 3 種類
ホストが，ソフトウェア開発で重要なツールです．
ネイティブ開発環境でもクロス開発環境でも，これらソフト

4

図 5 クロス開発環境の例

ウェア開発ツールの基本的な構成は同じです．

A1（1）クロス・コンパイラ（2）クロス・アセンブラ

要ですが，人間が開発している以上，プログラムのミスはかな（3）リンカらず発生すると考えるべきです．

クロス開発用のコンパイラやアセンブラは，クロス・コンパ

高級言語の構文記述まちがいなどは，コンパイルの段階でエイラやクロス・アセンブラと呼びますが，リンカの場合はクロラーが発生するので，プログラムの入力ミスはすぐに気づきまス・リンカとはあまり呼びません．

す．しかし，プログラムの構造上のまちがいなどは，コンパイ

3 クロス開発環境向けデバッガ

ルの段階ではエラーが発生しないので，プログラムのミスには気が付きません．ターゲット・システムにダウンロードしても，意図したとおりに動作しないという状況に陥り，どこに問題が● デバッグとは

A2
6あるのかすぐにはわかりません．

ソフトウェアを作成するうえで，必ず発生するのはバグです．
当然ながら，細心の注意を払ってプログラムしていくことが重デバッグとは，このようなバグを発見して修正する作業のことで，そのときに使用するツールをデバッガと呼びます．

デバッガはステップ実行やブレーク機能など，デバッグに必要な各種機能を備えたツールを指します．
もう一つ，組み込み開発の世界では，モニタということばを使う
場合もあります，モニタとは，基本的にはことばの意味するとおり，値や状態を表示するだけに機能を絞ったツールです．

7
8◆ COLUMN3 デバッガとモニタの違い
うな評価ボード上の ROM には，組み込みプログラム開発者が作成したプログラムを，ホストからダウンロードできるような機能だけを書き込んで出荷されるのが一般的です．この ROM に書き込まれたプログラムを ROM モニタと呼びます．
ROM モニタといった場合には，プログラムのダウンロード機能

本来，組み込みシステムは，特定の用途に特化したシステムなのや，メモリやレジスタのダンプ機能，そして指定したアドレスからで，電源を投入してすぐにその処理が始まります．しかし，開発用のプログラムの実行機能程度を備えているのが一般的です．ステッに使う評価ボードと呼ばれる CPU ボードは，それ自体ではとくにプ実行やブレーク機能など，本格的なデバッグ機能をもたないもの

明確化された処理内容があるわけではありません．そこで，このよがモニタと呼ばれます．

Jan. 2005

5

News Flash ――東北地域の民放局で初の地上ディジタル放送対応システムが本格稼動
NEC は，（株）宮城テレビ放送に地上ディジタル放送に対応した営業・放送システム「S-CMWIN」およびマスタ放送設備を導入
し，11 月 1 日より本格的な稼動を開始した．東北地域の民放局では初めての地上ディジタル放送対応システムの稼動となった．

49

ます．このある地点（ブレーク・ポイント）でプログラムを止める機能を，ブレーク機能と呼びます．また，ブレーク・ポイン
トを指定せずにプログラムを実行させ，強制的にプログラムの実行を止める機能として，強制ブレーク機能も使われます．
プログラムの動作確認では，プログラムがどのような順番で実行されていったかを確認する以外に，変数がいまどのような値を保持しているかを確認する場合もあります．強制ブレークなどでプログラムの実行を止め，値を確認したい変数を指定す
変数の値が表示される

ると，その値を表示する機能をウォッチ機能などと呼びます．
グラフィカル・ユーザ・インターフェース（GUI）対応のデバッ
ガでは，カーソルを変数のところに持っていくと，チップ・ウィンドウなどで変数の内容が表示されるものもあります（図 6）．さらにその変数の内容を変更することもできます．

図 6 カーソルを持っていくだけで変数の値が表示されるデバッガの例

これらの機能は Windows 上のアプリケーションを作成する
ためのデバッガでも，同様の機能をもっています．いわゆるデバッガとしてもっとも基本的な機能といえるでしょう．

● デバッガの基本機能● クロス開発環境向けデバッガ

一般的に使われる組み込み向け CPU は，どんなに遅くてもネイティブ環境では，作成したプログラムはその環境で実行

数 MHz のクロック周波数で動作します．機械語レベルで 1 秒することができます．しかしクロス開発環境では，作成したプ

間に数万命令は実行してしまいます．「あれ？

いま何かおかログラムはターゲット・システムに転送する必要があります．

しな動作をしなかったか？」と思っても，あっという間に実行

一般に，クロス開発用のデバッガにはホストとターゲット・が過ぎてしまいます．そこでデバッガには，命令を 1 命令ずつシステムを，図 5 のように何らかの通信インターフェースで接実行するステップ実行機能が用意されています．ステップ実行

続し，そのインターフェースを使って，ホスト環境で作成したをすることで，プログラムがどのような順番で実行されるかをプログラムをターゲット・システムにダウンロードする機能を手に取るように知ることができます．

もっています．

また，起動してから最後のほうに実行するルーチンをデバッ

また，デバッガとしての基本機能として，先ほど説明したス

グする場合，すべてのプログラムを頭からステップ実行してテップ実行やブレーク機能，変数のウォッチや変更機能などをいったのでは時間がかかりすぎるため，ある地点までは一気に実装しています．

プログラムを実行し，指定した地点でプログラムの実行を止め，さらに，組み込み機器では物理的なメモリの状態やレジスタ

そこからステップ実行をして動作を確認するという方法もありの状態を把握して，より細部の動作をチェックすることもできるようになっています．そのため，メモリやレジスタの内容を◆ COLUMN4

デバッガ本体とユーザ・
インターフェース

16 進数表示（ダンプ機能）したり，その内容を書き換える機能（メモリ・エディット機能）などももっています．

● 市販の組み込み機器開発用デバッガのいろいろ

その昔の ICE は，ICE 本体そのものに画面やキーボードな

市販されている代表的なデバッガを，種類別に分類してみまどユーザ・インターフェース（UI）まで持ったものもありましした．おおよそのところ，世の中にはこれらの分類か，またはた．しかし画面やキーボードの機能は PC そのものなので，これらの組み合わせが商用デバッガとして用いられています．

ICE 本体には UI 機能をもたせずに，それを PC を使って肩代（1）フル ICE（In Circuit Emulator）デバッガ

わりさせる方式が一般化しています．よって現在では，ICE
本体以外にホストとなる PC に UI を制御するソフトウェアをインストールすることになります．
ここで気をつけなければならないのは，単にデバッガといった場合に，そのことばが指し示す範囲です．Windows

CPU そのものを置き換えて，CPU の動作をまねて（エミュレーション）プログラムの動作を調べることができるツールです．
ICE 本体とホストの間は，専用インターフェースや Ethernet，
最近では USB などを使って接続します．

アプリケーション開発などで使う Visual C++ などにもデバッ

また，CPU の動作をまねるだけでなく，ターゲット CPU ボー

ガ機能がありますが，これはソフトウェアのみで構成されてド上の ROM や RAM も ICE 本体に内蔵（エミュレーション・

います．このことからクロス開発でのデバッガを，UI 部分のメモリ）したり，CPU が命令を実行していったアドレスを保持みを指して使う場合もあるので注意してください．

して（トレース・メモリ），それを表示する機能などを実装した
ICE を，CPU 動作のあらゆる機能をサポートできる ICE という50

News Flash ――積水化学工業と NTT データが資本提携
積水化学工業（株）と（株）NTT データは 11 月 1 日，積水化学工業の 100%子会社である（株）セキスイ・システム・センターの発行済み株式の 60%を NTT データが譲り受け，資本提携することで合意した．

Jan. 2005

クロス開発とは何か

1

ICE本体

CPUは外すホストへ接続

ターゲット・システム

CPUのエミュレーション回路，
トレース・メモリ，
エミュレーション・メモリなどを内蔵

図 7 ICE の構成

写真 1 フル ICE デバッガの例〔（株）ソフィアシステムズ UniSTAC
http://www.sophia-systems.co.jp/〕

CPUのリソースを使ってホストと通信する1

RS-232-Cなど
CPU意味でフル ICE と呼ぶこともあります．図 7 に ICE の構成を，

2

写真 1 にフル ICE デバッガの例を示します．
フル ICE は，エミュレーション・メモリなどを内蔵しているので，ターゲット CPU ボードが完全には動作しない状態でも，

ROM

RAM

エミュレーション・メモリ上でプログラムの開発を進めること

デバッガのUIを走らせるができます．つまりターゲット・システムの CPU と ROM や
RAM などローカル・バス接続に問題があっても，ICE を使ってローカル・バス上のどこに問題があるかデバッグを進めることができるのです．
もちろん，ターゲット・システムのメモリや I/O を，デバッ

3

パソコン

ROMモニタプログラム本体

4

モニタのワークエリアなど

A1

図 8 ROM モニタ型デバッガの構成ガが占有してしまうこともありません．すべてのリソースをア
プリケーションが使うことができます．
（2）ROM モニタ型デバッガ

図 8 に ROM モニタ型デバッガの構成を示します．ホストとの接続には，簡易的なものではシリアル・インターフェースを

コラム 3 で ROM モニタについて説明しましたが，この ROM

使うのが一般的です．そのため，ターゲット・システム上にシモニタに，より本格的なデバッグ機能を実装してデバッガとしリアル・インターフェースが必要です．このシリアル・インて使えるようにしたものが，ROM モニタ型デバッガと呼ばれターフェースはデバッガがホストと通信するために使用するのるものです．

で，アプリケーションが使うことはできません．また，ROM

その昔の CPU ボードでは，紫外線でメモリ内容を消去し，専用

ROM エミュレータの中は，実際には SRAM が使われ，ホストかの ROM ライタでメモリ内容を書き込む UV-EPROM と呼ばれる

らダウンロードするとその SRAM には書き込めるが，ターゲット

ROM を使っていました．メモリの消去や再書き込みには，数分か

CPU からは書き込み信号が届かないようになっているため，ROMら数十分という時間が必要なので，一部をちょっとだけ修正する場に見えるという回路構成をしています．

合でも非常に時間がかかりました．また，UV-EPROM には書き換

現在では，ROM にはフラッシュ・メモリを使うのが一般的です．

え寿命があるので，何度も消去/再書き込みをしていると，次第にフラッシュ・メモリは CPU ボード上に実装したままでも消去や書メモリ内容を消去できなくなったり，値を正しく書き込めていない

き換えができるので，UV-EPROM で必要だった紫外線を使うイといった問題も発生するようになります．

レーサや ROM ライタが不要です．とはいえ，消去や書き換えにはそこでプログラムの開発中は，消去や再書き込みの時間の短縮
や，UV-EPROM の寿命をむだに減らすことを避けるため，ROMの動作をまねるツールを用いてデバッグを進めることがありました．

A2
6
7◆ COLUMN5 ROM エミュレータ

8

数十秒から 1 分程度の時間がかかったり，UV-EPROM 同様書き換
え寿命もあるので，頻繁に書き換えるには向きません．
よって現在でも，ROM エミュレータが使われる場合もあります．

これが ROM エミュレータです．

Jan. 2005

5

New Products ――コンテック，Pentium /Celeron 850MHz 対応の NLX 規格準拠の組み込み向け CPU ボードを発売（株）コンテックは，Pentium Ⅲ と Celeron（850MHz まで）に対応した NLX 規格準拠の組み込み向け CPU ボード「SNL4401-LV」を発売した．価格は￥54,600．TEL ： 03-5628-9286

51

ROMエミュレータ型デバッガ

ROMは外すせるので，ローカル・バスに問題があって ROM を読み出せな
いような場合は，デバッガ自体が動作しません．ここが ICE と大きく異なるところです．
また，一般的な ROM モニタ型デバッガでは，ROM 領域に

ホストへ
接続
ROMエミュレーション機能
内蔵
ターゲット・システム

図 9 ROM エミュレータ型デバッガの構成

プログラムをダウンロードすることはできません．ただし ROMとしてフラッシュ・メモリが搭載されたシステムでは，フラッシュ・メモリへの書き込みアルゴリズムに対応すれば，直接ダウンロードすることも可能です．
また，たとえフラッシュ・メモリにダウンロードできたとしても，ROM モニタ型デバッガは ROM 領域にブレーク・ポイン
トを設定することはできません（一部の ROM モニタ型デバッガ
では，CPU 内蔵のハードウェア・ブレーク機能を使って，最大
2 か所程度のブレーク・ポイントを設定できるものもある）．
このように，ROM 領域の扱いに制限がある場合が多いので，
ROM 化を想定したプログラムのデバッグには使いにくい場面もあります．
なお，第 5 章で解説する GDB スタブは，ROM モニタ型デバッガに分類されます．
（3）ROM エミュレータ型デバッガ
ROM エミュレータ型デバッガは，基本的には ROM モニタ型
デバッガに近い構造をしていますが，ROM エミュレーション

写真 2 ROM エミュレータ型デバッガの例〔京都マイクロコン
ピュータ（株） PARTNER-ET Ⅱ http://www.kmckk.co.jp/〕

機能をもっていて，ROM 上で動作させるプログラムをダウンロードしてデバッグすることもできます．もちろん ROM 上に
自由にブレーク・ポイントを設定することもできます．

上にはホストからの指示に従い，メモリやレジスタの内容を読

図 9 に ROM エミュレータ型デバッガの構成を，写真 2 にみ書きする通信プログラムを書き込んでおき，ターゲット・シ

ROM エミュレータ型デバッガの例を示します．ICE では CPU

ステムの CPU にそれを実行させます．

を外して CPU ソケットに差し込みましたが，ROM エミュレー

このように ROM モニタ型デバッガは，ターゲット・システ

タ型デバッガでは ROM をソケットから抜いて，ROM ソケット

ムに実装されたインターフェースやメモリの一部を，デバッグにデバッガを接続します．ホストとの接続にはデバッガ本体に機能のために使ってしまうことや，そもそもホストとの通信プ用意されたインターフェースを使うため，ターゲット・システ

ログラムをターゲット・システム上でプログラムとして実行さムのリソースを使うことはありません．また，エミュレーショ

◆ COLUMN6 高密度実装＆ SoC 対応＝ JTAG デバッガ？
CPU が DIP パッケージで取り外しができた時代は問題がなかっシュ・メモリに置き換わり，ROM ソケットがありません．

たのですが，高密度実装時代になり，IC のパッケージが QFP パッ

そしてさらに現在では，ボード上に構成していた回路のほとんど

ケージになると，CPU を取り外すことができなくなってきました．

を LSI の中に実装してしまう，SoC（System On Chip）が採用されそこで ICE 用に隣に DIP 用のソケットを用意して，ICE を使う場

るようになってきました．CPU や ROM が取り外しできないどころ

合には QFP の CPU を非動作状態にして開発を行うこともありましか，LSI の中にいっしょに入ってしまうという事態になったのです．

た．また，高価ですが QFP 用のコネクタも存在するので，開発用

このような事態に対応すべく，CPU のデバッグ専用の信号線をにはそれを使うこともあります．
いずれにせよ，CPU を取り外して接続するという構成を採る ICE
は，実現しにくい状況になってきています．
同じことが ROM エミュレータ型デバッガにもいえます．昔は
UV-EPROM が一般的だったため，28 ピンや 32 ピンの DIP パッケー

用意して，それを外に引き出してホストと通信させるという手法が考え出されました．ここでは詳細は解説しませんが，現在ではJTAG 端子に CPU デバッグのための機能を割り当て，JTAG 端子
から CPU の状態を取得したり，状態を変更することができるようになりました．

ジの ROM ソケットが必ず使われていましたが，最近ではフラッ52

New Products ――イータス，多チャネル測定のための測定デバイス「ES300 シリーズ」を発売
イータス（株）は，自動車制御システムにおいて，多チャネル測定を実現し，1 チャネルにかかる測定コストの低減を図れる
測定デバイス「ES300 シリーズ」を発売した．TEL ： 045-222-0900

Jan. 2005

クロス開発とは何か
JTAG端子CPU

JTAGデバッガ

1◆ COLUMN7 ICE とエミュレータ

JTAG

組み込みシステムの開発環境を語るうえで，ICE やエミュ
レータ，デバッガなどの用語は，多少混乱した使われ方がさ

ROM

ホストへ
接続

I/O
JTAG信号変換回路内蔵RAMれているようです．
メーカによっては，フル ICE デバッガも JTAG デバッガ
も，使用目的やできる機能が同じということで，広義の意味
で ICE とひとくくりにしているところもあります．またICE の E（Emulator）だけを取り出して，昔から ICE のこと

SoCデバイスターゲット・システム

を エミュレータ と呼ぶメーカもあります．そのため，JTAG
デバッガが登場した現在でも，JTAG デバッガをエミュレー

図 10 JTAG デバッガの構成

タと呼んだり，場合によっては ROM モニタ型デバッガまで

1

エミュレータに分類していることもあります．
デバッガとしてのエミュレータという呼び方は，人によっ2てイメージが異なるので，注意が必要です．

3
るには，ターゲット・システム上のメモリが正常に読み書きできている必要があります．
ROM 領域の扱いは ROM モニタ型デバッガに近いところが4あります．フラッシュ・メモリに対応していれば，ROM 領域にダウンロードすることも可能です．ROM 領域へのブレーク・

A1

ポイントも，CPU が内蔵するハードウェア・ブレーク機能を
写真 3 JTAG デバッガの例〔（株）コンピューテックス
http://www.computex.co.jp/〕

PALMiCE2使って実現している JTAG デバッガが多いようです．

● 最強デバッガ＝エミュレーション・メモリ＆トレー

5

ス・メモリ内蔵 JTAG デバッガ？
ICE や ROM エミュレータ型デバッガ，JTAG デバッガは，
ン・メモリを内蔵している点もフル ICE に近い特徴です．

いずれもターゲット・システムの外に変換回路などのための箱

しかし，内部構造は ROM モニタ型デバッガに近い構造をしを置き，ホストと接続する必要があります．そのため，どうしているため，ローカル・バスに問題があるターゲット・システてもコストがかかります．一般的なコスト比較では，エミュ

ムでは，デバッガがうまく動作しない場合があります．

レーション・メモリや CPU 機能をまるまる内蔵した ICE がもっ（4）JTAG デバッガ

とも高く，次にエミュレーション・メモリを内蔵した ROM エ

JTAG 端子を使って CPU をデバッグするものです．コラム 6に説明するような状況から，最近になって登場してきたデバッ

ミュレータ型デバッガになります．この中で比較的安価なのは

図 10 に JTAG デバッガの構成を，写真 3 に JTAG デバッガ

スを使ってホストと通信するので，デバッガとして必要な部品の例を示します．JTAG 端子の信号はそのままではホストに接代はかかりません．しかし，デバッガとしての機能は，ほかの続できないので，一般的には JTAG 信号を Ethernet や USB な

3 種類のデバッガの一歩も二歩も後を行きます．

どに変換する回路が必要になるので，ICE や ROM エミュレー

最近では，それぞれのデバッガの良いところを組み合わせた

タ型デバッガと同じように，ターゲット・システムの外部に箱デバッガとして，ROM エミュレーションのためのエミュレー

を置く形になります．

ション・メモリや，トレース機能のためのトレース・メモリを一般的に JTAG デバッガは，CPU の動作を直接内部から制内蔵した JTAG デバッガが登場しています．

御するので，ICE と同様にローカル・バスに問題があるター
ゲット・システムでも，メモリや I/O を読み書きして，その原因を突き止めることができます．しかし，エミュレーション用のメモリは内蔵していないので，プログラムをダウンロードすJan. 2005

6
7

JTAG デバッガといえます．
ROM モニタ型デバッガは，ターゲット・システム上のリソー

ガです．

A2

やまぎわ・しんいち

New Products ――富士通，指紋センサ標準搭載のタブレット PC を発売
富士通（株）は，指紋センサ標準搭載のタブレット PC「FMV-STYLISTIC」を 10 月下旬に発売した．希望小売価格は，￥219,000〜 239,000（税別）．

538