back サーバ選択 (基本[ 1 , 2 , IP ], ミラー[ 1 , 2 , IP ]
Last Update : '04.1.7 ミラーサーバの整備。 : '03.12 章や節の番号を振り替えた。 : '03.11.21 リンク集追加。 : '03.10.25 新規。

ti TMS320C6713 DSK つかいませんか

DSP 初心者のための入門のページ
実際の操作方法に重きを置いて

この頁は,私が C6713DSK (正式には TMS320C6713 DSK)を購入し, 初期的なプログラムを実行できるようにするまでを記録に残すものです。
この Web PAGE は 沼津高専 電気電子工学か 望月研究室(電子回路) に新たに配属される学生を対象にしたものです。 即ち,今までコンピュータに殆んど触ったことが無く, DSP-C だけでなく C 言語に対しても初心者という人が DSP-C を使い始めるときに参考にすることを目的としています。

参考

TI社「DSPスタータ・キット『C6713 DSK』
・TI社 Code Composer Studio Ver.2.02 のヘルプやチュートリアル
TI社 DSPトレーニング&セミナ このリンク先から更に「オンライン・トレーニング」を選ぶと良いでしょう
アマゾン・ドット・コム 和書を「DSP」で検索すると,役立つ本を探せます
・「DSP Cプログラミング入門」日本TI 瀬谷啓介著,技術評論社,2000年
平塚エンジニアリング TI の DSK のための拡張カードを扱っています。DSP入門も作られています
  1. 購入に至るまで
  2. インストール
  3. ボードの動作テスト
  4. プロジェクトのためのファイル

  5. プロジェクト「基本演算」の実行
    1. プロジェクト「基本演算」の実行-1 --- CCS の起動 ---
    2. プロジェクト「基本演算」の実行-2 --- 新規プロジェクトの製作 ---
    3. プロジェクト「基本演算」の実行-3 --- .c ファイルの作成 ---
    4. プロジェクト「基本演算」の実行-4 --- .cmd ファイルの作成 ---
    5. プロジェクト「基本演算」の実行-5 --- プログラムのビルド = 実行ファイルの作成 ---
    6. プロジェクト「基本演算」の実行-6 --- 実行ファイルの転送 ---
    7. プロジェクト「基本演算」の実行-7 --- デバッグ情報の表示 ---
    8. プロジェクト「基本演算」の実行-8 --- 1ステップずつの実行 ---
    9. プロジェクト「基本演算」の実行-9 --- プロジェクトの後始末 ---
    10. プロジェクトの再実行
    11. プロジェクトを自動実行(BPの利用)-1 --- ブレークポイントの設定 ---
    12. プロジェクトを自動実行(BPの利用)-2 --- ブレークポイント付きプログラムの実行 ---

  6. プロジェクト「配列を用いる計算」の実行
    1. プロジェクト「配列を用いる計算」の実行-1 --- プログラムの作成と実行 ---
    2. プロジェクト「配列を用いる計算」の実行-2 --- 配列を時系列でグラフ表示 ---
    3. プロジェクト「配列を用いる計算」の実行-3 --- 様々なグラフを表示 ---

  7. 各種関数の利用
    1. 各種関数の利用-1 --- インクルードファイルの説明 ---
    2. 各種関数の利用-2 --- Hello World ---

I. 購入に至るまで

 2003年の9月に,東京工業大学で 「第5回DSPS教育者会議」 ( 主催:ディジタル信号処理の教育を考える会, 協賛:日本教育工学会・信号処理学会・ 高速信号処理応用技術学会・ IEEE CAS Sciety Japan Chapter, 後援:日本テキサス・インスツルメンツ(株) ) に参加し, 大学の学科によっては DSP がその教育に取り入れられるほど, DSP が幅広く使われている現状を知りました。
 そこで,私も沼津高専の教育に使えないか評価することにしました。

 価格的には,アカデミックディスカウントが利くため, 数万円の予算でスターター・キットを購入できました。 (通常価格でも,スターター・キットならそれほど高価ではありません)
 この世界は世代交代が激しくて,現状では次の機種が売られていましたが, 年毎にかなり入れ替わっているようでした。 この中で,浮動小数点演算を謳っている唯一の機種である 6713 を選定しました。 これは,学生にデモンストレーションをする際に, 学校で行うことですから, (企業で製品を作るのと違って) 動作が最高速でないのはしょうがないが, 用途の範囲は広げたいためです。 (私としては選定時に未だ DSP に精通していなかったことも言い訳として加えます)

II. インストール

インストール作業は,基本的に付属のマニュアルに沿って行ないました。
頼りにしたのは,資料番号L(←丸付き13)の, 「TMS320C6713-DSK インストレーション・ガイド」(日本語,全19ページ)です。
この資料の p.8 の「Code Composer Studio C6713 DSK Tools のインストール」 を見ながらインストールしました。
インストール時はウイルスチェッカーを外すように指示されているので, 私はLANケーブルを抜いてウイルスチェッカーを外して,インストールしました。
サポートを受けるためには,インストール後に登録が必要です。 同資料のp.12 の「Code Composer Studio のユーザ登録(アップデート・アドバイザー)」 により,インストールしました。
USB ポート接続のためのデバイスドライバも必要です。
同資料の p.9 の「C6713 DSK ボードの接続」 を見ながらインストールしました。

III. ボードの動作テスト

ボードがハードウエア的に故障していないかテストするにも, 前節で説明した 「TMS320C6713-DSK インストレーション・ガイド」が役立ちます。
この資料の p.10 の「自己診断テスト」 に記述されているように,ボードの電源投入のたびに自分自身をチェックします。
また,同資料のp.13 の「診断ツール(C6713 DSK 診断ユーティリティ)」 により,そのつど診断することもできます。

IV. プロジェクトのためのファイル

ここでは,DSP-C のプログラマが取り扱うファイルについて説明します。

DSP に何らかの仕事をさせたいときには, 「プロジェクト」を開発します。 通常,プロジェクトは複数のファイルによって作られ, 一つのフォルダに格納されます。
プロジェクトとは,広い意味ではそのファイル群が入るフォルダと, フォルダ内の全てのファイルのことです。 狭い意味ではプロジェクトは .pjt という拡張子をもつファイルを指します。 そのファイルにはプログラムで引用するファイル群のファイル名が, 性質ごとに分類されています。

続いて,プログラムで使われるファイルたちの説明をします。 ただし, 一つのプロジェクトに対し, 全ての種類のプログラムが必要というわけではありません。


V. プロジェクト「基本演算」の実行

V-1. プロジェクト「基本演算」の実行-1
--- CCS の起動 ---

それでは,ここから九つの節にわたって, 最も単純なプログラム「基本演算」を作っていきます。 ここで想定するプログラムは,変数を使って演算し,そのまま終了するというものです。 外部からデータを受け取ることも,外部にデータを送り出すこともありません。 従って,実用的には全く意味がない,純粋に CCS の確認をするためのものです。 このプログラムがうまく動作するかどうか確認するには, 変数の値を監視する以外ありませんが, 幸いにも,CCS にはそうした機能が備わっています。

先ず最初に Code Composer Studio を起動しますが,以下の手順を守ってください。
  1. 全ての電源が切れた状態のうちに,
    マイクやスピーカを DSP ボードに接続しておきます。
  2. USB ケーブルも,電源が切れているうちに差込み, それ以降は繋ぎっぱなしです。 (本当は別の手順が正しいのかもしれませんが, 私のパソコンでは繋ぎっぱなしです。
  3. DSK ボードの電源を入れる際は, 最初にコンセントに電源ケーブルを差し込んでから, DSP ボードの電源コネクタを差し込みます。
  4. パソコンの電源を入れる順番は, DSK ボードの電源投入の前でも後でも特に問題は無いようです。
  5. Windows の スタートボタンから,
    「全てのプログラム」>「Texas Instruments」> 「Code Composer Studio 'C6713 DSK Tools 2 ('C6713)」> 「Code Composer」
    を指定すると,CCS が起動します。
    もちろん,アイコンがデスクトップ上にでもあったらそのクリックでも同じです。

V-2. プロジェクト「基本演算」の実行-2
--- 新規プロジェクトの製作 ---

新規にプロジェクトを作りましょう。 通常は,c:\ti\myprojects というフォルダ内に作りますが, 好きな場所に作ってもかまいません。

  1. メニューバーの「project」から,「New...」を指定します。
  2. すると,次のようなウインドウが現れるので,
  3. 「project name」として「test」など好きな名前をつけましょう。
  4. 「location」ではフォルダを指定しますが,この欄の末尾は自動的に補われます。
  5. ほかの欄も,この図のように指定します。
  6. 記入が終わったら,「完了」ボタンをおします。
  7. すると,次のようになります。
  8. このとき,新しいフォルダ内には何もファイルがありません。

V-3. プロジェクト「基本演算」の実行-3
--- .c ファイルの作成 ---

新規にプログラムを書きましょう。 書き終わったら今回は c:\ti\myprojects\test というフォルダ内に, test01.c という名前で記録することにします。

  1. メニューバーの「file」から,「New...」>「source file」を指定します。
  2. すると,CCS 内で "Untitled1" という新しいウインドウが開きます。
  3. 次のようにプログラムを打ちます。
    void main()
    {
    	int x,y,z;
    	z=0;
    	x=z+1;
    	y=2*(z+x);
    	z=x+y;
    }
  4. ファイルを保存します。 操作は,メニューバーの「file」から,「Save as ...」を指定します。 ファイル名等を問われるので, 「c:\ti\myproject\test」 というフォルダと 「test01.c」 という名前を指定します。
  5. 今回作ったファイルをプロジェクトに組み込みます。 操作は,メニューバーの「Projact」から, 「Add Files to Project ...」を指定します。 ファイル名等を問われるので, 「c:\ti\myproject\test」 というフォルダ内の, 「test01.c」 を指定します。
  6. 以上の操作により,次のような画面になります。

V-4. プロジェクト「基本演算」の実行-4
--- .cmd ファイルの作成 ---

次に作るのはリンク情報です。 リンクのためには,メモリをどのように使用するか指定する必要があります。 今回は c:\ti\myprojects\test というフォルダ内に, test02.cmd という名前で記録することにします。

  1. メニューバーの「file」から,「New...」>「source file」を指定します。
  2. すると,CCS 内で "Untitled2" という新しいウインドウが開きます。
  3. 次のようにプログラムを打ちます。
    MEMORY
    {
    	RAM:	origin = 0x0,	length = 0x10000
    }
  4. ファイルを保存します。 操作は,メニューバーの「file」から,「Save as ...」を指定します。 ファイル名等を問われるので, 「c:\ti\myproject\test」 というフォルダと 「test02.cmd」 という名前を指定します。
  5. 今回作ったファイルをプロジェクトに組み込みます。 操作は,メニューバーの「Projact」から, 「Add Files to Project ...」を指定します。 ファイル名等を問われるので, 「c:\ti\myproject\test」 というフォルダ内の, 「test02.cmd」を指定します。

V-5. プロジェクト「基本演算」の実行-5
--- プログラムのビルド = 実行ファイルの作成 ---

次に,実行ファイルを作ります。 そのためには次の操作をします。

  1. メニューバーの「Project」から,「Rebuild All」を指定します。
  2. すると,warning(警告)が 1 つ現れます。
  3. _c_int00 という参照ポイントが未定義ということですが, これもエラーではありませんから無視してかまいません。
  4. 以上の操作で新たに, "Debug"というフォルダと, "cc_build_Debug.log", "Debug.lkf", "Debug.lkv", "Debug/test01.obj", "Debug/test.map", "Debug/test.out" というファイルが作られました。
  5. 今回作られた "Debug/test.out" は,DSP 上で実行される実行ファイルです。 このファイルを作ることが CCS を使う大きな目的の一つです。
  6. もしエラーが出たなら訂正して Rebuild しなおします。

V-6. プロジェクト「基本演算」の実行-6
--- 実行ファイルの転送 ---

次に,実行ファイルを DSP に転送します。 そのためには次の操作をします。

  1. メニューバーの「GEL」から,「Reset」> 「ClearBreakPts_Reset_EMIFset」を指定します。
  2. この操作で,DSP ボードがリセットされました。
  3. 続いて,メニューバーの「File」から,「Load Program...」 を指定し,ファイル名を問われるので, 先ほど作った「Debug/test.out」を指定します。
  4. この操作で,データが転送されると共に, 画面上に test01.c のプログラムリストが表示され, 矢印の記号が最初の中括弧を指し示します。
  5. メニューバーの「View」から, 「Mixed Source/ASM」 のチェックをトグルする(=操作のたびに on/off する)と, C 言語とアセンブリコードを同時に表示することも出来ます。 アセンブリコードが表示されているときは, 黄色の矢印が C 言語の行を指し, 緑色の矢印が アセンブリコードの行を指します。
  6. 今回の説明は,アセンブリコードも表示することを前提とします。
次の図は,Mixed Source/ASM 指定にて表示されたプログラムです。

余談(1) 整数を2倍するという演算は,足し算によって実現されることが分かりますね。

V-7. プロジェクト「基本演算」の実行-7
--- デバッグ情報の表示 ---

実際の実行の前に,デバッグ情報を表示させましょう。 今回の例で言えば,変数 x, y, z をウオッチしたいものです。 そのためには次の操作をします。

なお,念のため書いておくのですが, パソコンの画面上で変数の値をウオッチしているとはいえ, 変数の実体は DSP のメモリ上であることをお忘れなく。 ウオッチのためには DSP のメモリの情報をパソコンに送っているのです。

  1. メニューバーの「View」から,「Watch Window」を指定します。
  2. すると,次のような画面が現れ, x, y, z の値を監視できます。
  3. 上記の画面が出ればそれでよいのですが,Quick Watch の使用からも同様のことが出来ます。
  4. メニューバーの「View」から,「Quick Watch」を指定しても良いです。
  5. すると,次のような画面が現れますので, 観測したい "x" を入力し,「Add to Watch」とします。
  6. y, z も同様です。

V-8. プロジェクト「基本演算」の実行-8
--- 1ステップずつの実行 ---

ようやく実行画面になりました。 次の操作により,1 ステップずつ実行します。

  1. ファンクションキーの F8 により 1 ステップずつ実行します。
  2. F8 を一度押すごとに,緑色の矢印(アセンブリコードを指す)は 1 行ずつ動きます。 ただし,命令によっては F8 を複数回押す必要があるものもあります。
  3. アセンブリコードの一まとまりを実行するごとに, 黄色の矢印(C 言語の行を指す)が次の場所に動きます。
  4. ウオッチウインドウに表示される x, y, z の値も,命令につれて変化します。 変化する際は表示が一時的に赤くなります。 逆に言えば,赤い表示は「今変化した」ことを表します。
  5. 変数それぞれの値は,最終的に,
    x...1
    y...2
    z...3
    になったはずです。
  6. プログラムが最後まで行ったら,F8 を押すのをやめましょう。 F8 を押す回数が多すぎると,表示がおかしくなります。

V-9. プロジェクト「基本演算」の実行-9
--- プロジェクトの後始末 ---

実行は上手くいくと思いますがどうだったでしょうか? プロジェクトの実行が終わったら,今回の結果を保存して終了します。 test.paf が,プロジェクトの内部状態を保存するファイルのようです。

  1. メニューバーの「Project」から,「close」を指定します。
  2. 以上で,今回のプロジェクトをディスク上に格納しました。
    なお,情報を格納するのは test.paf というファイルのようです。

V-10. プロジェクトの再実行

プロジェクトを改めて実行するためには次の手順に従います。

  1. 手順 X. により,.out ファイルを DSP ボードに転送します。
    ただし,メニューバーの「File」から,「Reload」でも構いません。 「Reload」の場合はファイル名の指定が不要ですから更に便利です。
  2. (場合により この操作は SKIP) 恐らく Watch Window は既に表示されているでしょうが, もしも Watch Window が消えているようなら 手順 XI. により表示させます。
  3. 手順 XII. により実行させます。

V-11. プロジェクトを自動実行(BPの利用)-1
--- ブレークポイントの設定 ---

先に紹介した方法では,1 行の実行後とにキー操作(マウス操作)が必要でしたが, ブレークポイントの利用により一括して何行か実行させることが出来ます。

  1. 前提条件は,プロジェクト「基本演算」の実行のうち 1/9(VIII.) 〜 7/9(XI.) です。
  2. また,前提条件としてソースファイルが表示されている必要があります。 ただしソースファイルは,C 言語でも MIX でもかまいません。
  3. マウスカーソルでブレークポイントにしたい行を指し, マウスの右ボタンを押すと, メニューウインドウが現れますから, 「Toggle breakpoint」を指定します。 すると,その行の先頭に赤い丸印が設定されます。
  4. もしもプログラムを最後まで実行させたいときは,main(){ に対応する } の行に ブレークポイントを設定します。
  5. ブレークポイントの個数には制限はないようです。

V-12. プロジェクトを自動実行(BPの利用)-2
--- ブレークポイント付きプログラムの実行 ---

以下の操作により,プログラムを実行します。

  1. メニューバーの「Debug」から,「Run (F5)」を指定します。 この操作により,次のブレークポイントまで実行します。
  2. 繰返し実行できます。



VI. プロジェクト「配列を用いる計算」の実行

VI-1. プロジェクト「配列を用いる計算」の実行-1
--- プログラムの作成と実行 ---

それでは,配列を用いる計算をさせてみます。 特に難しいことをするわけでもないのですが, 配列を使った場合には,配列の内部の値をデバッグする際に特別な操作が必要です。
まずは,プログラムを作成し,実行させます。

    基本的な操作は,プロジェクト「基本演算」のときと同様です。
  1. (操作 V-1. のように) CCSを 起動させます。
  2. (操作 V-2. のように) 新規プロジェクトを作ります。
  3. (操作 V-3. のように) .c ファイルを作り,プロジェクトに加えます。
    ここで,test01.c というファイルの内容は,次の通りです。 なお,通常の C 言語では浮動小数点計算は Double 型(64 bit)が標準ですが, 6713 の場合,内蔵する浮動小数点ユニットは 32bit 演算です。 対応する C 言語の型は float です。
    #define	BSize	96
    
    void	main()
    {
    	float	s1buff[BSize];
    	float	c1buff[BSize];
    	float	s2buff[BSize];
    	float	c2buff[BSize];
    	float	yybuff[BSize];
    	int i;
    	float	a,b;
    	float	c,d;
    
    	a=0.99786;
    	b=0.06540;
    	c=0.94693;
    	d=0.32144;
    
    	s1buff[0]=0.0;
    	c1buff[0]=1.0;
    	s2buff[0]=0.0;
    	c2buff[0]=1.0;
    	yybuff[0]=s1buff[0]*s2buff[0];
    	for (i=1; i<BSize; i++) {
    		s1buff[i]=a*s1buff[i-1]+b*c1buff[i-1];
    		c1buff[i]=a*c1buff[i-1]-b*s1buff[i-1];
    		s2buff[i]=c*s2buff[i-1]+d*c2buff[i-1];
    		c2buff[i]=c*c2buff[i-1]-d*s2buff[i-1];
    		yybuff[i]=s1buff[i]*s2buff[i];
    	}
    }
  4. (操作 V-4. のように) .cmd ファイルを作り,プロジェクトに加えます。
    ここで,test02.cmd というファイルの内容は前回と同様であり,次の通りです。
    MEMORY
    {
    	RAM:	origin = 0x0,	length = 0x10000
    }

    .c と .cmd の いずれのファイルも保存しすると共に, 今回作ったファイルをプロジェクトに組み込みます。
  5. (操作 V-5. のように) プログラムをビルドして,実行ファイルを作成します。
    実行ファイルを作るには, メニューバーの「Project」から,「Rebuild All」を指定します。 この際に, 「_c_int00 という参照ポイントが未定義」ということと, 「ybuff という配列が代入されるだけであって使われていない」 という警告が出ますが, エラーではありませんから無視してかまいません。
  6. (操作 V-6. のように) 実行ファイルを転送します。
    メニューバーの「GEL」から,「Reset」> 「ClearBreakPts_Reset_EMIFset」を指定します。
    この操作で,DSP ボードがリセットされました。
    続いて,メニューバーの「File」から,「Load Program...」 を指定し,ファイル名を問われるので, 先ほど作った「Debug/test.out」を指定します。
    この操作で,データが転送されると共に, 画面上に test01.c のプログラムリストが表示され, 矢印の記号が最初の中括弧を指し示します。
  7. (操作 V-11. と V-12. のように) ブレークポイントを設定し,実行します。
    ブレークポイントを,最後の } , すなわち main(){ に対応する } の行に設定し, メニューバーの「Debug」から,「Run (F5)」を指定します。 この操作により,次のブレークポイントまで実行します。 (繰返しを含むプログラムでは,一行ずつの実行ではクリック回数が膨大です)
  8. 以上により,プログラムを作成すると共に,実行できました。
  9. (操作 V-7. のように) ウオッチウインドウを起動すると,変数の最終的な値を確認できます,

  10. 補足ですが,今回の計算で完全な正弦波ができた理由を概説します。 c1buff と s1buff により,複素数表示されていると考えてください。 c1 が実部であり,s1 が虚部です。 ここへ, exp(iθ) = a + ib を掛けていくという演算を繰り返しているのです。 ただし,θは 360/96 = 3.75 度 です。 c2buff と s2buff の場合は θは 5 × 360/96 = 18.75 度です。

VI-2. プロジェクト「配列を用いる計算」の実行-2
--- 配列を時系列でグラフ表示 ---

CCS には,配列をグラフ表示させる機能があります。

  1. メニューバーの「View」から「Graph」>「Time/Frequency...」という項目を選びます。
  2. すると,次のような画面が現れます。
  3. ここで,幾つかの項目について,説明します。 これら以外は標準のままでよいでしょう。
    1 行目Display Type グラフの型を指定します。 これ以外に,FFT なども選べます
    2 行目Start Address ここの文字列は, グラフのタイトルとして使われます
    3 行目Start Address 配列名を指定します
    4 行目Acquisition ... 読み込むデータの数
    6 行目Display Data Size 表示するデータの数
    7 行目DSP Data Type 今回の C 言語の例題では float 型の配列なので
    32-bit IEEE floating point
    を指定しました。
    別の型の配列を作ったなら, ここで対応する型を指定します
  4. その結果,次のような画面が現れます。
  5. グラフの中で,縦線が走っていますが, これはデバッグ用のカーソルです。 その縦線の座標が,グラフの左下に表示されます。 今回は,(47, 0.0655558) でした。 マウスによってこのカーソル(縦線)を移動させると, 今回は x 座標は 0 から 95 まで動きます。 それに応じて y 座標の値も変わります。
  6. なお,Watch Window の中でも, 配列は要素ごとに表示されます。

VI-3. プロジェクト「配列を用いる計算」の実行-3
--- 様々なグラフを表示 ---

前節以外のグラフも書いてみましょう。

  1. 今見えているグラフを別のグラフに 変えたいなら,
    グラフ画面上でマウスを右クリックし, 現れたメニューウインドウ内で 「Properties ...」を指定すると, 前節で紹介した画面が現れますので, 必要な項目を変更し,「OK」ボタンを押します。
  2. 今見えているグラフに 加えて 別のグラフを表示させたいなら,
    メニューバーの「View」から 「Graph」>「Time/Frequency...」 という項目を選び,同様の処理をします。
  3. 次の図は,前節のパラメタのグラフに加えて, 次の項目を変化させた 2 つのグラフを同時に表示したものです。
    3 行目Start Address s2buff

    3 行目Start Address ybuff

  4. 前節と同様ですが,FFT 表示したものを示します。
    1 行目Display Type FFT Magnitude
  5. 以上により,信号(低周波)が変調波(高周波) により振幅変調を受けた場合の波形と, それらの周波数成分についても確認できました。
    ここで思い出すべき定理は,正弦波の加法定理です。
    2 × sin(ω1 t)×sin(ω2 t) = cos{(ω1+ω2) t} - cos{(ω1-ω2) t}
    (注意:FFTでは絶対値を表示する)
    まさに定理どおりの波形が得られています。

    余談ですが,コサイン波についても同様のはずです。 ここではコサイン波は波形を表示するに留めます。
  6. 前節のパラメタに対し,次の項目を変化させると, 以下のグラフが得られます。



VII. 各種関数の利用

VII-1. 各種関数の利用-1
--- インクルードファイルの説明 ---

C 言語には,ハードウエアごとに様々な関数が用意され, それを使うことによって高度な仕事や専門的な仕事がこなせます。
これでは,前節のプログラムを sin 関数を使って実行してみましょう。

    今回特に変わったところは赤い字で示しますが, 殆んどの操作は, プロジェクト「配列を用いる計算」やプロジェクト「基本演算」のときと同様です。
  1. (操作 V-1. のように) CCSを 起動させます。
  2. (操作 V-2. のように) 新規プロジェクトを作ります。
  3. (操作 V-3. のように) .c ファイルを作り,プロジェクトに加えます。
    ここで,test01.c というファイルの内容は,次の通りです。 DSP の場合,内蔵する浮動小数点ユニットが Single 型 なので, 変数は float で定義します。
    #include <math.h>
    
    #define	BSize	96
    
    void	main()
    {
    	float	s1buff[BSize];
    	float	s2buff[BSize];
    	float	yybuff[BSize];
    	int i;
    	float rad;
    
    	rad=0;
    	for (i=0; i<BSize; i++) {
    		s1buff[i]=sin(rad);
    		s2buff[i]=sin(5.*rad);
    		yybuff[i]=s1buff[i]*s2buff[i];
    		rad+=2.*3.14159/96.;
    	}
    }
  4. (操作 V-4. のように) .cmd ファイルを作り,プロジェクトに加えます。
    ここで,test02.cmd というファイルの内容は前回と同様であり,次の通りです。
    MEMORY
    {
    	RAM:	origin = 0x0,	length = 0x10000
    }

    .c と .cmd の いずれのファイルも保存しすると共に, 今回作ったファイルをプロジェクトに組み込みます。
  5. (今回初めての操作) プログラム内には #include の行があるのですが, この行が上手く動作するためには, ヘッダファイルが用意されている場所を指定しておく必要があります。
    まず,メニューバーの「Projact」から, 「Add Files to Project ...」を指定します。 ファイル名等を問われるので, 「C:\ti\c6000\cgtools\lib」 というフォルダ内の, 「rts6700.lib」を指定します。

    注意:2003年11月現在,望月の情報(認識)不足により, rts6700.lib の必然性を把握していません。 rts6700e.lib や,rts6200.lib など似たようなファイルがありますが, それらをどういう風に使い分けるかは,これから調べたいと思います。
  6. (操作 V-5. のように) プログラムをビルドして,実行ファイルを作成します。
    実行ファイルを作るには, メニューバーの「Project」から,「Rebuild All」を指定します。 この際に, 「yybuff という配列が代入されるだけであって使われていない」 という警告が出ますが, エラーではありませんから無視してかまいません。
  7. (操作 V-6. のように) 実行ファイルを転送します。
    メニューバーの「GEL」から,「Reset」> 「ClearBreakPts_Reset_EMIFset」を指定します。
    この操作で,DSP ボードがリセットされました。
    続いて,メニューバーの「File」から,「Load Program...」 を指定し,ファイル名を問われるので, 先ほど作った「Debug/test.out」を指定します。
    この操作で,データが転送されると共に, 画面上に test01.c のプログラムリストが表示され, 矢印の記号が最初の中括弧を指し示します。
  8. (操作 V-11. と V-12. のように) ブレークポイントを設定し,実行します。
    ブレークポイントを,最後の } , すなわち main(){ に対応する } の行に設定し, メニューバーの「Debug」から,「Run (F5)」を指定します。 この操作により,次のブレークポイントまで実行します。 (繰返しを含むプログラムでは,一行ずつの実行ではクリック回数が膨大です)
  9. 以上により,プログラムを作成すると共に,実行できました。
  10. (操作 V-7. のように) ウオッチウインドウを起動すると,変数の最終的な値を確認できます,
  11. (操作 VI-2. のように) グラフによって配列の内容を確認することも出来ます。

VII-2. 各種関数の利用-2
--- Hello World ---

一般的な C 言語入門は,「Hello World !」という名前の, 1行の printf 文からなるプログラムを最初に実行するようです。 DSP ボードでも同様のプログラムを実行できますからやってみましょう。 ただし,
DSP ボード上には コンソール出力というハードウエアがない。
DSP ボードは,USB でつながるパソコン上の CCS(Code Composer Studio)内の Stdout ウインドウを,コンソール出力として利用する。
ので,注意しよう。
なお,Stdout ウインドウは,このプログラムを実行すると自動的に作られる。

    今回特に変わったところは赤い字で示しますが, 殆んどの操作は, プロジェクト「基本演算」のときと同様です。
  1. (操作 V-1. のように) CCSを 起動させます。
  2. (操作 V-2. のように) 新規プロジェクトを作ります。
  3. (操作 V-3. のように) .c ファイルを作り,プロジェクトに加えます。
    ここで,test01.c というファイルの内容は,次の通りです。
    #include <stdio.h>
    
    void	main()
    {
    	printf("Hello World ! \n");
    }
  4. (操作 V-4. のように) .cmd ファイルを作り,プロジェクトに加えます。
    ここで,test02.cmd というファイルの内容は前回と同様であり,次の通りです。
    MEMORY
    {
    	RAM:	origin = 0x0,	length = 0x10000
    }
  5. (操作 VII-1. のように) 「C:\ti\c6000\cgtools\lib」 内の 「rts6700.lib」をプロジェクトに組み込みます。
  6. (操作 V-5. のように) プログラムをビルドして,実行ファイルを作成します。
    実行ファイルを作るには, メニューバーの「Project」から,「Rebuild All」を指定します。 この際に,「警告」は無視してかまいません。
  7. (操作 V-6. のように) 実行ファイルを転送します。
    メニューバーの「GEL」から,「Reset」> 「ClearBreakPts_Reset_EMIFset」を指定します。
    この操作で,DSP ボードがリセットされました。
    続いて,メニューバーの「File」から,「Load Program...」 を指定し,ファイル名を問われるので, 先ほど作った「Debug/test.out」を指定します。
    この操作で,データが転送されると共に, 画面上に test01.c のプログラムリストが表示され, 矢印の記号が最初の中括弧を指し示します。
  8. (操作 V-11. と V-12. のように) ブレークポイントを設定し,実行します。
    ブレークポイントを,最後の } , すなわち main(){ に対応する } の行に設定し, メニューバーの「Debug」から,「Run (F5)」を指定します。 この操作により,次のブレークポイントまで実行します。
  9. 以上により,プログラムを作成すると共に,実行できました。
  10. なお,今回のプログラムは,実行結果を残す場所は,変数ではなく Stdout ウインドウです。 変数は,プログラムが終了すると開放されてしまうのに対し, Stdout ウインドウは,ウインドウを消すまで内容が残ります。 従って,今回のプログラムではブレークポイントを設定する必要はありません。