Version 5での新しい機能
コード・オプティマイザー
バージョン5は速度よりスペースを最適化する非常に積極的なコード・オプティマイザーを含んだ最初のリリースとなります。 新しいオプティマイザーはコンパイルされるプログラム全体でコードが繰り返されるブロックをを検索し、 これら繰り返されるブロックの全てを1つの共有サブ-ルーチンにします。 オプティマイザは最適化を行う際にユニットの境界を超える能力を提供しコンパイルの最終段階で実行されます。
#opt compress:この新しい最適化 レベルはプロジェクトにコード行を追加することによって達成することができます。
プログラム・メモリのサイズ減少の平均は約15%です。あるケースではプログラム・メモリの60%の削減が見られます。 下記は圧縮レベルの例です:
最適化レベルの効率 | コンパイラのバージョン | ||
V4.141 | V5.006 | ||
ファイル / プロセッサー | (プログラム・メモリ・バイト) | 削減 % | |
ex_modbus_master.c PIC16F1937 |
3926 | 3068 | 22.00% |
ex_j1939.c PIC18F4580 |
7552 | 6166 | 18.00% |
ex_st_webserver2.c PIC18F4550 + ENC28J60 |
60282 | 52664 | 12.00% |
標準化が向上されました
CCS Cコンパイラ・バージョン5は従来のC規格に更に準拠するようにアップデートされました:
- 特定のPIC® MCUのヘッダー・ファイル[.h]が 現在プロトタイプされています。 コンパイラの組み込み関数とデータ型のプロトタイプが含まれています。 これは定義されていないためエラーとなるコンパイラの組み込み関数とデータ型にフラッグが立てられますので 非常に便利です。
- 新しいコマンド-ライン・パラメータ: sourceline. これはコンパイルされようとしている
ファイルにCソース行を挿入するために追加されました。使用例:
ccsc.exe +FH myfile.c sourceline="#device PIC16F887" - 標準Cライブラリーiso646.h と stdbool.h が追加されました。
マルチプル・コンパイラ・バージョン
詳しくはFAQの IDEコンパイラでの複数バージョンのインストールをご覧下さい。
プロジェクト・ノート[Project Notes]
識別子エクスプローラ
ファイル・ナビゲーション・パネル
プロジェクト・ヒストリー
エクスプローラで表示
ノートにセーブ
ウォッチでのマウス-オーバー
"Watch"項目のドラッグ&ドロップ
スーパー・バー
統計ビューワー[Statistic Viewer]
ツリー・ビューワ
ライブ構文チェッカー
コピー・プロジェクト・ツール
コピー・ファインド&サーチ・ツール
ファインド・ツール
エディターの'Find all References' と 'Find Declaration'ツールが新しくなりました。 これらのユニークな新しいツールはエディターで識別子の上で右クリックすることで選択することが出来ます。 'Find All References'はインテリジェントに他のコメントされたリファレンス、又は、オーバーロードの ためにマッチしない同様の識別子をスキップしてこの識別子の全てのリファレンスを見つけます。 'Find Declaration'はその識別子が宣言された場所を見つけます。ブックマーク・ツール
ビルドと実行ツール
カラム編集
C++ストリーム演算子をサポート
標準Cでは基本的なI/Oがgetc(), putc()とprintf() のような関数で処理され、そして、データのフォーマット[書式設定]は atoi(), atof(), strotul() とsprintf() ような関数によって処理されます。 例えば、RS232を介しての浮動小数点数の読み出しはatof()が 続くgets()の組み合わせが必要です。 CCSはこれらのタスクの多くを達成するinput.cライブラリが含まれていますが、 固定RS232ストリームを使用したそのinput.cライブラリはKeypad/LCD、又は、修正なしのUSBでは 動作しません。
CCS CコンパイラのV5でC++ストリーム演算子を追加サポートしました。 C++ストリームはI/Oとデータ・フォーマッティングのための統合されたインターフェースを提供 しています。
その追加された2つの演算子は抽出演算子と挿入演算子です:
演算子シンボル | 演算子名 |
---|---|
>> | Extraction |
<< | Insertion |
使用されるとき、これら演算子はデータの方向を示します。例えば:
サンプル | コメント |
---|---|
x >> y | xから読み込み/解析されたデータを保存/yへ送信 |
x << y | yから読み込み/解析されたデータを保存/xへ送信 |
これらの演算子の美しさは上記の例のxとyは関数, RS232シリアル・ストリーム, 変数, 文字列等々の如何なる組み合わせで有る ことが出来ると言うことです。 CCS Cコンパイラのこの新しい機能のキー・フィーチャの1つは渡された変数のデータ・タイプ型に基づいて自動的に変換する方法です。 これらの変換は自動的に行われ、atof()がコールされる必要など他の関数の助けは必要ありません。 例えば、変数がfloat型である場合、コンパイラは正しく入力でstringからfloatに、そして、出力でfloatをstring に変換します
ストリーム << 識別子
上記のサンプルのstream は次の1つです:
- cout - デフォルト #use rs232()ストリームにマップされます。 これは明示的にcoutのストリームクラスを使用する既存のC++コードを使用するための互換性を提供します。
- RS232 stream name - #use rs232()のstream=xオプションでストリームが認識されます。
- char array (string) - データは識別子から解析されヌルターミネータを持つchar配列に保存されます。.
- function - その入力変数のためにchar型をとる関数。例えば、lcd_putc() CCSで lcd.c ドライバー、又は、 usb_cdc_putc() CCSで usb_cdc.hドライバー
識別子[identifier]は int, float, fixed point decimal, int1 (boolean) 又は、char arrayであることが出来ます。
識別子[identifier] は次の如何なるマニピュレータでも構いません:
- hex - 変数を文字列に変換するとき、それをhexフォーマット・キャラクター (%x in printf()と同じ)に変換します。
- dec (デフォルト) - 変数を文字列に変換するとき、それをdecimalフォーマット・キャラクター ( %d in printf()と同じ)に変換します。
- setprecision(x) - 小数点以下の桁数をセット
- setw(x) - 出力するキャラクタ数をセット
- boolalpha - int1を "true"又は、"false"として出力
- noboolalpha (デフォルト) - int1を"1"又は、"0"として出力
- fixed (デフォルト) - 浮動小数点数を decimal形式で表示(printf()の%fと同じ)
- scientific - 浮動小数点数を Eノーテーション(printf()の%eと同様)で表示
- iosdefault - 全ての修飾子をデフォルト設定にもどす
- endl - CR/LF出力
これはこの演算子使用のサンプルです:
cout << "Price is $" << setw(4) << setprecision(2) << cost*num << endl;
このサンプルは定数*numの結果に基づき小数点以下2桁を有し、CR/LFが続く "Price is $"を送信します。 これはデフォルトのRS232ストリームであるcoutを用いて送信されます。
ここでCCSのlcd.cドライバで提供されているlcd_putc()関数を使ってLCD上に表示するために上記のサンプルを変更:
lcd_putc << "Price is $" << setw(4) << setprecision(2) << cost*num << endl;
ここでresult_stringと呼ばれる文字列変数に書式を保存するには上記のサンプルに変更を加えます:
result_string << "Price is $" << setw(4) << setprecision(2) << cost*num << endl;
stream >> identifier
上記のサンプルのstreamは次の1つです:
- cin - デフォルトの#use rs232() ストリームにマップします。これは明示的にcoutストリーム・クラスを使用する既存のC++コードを使用するための互換性を提供します。
- RS232 stream name - #use rs232()のstream=xオプションで識別されたストリーム
- function - charを返す関数。例えば CCSの usb_cdc.hドライバーのusb_cdc_getc()、 この関数は a r が受信されるまで各文字列に対してコールされます。
識別子は整数、キャラクタ、 キャラクタ配列、浮動、固定小数点タイプの変数が可能です。Float タイプのフォーマットは Eフォーマットを使用出来ます。
識別子[identifier] は次の如何なるマニピュレータでも構いません:
- hex - 16進数
- dec (デフォルト) - 10進数
- strspace - 文字列にスペースを入れることが可能
- nostrspace (デフォルト) - 文字入力でスペースで終了
- iosdefault - 全操作をデフォルト設定にする
これはユーザーからの読み出し数とそれを変数値に保存するサンプルです。:
cout << "Enter Number";
cin >> value;
上記のサンプルはCCSの usb_cdc.h ドライバーのルーチンを使ってUSBバーチャルCOMポートから読み込むために即座に修正することが 出来ます:
usb_cdc_putc << "Enter Number";
usb_cdc_getc >> value;
複数の値を一度に読むことが出来ます。:
cin << variable1 << variable2 << variable3;
上記のサンプルで、入力演算子は variable1に読み込んで終了し、そして、そのデータ・タイプに対して 有効で無い文字を受信しますとvariable2 に読み込みを開始 します。例えば、もし、variable1とvariable2の両方がint型である場合、variable1への読み込みを停止し、 そして、"0"から"9"ではないスペースや改行のような任意の文字を受信するとvariable2に読み込みを始めます。
文字列から変数へのデータ変換も可能。このサンプルは str文字例変数をval 変数に変換します。 変換のタイプはvalのデータ・タイプで決定されます:
str >> val;
新しい入力キャプチャとPWMライブラリー
CCSはPIC® MCUのキャプチャ/コンペア/PWM, 入力キャプチャと 出力キャプチャ周辺機器の使用をさらに容易にするために新しい #use capture()と#use pwm()ライブラリーを追加しました。 これらの周辺機器を使用する1つの課題は希望する周波数及び分解能で動作するようにPWMを設計するか、 または既知の持続時間にイベントを測定するキャプチャ周辺機器を構成することです。 もう1つの課題はコンフィギュレーションが一般的に特定のPIC® MCUファミリーと 1つのオシレータ速度に対してのみ有効であるということです。; PIC® MCU、またはオシレータ の変更はこれらの周辺機器が構成される方法を見直し更新を意味します。
CCSの新しい#use capture()と#use pwm()ライブラリはこれらの周辺機器の使用を簡単にすることによりこれらの問題を解決し、 異なるPIC® MCUとオシレータ速度に移植可能なコードを作ります。
入力キャプチャ周辺機器はその周辺機器の入力ピンが希望のレベルに達したとき サンプルしタイマー値を保持します。 このペリフェラルは2つのイベント館の経過時間を測定するために便利です。
これはある入力信号の周波数を測定するために使用される新しい #use capture() ライブラリーの例を示します:
unsigned int16 GetFrequency(void)
{
上記のサンプルは新しいライブラリーに対するAPIを示しています:
- #use capture() - その入力キャプチャ周辺機器を使用のために設定します。 GPIOピンとトリガ・イベントを選択(IC又はCCPピンを使用しなければならない)することが出来ます。 タイマー構成も設定させます、どの内部タイマーを使用し、そして、bit毎の分解能を選択します。 このサンプルでは1つのプログラムで複数のピンのためのマルチプル#use capture()
- get_capture_event() - もし、イベントが起り、そして、get_capture_time() がイベントを読むために使用される必要がある場合、TRUEを返します。 これはイベントを読むためにget_capture_time()が使用されるまで TRUEを返します。
- get_capture_time() - 最後のタイミング・イベントを読み取ります。 これによって返されたタイミング分解能は#use capture()により定義されます。そして、このサンプルでは、それは CAPTURE_TICKS_PER_SECONDです。
上記のサンプルではキャプチャ・ペリフェラルとTimer 1はビット当たり1ms tickの分解能で ピンC1の立ち上がり電圧をキャプチャするように構成されます。 必ずしも全てのPIC® MCUとオシレータのコンフィギュレーションが1ms tick分解能に構成される わけではありません。 よって#use capture()の定義オプションがライブラリによって達成された 最終的な分解能に基づいてリテラルを定義します。 コンパイラは詳細な最後に達成された分解能の情報メッセージを提供します。
パルス幅変調(PWM)はアナログ信号を表すためにデジタル信号のオン/オフをパルス化する方法です。 PWMの2つのプロパティは周波数とデューティ・サイクルです。デューティ・サイクルはデジタル信号のオン対オフの比です。
これはCCS #use_pwm()ライブラリーが使用されている例:
void DACSetHalfValue(void)
{
上記のサンプルは新しいライブラリーのためのAPIを示しています:
- #use pwm() - PWMペリフェラルを構成します。 PWMピン, タイマーと初期開始周波数を設定します。 このサンプルでは示めされていませんが、ストリーム識別子は同じプログラムで複数の#use pwm()を 使用することが出来ます。同じくこのサンプルでは示めされていませんが、より低いPWM周波数でデューティ・サイクルの分解能のほとんどのビットを使用したい 開発者のためにPWMの分解能サイズを設定しています。
- pwm_on() - 動的にPWMをオンにする pwm_off() もPWMのターンオフに利用出来ます。
- set_pwm_frequency() - 新しい周波数をHzでセット
- set_pwm_duty_percent() - 新規デューティ・サイクル値をセット, パラメータは10の位の%です。
#use pwm()は希望する周波数, 希望する分解能, 又は、両方の コンビネーションでユーザーがPWMを設定することができます。 PIC® MCUとオシレータによっては希望する周波数に達することは常に可能ではありませんが、 その場合はコンパイラが最終の周波数の詳細情報のメッセージを与えてくれます。
シリアル・ルーチンにフロー制御とバッファリングを追加するためにV5 を使用
CCSのパワフルな#use rs232()ライブラリは バッファリングの送信, バッファリングの受信とフロー制御が追加されました。 シリアル・ライブラリのAPIは変更せずに残されました(getc(), putc(), printf()),。このAPIを使った 既存のコードは簡単に#use rs232()コンフィギュレーションを変更することにより バッファリングとフロー制御を追加することができます。 新しい #use rs232() パラメータを使用することで、ユーザーが指定出来ます: 送信バッファのサイズ, 受信バッファNサイズ, 割り込みの使用、又は、不使用, CTSとRTSのためのピン
フロー・コントロール、又は、バッファなしでの #use rs232() の使用のサンプルを見てみましょう:
void Transaction(char *pString)
{
上記のコードは2つの問題を持っています:
- そのprintf()は無遅延で受信ユニットにpStringするか、 又は、送信を読み込む受信ユニットの能力を考慮。 もし、受信ユニットがビジー、又は、送信を処理することが出来ない場合は、その処理が損なわれることになります。
- 送信のためのprinf()と受信のための kbhit()/getc()間に 大きな遅延(500ミリ秒)があります。 もし、受信ユニットがその500msのディレイの前に応答を送った場合には Transaction()ルーチンがその応答を逃すことがあり得ます。
バッファリングとフロー・コントロールの使用により, 上記の両方の問題を回避することが出来ます。 これは上記のコードをアップデートします、今回はCCS C Compiler V5の新しい#use rs232()機能を使用します。
void Transaction(char *pString)
{
アップデートされたサンプルについて最初に注目すべきはUARTの設定のために 変更されたコードが#use rs232()行だけであると 言うことです。printf(), kbhit()とgetc() は変える 必要がありません。これは以下に簡単に既存のコードでバッファリングとフロー制御が できるかを示しています。バッファリング・オプションをフロー制御無しで使用 することが出来ます。
これは上記サンプルで示される新しい#use rs232()オプションの概要です:
- RTS - RTSのためにどのピンを使用するかを指定。 このピンは受信バッファがいっぱいになっているためPIC® MCUにより トランスミッタに送信を停止するように指示するための出力です。 ハイ・レベル、又は、ロー・レベルを宣言する場合の設定に使用出来る RTS_LEVELのオプションもあります。
- CTS - CTSのために使用するピンを指定。 このピンは受信ユニットが受信を処理できるかどうかを判断するためにPIC®printf()/putc()は 送信バッファにデータを配置します。 ハイ・レベル、又は、ロー・レベルを宣言する場合の設定に使用出来るCTS_LEVELのオプションもあります。
- RECEIVE_BUFFER と TRANSMIT_BUFFER - それぞれ受信と送信バッファのサイズを設定
- TXISR - 指定された時, その #use rs232()ライブラリはPIC® MCUのEUSART周辺機器の 準備ができたときにデータを送信するTBE(バッファエンプティを送信)ISRを使用します。 このオプションはハードウエアEUSARTペリフェラルを使うときのみ使用することが出来ます。 送信を使用することができるかどうかを判断するTBEフラグをポーリングするputc()/printf()が使用され たときTXNOISRオプションも使用することができます。 詳しくは以下をご覧下さい。
バッファリングの受信は常にISRを使用します。これを達成するためにはハードウェアEUSARTペリフェラル が使用されるか、又は、RXピンが外部インターラプト・ピンでなければいけません。 バッファリングの送信はこれらの制限を持っていませんので、任意のGPIOピンを送信のために使用することが出来ます。
上記の例で、もしCTSピンが有効である場合において、printf()を呼び出すには送信バッファにデータを配置し、
その後RS232ライブラリは送信バッファからデータをプッシュします。
受信バッファにデータがある場合、そのkbhit()はTRUEを返し、
そして、getc()は次の文字を受信バッファから読み出されます。
その#use rs232()ライブラリーはバッファの残りのサイズに応じて
ISR受信中に自動的にRTSピンを制御します。
RS232 APIにバッファに関する新しい関数が追加されました:
- putc() - パラメータなし(又は、 単にストリーム識別子)が呼び出されたとき、送信バッファ内の文字を送信する 必要があるかどうかを判断するため、TBEとフロー制御ピンをポーリングします。
- xmit_buffer_bytes(), receive_buffer_bytes() - そのバッファのバイト数を返します。
- xmit_buffer_full(), receive_buffer_full() - バッファがフルの場合に TRUEを返します。
これあはV5コンパイラがシリアル・ライブラリーにバッファリングとフロー制御が追加された一部に 過ぎません。もっと多くのコンフィギュレーションと制御オプションがあります!
タイマー・ティック・ライブラリー[Timer tick]
#use_timer() ライブラリーはPIC® MCU PWM とOC ペリフェラルを使い易くします。 また、この新しいライブラリーは異なったPIC® MCU、又は、異なったクロック・スピードからコードをポートするのも 容易にします。このライブラリーはタイマー, プリスケーラの設定をユーザーの設定をベースに自動的に行われます。例えば:
int1 OneSecondExired(void)
{
#use timer()はどの様な内部タイマーも設定することが出来ます。 コンパイラは特定のPIC® MCUとオシレータに基づいた最終的な分解能を表示する 情報メッセージを提供します。定義オプションはビット当たりの分解能を決定するためと実行時の定数を 定義するために使用することが出来ます。(TICKS_PER_SECOND 上記サンプルの様に).
一度#use timer()が使用されますとそのタイマーが 自立タイマーを作成するために使用され、get_ticks()が現在の時間を読むために 使用することができます。 #use timer() はPIC® MCUのタイマーに機能があれば、 外部クロック・ソースからの読み取りも設定することも出来ます。
SPI 共有
バージョン5はSPIを再設定ができるルーチンを追加することで 同じSPIペリフェラルやピンを共有する複数の#use spi()ストリームのための能力を追加しました。 これは新機能の使用例です:
unsigned int8 EEPROMRead(unsigned int16 address)
{
#use_spi()のNOINITオプションと spi_init() 関数が新機能としてバージョン5に追加されました。 NOINIT オプションはコンパイラにmain()の 開始時にSPIペリフェラルを初期化しない様に伝えます。 spi_init() ルーチンが、このSPIストリームをその設定パラメータに基づき初期化します。 動的にクロック・レートを変更するためにspi_init()にオプショナル・パラメータ を追加しました。
これら追加の利点は、各SPIデバイスが異なる最大クロック・レートを持っているか、又は、異なったSPIモードで 操作されていても同じSPIピン、又は、SPIペリフェラルを共有しながら複数のSPIデバイスを使用することが出来ます。 spi_init()を使用することで、デバイスと通信する前にそのデバイスの設定に基づいた SPIペリフェラルを再設定することが出来ます。
pin_select() 関数
CCS Cコンパイラのバージョン5の前はPIC® MCUのピン・セレクト(又は、再プログラム可能なピン) はプリプロセッサー・コマンドを介して行われました。例えば:
#pin_select U1TX = PIN_D5
プリプロセッサー・コマンドの欠点は動的ではなく常にmain()の初めに 実行されたということです。 CCS Cコンパイラのバージョン5ではpin_select() が追加され動的に再設定が出来るようになりました。:
pin_select(U1TX, PIN_D5);
J1939 CAN ドライバー
物理レイヤにCANを用いてSAE J1939データ・リンク・レイヤーを実行するためのドライバーが追加されました。
time.h の改良
time.hは現在の日付/時刻とを読み取り日付/時刻変数の演算を実行する標準Cライブラリです。 バージョン5 では以前のバージョンのtime.hが改良されました。 time.hファイルは簡単に使用するためにリアルタイム・クロックのように既存のデバイスに 適応できるようにするためにクリーンアップされています。 ds1305.c ドライバーも追加されました。これは time.hとコンパチブルです。
virtual_eeprom.c - 仮想EEPROMドライバー
このドライバはプログラム・メモリ(フラッシュ)の2ページを使用して仮想EEPROMを作成します。 書き込みバランシング・アルゴリズムがこのドライバーに統合されていてフラッシュ・メモリの耐久性の劣化の問題から 一つのアドレスに連続書き込みをしないようにされています。
- input.c ドライバが既存の文字列や整数の編集を可能にするためにアップグレードされました。
- USB driver/library 同時にCDCとHIDの両方のインターフェイスを含むデバイスの作成を可能にするためにアップグレードされました。
- internal_eeprom.c が内部EEPROMにマルチバイト構造の記述を簡略化するために追加されました。
Cプロファイラー
PIC® MCUの実行中、Cプロファイラ−・ツールは連続的にロギングし、そして、 プログラムのプロファイルを与えるためにラン-タイム・イベントを分析しています。 関数が実行された回数, それに要した最小/最大/平均時間とプログラムの呼び出しシーケンス がログされて分析されます。また、ユーザーは特別なデバッグ・メッセージを送信したり、 又は、ある変数をログするためにそのコードのブロックのみをプロファイルする様に指定することができます。
Cプロファイラーは1つのCCS Cコンパイラのステートメント #use profile()
でグローバルに有効, 無効又は、設定することが出来ます。
ほとんどのアプリケーションでは、Cプロファイラー・ツール用にアプリケーションを構成するために
1つの#use profile()コマンドのみが要求されます。
また、ユーザーがプロファイルする必要のあるどのデータとルーチンを細かく調整するためのCプロファイル・ツールを動的に制御する
ための#profileプリプロセッサー・コマンドとprofileout()マクロもあります。
CプロファイラーはPIC® MCUがデバッグモードでは無く、PIC® MCUが実行モードの間に動作します。 実行速度を高く保つために実行中のPIC® MCUからは最少量を読み込みます。 例えば、文字列は全体ではなく文字列の1バイトの識別子を使用して送信されます。 これは高い実行速度が必要な多くのシナリオで、そして、そのオーバーヘッドのために 標準的なICDデバッガ使用することが出来ない場合にで理想的です。 例えば、USBはわずか数ミリ秒の遅延のためにUSBが動作しないことがありますので、 ICDでデバッグすることは困難です。オーバーヘッドが最小限に保たれているのでUSB操作は Cプロファイラーでデバッグすることができます。
統計[Statistics]
Cプロファイラーの統計ビューはプログラムの実動作で全関数の各関数について所要時間の最小, 最大, 平均時間の詳細な情報を示してくれます。 プログラム設計時点で各関数の実稼働時間等を知り得ることは非常に有効です。 特に複数の設計者で遂行するプロジェクトでマルチタスクなプログラム設計時に 各設計者の作成のプログラムの所要時間を調整する際には、この機能は必須項目となります。 さらに、大きなプログラム作成時には全関数に対してこの様な統計所要時間を調査する 必要が無い時もあります。 その際には計測の必要な重要な関数にのみ下記に示す様に 各関数の冒頭で#profile ON/OFF で指定することも可能です:
void FunctionNotLogged(void)
{
/* code */
}
#profile ON
関数の代わりに特定のコードのブロックのタイミングを追跡することも可能です。これは特殊なprofileout()マクロで行うことができます。 もし、ユーザーのアプリケーションで#use profile()が有効になって いないとprofileout()は無効にされます。 これはいくつかの関数のタイミングを追跡するためのprofileout()の使用例:
Function1();
Function2();
Function3();
profileout("stop main loop")
上記のサンプルの様にprofileout()を使う時には、 Cプロファイル・ツールの統計ウィンドウに"main loop"が表示されます。
トレース・プロファイリングにはPIC® MCUにより送信 されたトレース・プロファイル・メッセージを受信するためにCCS ICD-U64が必要です。 PIC® MCUはデバッグ・モードではなく実行モードで実行されますとPIC® MCU はICDが接続されていなくても通常に実行されます。
メッセージ
Cプロファイラー・ツールのデータ・メッセージ・ビューはプログラムによって送信されたすべてのデバッグ・メッセージをキャプチャします。
最近のメッセージや変更は黄色で強調表示されます。
これらはprofileout()マクロを使用して送られたメッセージです。
ここで使用するためのいくつかの有効な構文は以下のとおりです:
profileout("string", value)
profileout(value)
上記のイメージでは次のコードが使用されています:
実行時間とオーバーヘッドを低くく保つために1バイトの識別子のタグを使用する 代わりにCプロファイラー・ツールが実際の文字列を送信しないことを繰り返すことが重要です。
呼び出しシーケンス
Cプロファイラー・ツールの呼び出しシーケンス・ビューはプロファイルされるプログラムの実行パスを表示します。 各関数にパスされたパラメータを検査することによりこのビューはプログラムのある部分が実行している理由を デバッグするために使用することが出来ます。
大規模なプログラムは多くの関数を持つことが出来ますので、受信したデータの量を減らすためにルーチン がプロファイルされる動的制御するために#trace off と #trace onを繰り返すことが重要です。
呼び出しシーケンス・ビューはトリガー、又は、ある条件に基づいたデータのフィルターリングの方法も 持っています。そのトリガー・タイプは:
- None - 全受信データを表示
- Freeze - 指定された関数が実行された時に表示をストップ
- One Shot - 指定された関数が実行される迄表示をストップ
- Continuous - 指定された関数が実行された時に表示をクリア
- Accumulate - 指定された関数の呼び出しシーケンスで違いをハイライト
デバッギングしないデバッグ!
Cプロファイラー・ツールはICDを使っての場合のオーバーヘッド無しでプログラムをデバッグするための優れたツールです。 CプロファイラーはCCS Cコンパイラ V5とICD-U64が必要です!