...

BoostC リファレンス

by user

on
Category: Documents
10

views

Report

Comments

Transcript

BoostC リファレンス
ソースブースト 7.0 対応
■BoostC リファレンス
BoostC
リ
フ
ァ
レ
ン
ス
BoostC リファレンス
履歴
12/21/2010
BoostC
リ
フ
ァ
レ
ン
ス
2
ソースブースト 7.0 対応版
BoostC リファレンス
目次
ブースト C コンパイラ ........................................................................................................... 9
イントロダクション ............................................................................................................... 9
ブースト C コンパイラの仕様 ................................................................................................ 9
基本データ型 ................................................................................................................... 9
特殊なデータ型 ............................................................................................................... 9
コード生成と最適化の機能 ........................................................................................... 10
デバッグ機能 ................................................................................................................. 10
MPLAB との完全統合.....................................................................................................11
ライブラリアン .............................................................................................................. 11
コード解析 ..................................................................................................................... 11
インストール ........................................................................................................................ 12
コンパイルモデルとツールチェイン.................................................................................... 14
プリプロセッサ .................................................................................................................... 14
コンパイラ ............................................................................................................................ 14
リンカ ................................................................................................................................... 15
ライブラリアン .................................................................................................................... 15
C2C コンパイラモデルとの違い ......................................................................................... 15
MPLAB 統合 ........................................................................................................................ 16
MPLAB の言語ツールロケーションの設定 ......................................................................... 17
MPLAB IDE でのプロジェクト作成 ................................................................................... 18
ICD2 の利用 ......................................................................................................................... 21
コマンドラインオプション .................................................................................................. 21
ブースト C コマンドライン .......................................................................................... 22
最適化 ................................................................................................................................... 22
ブーストリンク・コマンドライン ....................................................................................... 23
-rb .................................................................................................................................. 23
-swcs s1 s2 s3 ............................................................................................................... 24
-isrnoshadow ................................................................................................................ 24
-isrnocontext................................................................................................................. 25
-icd2............................................................................................................................... 25
-hexela .......................................................................................................................... 25
libc ライブラリ .............................................................................................................. 25
コードのエントリポイント ........................................................................................... 25
プリプロセッサ .................................................................................................................... 26
組み込み定義マクロ ............................................................................................................. 26
プリプロセッサ命令 ............................................................................................................. 27
3
BoostC
MPLAB 統合の機能 ............................................................................................................. 16
リ
フ
ァ
レ
ン
ス
BoostC リファレンス
#include ........................................................................................................................ 28
#define .......................................................................................................................... 29
#undef ........................................................................................................................... 30
#if,#else,endif ............................................................................................................... 31
#ifdef ............................................................................................................................. 32
#infdef ........................................................................................................................... 33
#error ............................................................................................................................ 34
#warning....................................................................................................................... 35
プラグマ命令 ........................................................................................................................ 36
#pragma DATA............................................................................................................. 37
#pragma CLOCK_FREQ ............................................................................................. 38
#pragma OPTIMIZE .................................................................................................... 39
#pragma config ............................................................................................................. 40
デバイスのコンフィグレーション・オプション ................................................................. 41
デバイス・コンフィグレーション・メソッド ..................................................................... 41
コンフィグレーション・オプションの調べ方 ..................................................................... 42
#pragma config を使ったコンフィグレーション ................................................................ 42
#pragma DATA を使ったコンフィグレーション ................................................................ 43
EEPROM データのイニシャライズ .................................................................................... 43
C 言語 .................................................................................................................................. 44
BoostC
リ
フ
ァ
レ
ン
ス
プログラム構造 .................................................................................................................... 44
データタイプ ........................................................................................................................ 45
構造体と共用体 .................................................................................................................... 46
Typedef ......................................................................................................................... 46
Enum ............................................................................................................................ 46
コードサイズとデータタイプ............................................................................................... 46
ROM .............................................................................................................................. 47
Volatile .......................................................................................................................... 48
static ............................................................................................................................. 48
定数 ............................................................................................................................... 48
文字列 ............................................................................................................................ 49
変数 ....................................................................................................................................... 49
レジスタマップ変数 ...................................................................................................... 49
ビットアクセス ............................................................................................................. 50
PORTB と portb の違いについて ................................................................................. 50
配列 ............................................................................................................................... 50
ポインタ ........................................................................................................................ 50
関数引数の文字列 ................................................................................................................. 51
演算子 ................................................................................................................................... 52
4
BoostC リファレンス
算術演算子 .................................................................................................................... 52
代入演算子 .................................................................................................................... 54
比較演算子 .................................................................................................................... 55
論理演算演算子 ............................................................................................................. 57
ビット演算子 ................................................................................................................. 58
条件式 ................................................................................................................................... 60
ループ ................................................................................................................................... 61
インラインアセンブラ.......................................................................................................... 63
asm 内からの変数参照.................................................................................................. 64
asm 内での定数表記 ..................................................................................................... 64
ユーザデータ ........................................................................................................................ 65
関数 ....................................................................................................................................... 66
インライン関数 ............................................................................................................. 66
特別な関数 .................................................................................................................... 66
関数と割り込み ............................................................................................................. 67
関数ポインタ ................................................................................................................. 68
メモリマップ関数 ................................................................................................................. 68
ダイナミックメモリマネジメント(動的メモリ管理) ........................................................... 69
C 言語スーパーセット.......................................................................................................... 69
関数の参照引数 ............................................................................................................. 70
関数テンプレート.......................................................................................................... 71
パラメトリックタイミング関数 ........................................................................................... 71
delay_us ........................................................................................................................ 73
delay_10us .................................................................................................................... 74
delay_100us .................................................................................................................. 75
delay_ms ....................................................................................................................... 76
delay_s .......................................................................................................................... 77
システムライブラリ ............................................................................................................. 78
clear_bit ........................................................................................................................ 79
set_bit ........................................................................................................................... 80
test_bit .......................................................................................................................... 81
MAKESHORT .............................................................................................................. 82
LOBYTE ....................................................................................................................... 83
HIBYTE ........................................................................................................................ 84
nop................................................................................................................................. 85
clear_wdt ...................................................................................................................... 86
sleep .............................................................................................................................. 87
reset .............................................................................................................................. 88
5
BoostC
関数のオーバーロード .................................................................................................. 70
リ
フ
ァ
レ
ン
ス
BoostC リファレンス
文字列操作関数 .................................................................................................................... 89
strcpy、strncpy ............................................................................................................ 89
strlen ............................................................................................................................. 90
strcmp/stricmp ............................................................................................................. 91
strncmp ......................................................................................................................... 92
strcat/strncat ................................................................................................................ 93
strpbrk .......................................................................................................................... 94
strcspn .......................................................................................................................... 95
strspn ............................................................................................................................ 96
strtok............................................................................................................................. 97
strchr ............................................................................................................................ 98
strrchr ........................................................................................................................... 99
strstr ........................................................................................................................... 100
入出力関数 .......................................................................................................................... 101
sprintf ......................................................................................................................... 102
sprintf32 ..................................................................................................................... 105
strtoi/strtol ................................................................................................................. 106
atoi/atol ....................................................................................................................... 107
itoa/ltoa ....................................................................................................................... 108
sqrt .............................................................................................................................. 109
BoostC
簡易入出力関数 ................................................................................................................... 110
uitoa_hex ..................................................................................................................... 111
uitoa_bin ...................................................................................................................... 112
リ
フ
ァ
レ
ン
ス
uitoa_dec ...................................................................................................................... 113
atoui_hex ..................................................................................................................... 114
atoui_bin ...................................................................................................................... 115
atoui_dec ...................................................................................................................... 116
sqrt1 ............................................................................................................................. 117
文字操作関数 ....................................................................................................................... 118
toupper......................................................................................................................... 118
tolower ......................................................................................................................... 119
isdigit .......................................................................................................................... 120
isalpha ........................................................................................................................ 121
isalnum ....................................................................................................................... 122
isblank ........................................................................................................................ 123
isacntrl ........................................................................................................................ 124
isgraph ........................................................................................................................ 125
islower......................................................................................................................... 126
isprint ......................................................................................................................... 127
6
BoostC リファレンス
ispunct ........................................................................................................................ 128
isspace......................................................................................................................... 129
isxdigit ........................................................................................................................ 130
memchr ....................................................................................................................... 131
memcmp ..................................................................................................................... 132
memmove.................................................................................................................... 133
memset ....................................................................................................................... 134
その他の関数 ...................................................................................................................... 135
rand ............................................................................................................................. 135
srand ........................................................................................................................... 136
max ............................................................................................................................. 137
min .............................................................................................................................. 138
abs ............................................................................................................................... 139
startCRC16................................................................................................................. 140
CRC16 ......................................................................................................................... 141
I2C サポート関数 ............................................................................................................... 142
UART ドライバ .................................................................................................................. 143
ドライバの機能 ........................................................................................................... 143
ドライバの詳細 ........................................................................................................... 143
UART ドライバの導入方法 ........................................................................................ 144
ドライバのメモリ........................................................................................................ 145
ヘルパー・マクロ........................................................................................................ 146
初期化 .......................................................................................................................... 147
割り込みハンドラ........................................................................................................ 147
データの受信 ............................................................................................................... 148
データ送信 .................................................................................................................. 149
UART ドライバ API ................................................................................................... 149
LCD サポート関数 ............................................................................................................. 152
フラッシュ関数 .................................................................................................................. 153
flash_read ................................................................................................................... 153
flash_loadbuffer ......................................................................................................... 154
flash_write .................................................................................................................. 155
EEPROM 関数 ................................................................................................................... 156
eeprom_read ............................................................................................................... 156
eeprom_write.............................................................................................................. 157
ADC 関数 ............................................................................................................................ 158
adc_measure ............................................................................................................... 158
ワンワイヤバス関数 ........................................................................................................... 159
7
BoostC
コンフィグレーション ................................................................................................ 144
リ
フ
ァ
レ
ン
ス
BoostC リファレンス
oo_busreset ................................................................................................................. 159
oo_get_data................................................................................................................. 161
oo_read_scratchpad ................................................................................................... 162
oo_start_conversion ................................................................................................... 163
oo_conversion_busy.................................................................................................... 164
oo_wait_for_completion ............................................................................................. 165
動作環境 ............................................................................................................................. 166
BoostC
リ
フ
ァ
レ
ン
ス
8
BoostC リファレンス
ブースト C コンパイラ
イントロダクション
ブースト C は PIC16、PIC18、そしていくつかの PIC12 プロセッサと動作する次世代 C
コンパイラです。
これは ANSI C 準拠のコンパイラで、ソースレベルのシンボリック・デバッグや、符号付
データタイプ、構造体/共用体、あるいはポインタといった機能をサポートしています。
ブースト C コンパイラは、ソースブースト IDE(統合環境:Integrated Development
Environment)上で使用したり、Microchip 社の MPLAB と統合して、使用することが
できます。
ソースブースト IDE のコンパイルモデルは、次の図のようになります。
ブースト
コンパイラの仕様
BoostC
基本データ型
サイズ
タイプ名
仕様
1 ビット
8 ビット
16 ビット
32 ビット
bit,bool
char
short,int
long
ブール値
符号付、符号無し(signed,unsigned)
符号付、符号無し(signed,unsigned)
符号付、符号無し(signed,unsigned)
リ
フ
ァ
レ
ン
ス
特殊なデータ型
・シングルビット .............. フラグ用のメモリに有効です
・固定アドレス .................. ターゲットデバイスのレジスタにアクセスする場合に有効で
す
・読み出し専用 .................. コードメモリの定数に使用します
9
BoostC リファレンス
コード生成と最適化の機能
・
ANSI C 互換
コードの高い移植性が可能になります
・
PIC16(14 ビットコア)と PIC18(16 ビットコア)のどちらも最適化されたコード
を生成します
・
構造体と共用体のサポート
構造体と配列は、基本データ型やほかの構造体から作ることができます基本データ型や
構造体の配列が作成可能です
・
ポインタのサポート
ポインタは、
“全ての通常の方法”で使用可能です
・
インライン・アセンブラ
インラインアセンブラは、必要に応じて、高度で巧みなコード生成が可能になります
・
インライン関数
・
インライン関数は、関数として記述されますが、関数呼び出しの変わりに、イ
ンラインコードとして生成されます。これは、プログラムの実行速度を上げるのに効果
的です。
・
使用されないコードの削除
コードメモリの使用量を削減します
BoostC
リ
フ
ァ
レ
ン
ス
・
呼び出されない関数の削除
コードメモリの使用量を削減します
・
最小限のコードページ切替
ターゲットに複数のコードページが必要な場合
・
変数の自動バンク切替
変数の使用における注意が不要です
・
効果的な RAM の使用
異なるコードセクションでローカル変数用のメモリを共用します。リンカは、衝突を避
けるよう、プログラムを解析します。
・
ダイナミック・メモリ・マネージメント
デバッグ機能
・
ソースレベルとインストラクションレベルのデバッガ
リンカは COF ファイルを生成し、ソースブーストデバッガでのソースレベルデバッグを
可能にします。
・
ステップイン、ステップオーバー、ステップアウト及びステップバック
これらの機能は、ソースレベルあるいはインストラクションレベルのどちらでも使用可
10
BoostC リファレンス
能です。
・
マルチ実行ビュー
実行中のコードがソースレベルとアセンブラレベルで、どの位置にあるのかを、同時に
見ることができます。
・
変数のモニタ
変数はウォッチウィンドウに追加することができ、それらの変数は、確認と変更が可能
です。変数がどこに格納されているかを知っている必要はありません。
MPLAB との完全統合
・
MPLAB IDE で、MPLAB のプロジェクトマネージャが使用可能です。
・
MPLAB IDE で、ソースコードの作成と編集が可能です。
・
MPLAB IDE の環境での、プロジェクトの作成が可能です。
・
ソースレベルデバッグと、変数のモニタが、以下のツールで使用可能です。
- MPLAB シミュレータ
- MPLAB ICD2
- MPLAB ICE2000
ライブラリアン
BoostC
・
ライブラリファイルの生成が可能
頻繁に使用するコードや共有コードの管理が簡単になります
・
リ
フ
ァ
レ
ン
ス
編集時間の削減
ライブラリファイルを使用することで、編集時間の削減が可能です
コード解析
・
コールツリー表示
ソースブースト IDE は、関数のコールツリー表示が可能です。
・
コードの使用状況
プログラムの完了後、ソースブースト IDE 上で、関数レベルまで降りての、コードスペ
ースの使用状況が表示できます。
・
RAM の使用状況
プログラムの完了後、ソースブースト IDE 上で、関数レベルまで降りての、RAM の使
用状況が表示できます。
11
BoostC リファレンス
インストール
ブースト C は、ソースブースト IDE のインストールと共にインストールされますので、
ブースト C を単体でインストールすることはできません。
ソースブースト IDE とブースト C をインストールする際は、以下の簡単なステップに従
ってください。
・
ソースブーストのインストーラを実行し、画面の指示に従ってインストールを
進めます
Ver7.0 ではサンプルソースのインストール先を指定することができます。
・
次のダイアログには、注意が必要です:
BoostC
・
リ
フ
ァ
レ
ン
ス
12
BoostC リファレンス
ブースト C を MPLAB と統合する場合は、”次へ”ボタンを押す前に、Microchip の正し
いディレクトリを選択して、MPLAB に統合ボタンを押してください。
・
残りのインストールプロセスは、画面の指示通りに行います。最終的に、ソー
スブースト IDE がシステムに組み込まれ、実行可能な状態になります。
※インストール中に“MPLAB 統合”をスキップした場合は、MPLAB 統合に必要なファイルは、ソース
ブーストのインストールディレクトリの下の¥mplab というサブディレクトリにインストールされます。
これらのファイルは、いつでも手動で正しい場所にコピーすることができます。
詳しくは、このマニュアルの後のセクションの、”MPLAB 統合”を参照してください。
BoostC
リ
フ
ァ
レ
ン
ス
13
BoostC リファレンス
コンパイルモデルとツールチェイン
BoostC
リ
フ
ァ
レ
ン
ス
プリプロセッサ
プリプロセッサ(pp.exe)は、コンパイラから自動で起動されます。
コンパイラ
完全に分割された、
2 つのコンパイラがあります:1 つのは PIC16 用、
もうひとつが PIC18
用です。
ソースブースト IDE で作業している場合、どちらを起動するかを選択する必要はありま
せん。IDE が、選択されたターゲットデバイスに合わせて、正しいコンパイラを起動し
ます。
14
BoostC リファレンス
コンパイラの出力は、1 つ以上の.obj ファイルで、ライブラリアンやリンカでさらに処理
され、.lib か.hex を生成します。
リンカ
ブーストリンク 最適化リンカは、コンパイラによって生成された .obj ファイルを、タ
ーゲットに送る.hex ファイルへとリンクします。 また、デバッグやコード分析に使用さ
れる補助ファイルを生成します。
ライブラリアン
ライブラリアンは BoostLink リンカに組み込まれ、-lib コマンドライン引き数により動作
します。ソースブースト IDE 内の、設定ダイアログに専用ボックスがあり、これにより
hex ファイルの代わりにライブラリファイルを生成させることができます。
ターゲットデバイスに依存しないライブラリを作成するには、インクルードファイルに、
system.h の代わりに boostc.h を指定します。この方法は、ターゲット特有の情報(ターゲ
ット特有のレジスタに、定数や変数をマップするような)をライブラリに組み込みません。
BoostC
C2C コンパイラモデルとの違い
ブースト C と C2C コンパイラの一番の違いは、 C2C には外部アセンブラ(例:mpasm)
によって.asm ファイル出力するビルトインリンカがあるのに対し、ブースト C ツール
は .hex ファイルを自分で生成するため、外部ツールは不必要である点です。
別の違いは、コンパイラのコードメモリ内の読み込み専用変数の扱いです。C2C が const
変数をコードメモリ内に配置するのに対し、ブースト C は特別なデータタイプ、ROM に
配置する点です。
15
リ
フ
ァ
レ
ン
ス
BoostC リファレンス
MPLAB 統合
ブースト C コンパイラは、
マイクロチップ社の、
MPLAB integrated development environment
(IDE)に統合することが可能です。MPLAB 統合オプションは、ソースブーストのソフト
ウェアパッケージインストール中に選択する必要があります。
注意:ブースト C を MLPAB で使用する場合は、ソースブーストのインストール中に、MPLAB 統合を
選択する必要があります。これを選択すると、いくつかのファイルをコピーし、統合に必要な、い
くつかのレジストリキーの設定を行います。
“MPLAB 統合”を選択しなかった場合は、ソースブーストの下の¥mplab フォルダのファイルを、次の
フォルダにコピーする必要があります。
MPLAB 8.x の場合:
<MPLAB IDE>¥MPLAB IDE¥Core¥MTC Suites
MPLAB 7.x の場合:
<MPLAB IDE>¥Third Party¥MTC Suites
MPLAB 6.x の場合:
<MPLAB IDE>¥LegacyLanguageSites
上記の例では、<MPLAB IDE>は、MPLAB のインストールディレクトリを示しています。
BoostC
リ
フ
ァ
レ
ン
ス
統合の機能
ブースト C が MPLAB IDE に統合された場合、以下のことが可能になります。
・ MPLAB IDE 中での、MPLAB プロジェクトマネージャの使用
・ MPLAB IDE.中での、ソースコードの作成と編集
・ MPLAB IDE 中でのプロジェクトの作成.
・ MPLAB シミュレータ、MPLAB ICD2、MPLAB ICE2000 を使ったソースレベルデ
バッグと、変数モニタリング
16
BoostC リファレンス
の言語ツールロケーションの設定
このプロセスは、最初の 1 回だけ行う必要があります。
以下の手順は、ソースブースト・ソフトウェアパッケージが、デフォルトのフォルダに
インストールされていると仮定して説明しています。
・ MPLAB IDE を開始します。
・
メニューから、
「Project」
「Set Language Tool Locations」を選択します。
※ブースト C コンパイラが Registered Tools リストに現れない場合、 ソースブーストのインストール
中に、統合プロセスが実行されなかったか、正しく完了していなかった可能性があります。
・ PIC16 用の、ブースト C C コンパイラのロケーションを設定します。
BoostC
リ
フ
ァ
レ
ン
ス
・ Boost Linker のロケーションを設定します。
17
BoostC リファレンス
・ 同様に PIC18 用の、ブースト C コンパイラのロケーションを選択します。
・ Boost Linker のロケーションを設定します。
BoostC
リ
フ
ァ
レ
ン
ス
でのプロジェクト作成
まずこれを実行する前に、MPLAB 言語ツールの設定が、正常に完了しているかどうか、
確認してください。
以下の手順で、MPLAB IDE 上でプロジェクトが作成できます。そして、ブースト C コ
ンパイラで、PIC16 ターゲット用にコンパイル、ビルトが可能になります。プロジェク
ト名は、”test”で、ソースコードの場所は、”c:¥PicPrograms¥test”とします。
1. メニューから、「Project」
「New」を選択し、プロジェクト名とディレクトリを入力
します。
18
BoostC リファレンス
メモ:すでに存在する、ソースブースト IDE プロジェクトの場所でも可能です
2. メニューから、
「Project」
「Select Language Toolsuite」を選択し、PIC16 用の、ブ
ースト C C コンパイラを選択してください。
ウィンドウに、コードを入力してください。
※既にソースファイルが存在する場合、4の手順は飛ばすことが可能です。
4. メニューから、
「File」
「Save As」を選択し、ダイアログボックスで、プロジェクト
フォルダを指定します。
(ここでは、ファイル名を、test.c としています。
)
5. プロジェクトツリー内の、Source Files を右クリックし、 test.c ソースファイルを
プロジェクトに追加してください。
19
BoostC
3. メニューから、「File」「New」を選択し、Untitled*と表示されている、コード入力
リ
フ
ァ
レ
ン
ス
BoostC リファレンス
6. プロジェクトツリー内の Library Files を右クリックし、libc.pic16.lib ファイル
(C:¥Program Files¥SourceBoost¥Lib フォルダ内にあります)をプロジェクトに追加し
てください。
BoostC
7. プロジェクトは最終的に以下のようになります。
リ
フ
ァ
レ
ン
ス
8. メニューから、
「Project」
「Build」を選択します(または、ツールバーのビルドボタン
を押す)。これで、コードはビルトされます。
以上のプロセスで、MPLAB シミュレータ、ICD2、または ICE1 を使用し、デバイスをプ
ログラムして、プログラムを実行したり、デバッグしたりすることが可能になります。
ICD2 を使用する前には必ず、本ドキュメントの、ICD2 の利用についてのセクションを
参照ください。 ソースファイルの追加と同様に、プロジェクトツリーに、プロジェクト
ヘッダファイルを追加するのも良いでしょう。プロジェクトブラウズが容易になります。
20
BoostC リファレンス
の利用
ICD2 を使用する際、以下のように、注意しなければならない点がいくつかあります。
1. RAM の使い方
ICD2 はターゲットデバイスの RAM をいくつか使用するため、実際のアプリケーション
で使用できる RAM の残量は尐なくなってしまいます。
ICD2 によって使用される RAM を抑え、Boost Linker がこのメモリを使用するのを防ぐ
ためには、次の例のように、icd2.h のヘッダファイルをインクルードしてください。
#include <system.h>
#include <icd2.h>
// allocates RAM used by ICD2
void main()
{
while( 1 );
}
2. SFR の使用方法
ICD2 はいくつかの特殊機能レジスタを使用しています。これにより、ICD2 をデバッグ
に周辺デバイスを使用するのを防ぎます。
いくつかのターゲットでは、これらの特殊機能レジスタは、他の周辺デバイスと同じアドレスになって
います。詳しくは、MPLAB IDE ヘルプ内にある、ICD2 リソースの取り扱いの説明書を参照ください。
3. ブレークポイントオーバーラン
ターゲットデバイスの、プリフェッチ命令によるタイミングスキューにより、設定した
ブレークポイントアドレスを通過してしまう事があります。
4. ROM アドレス 0 の NOP
ブーストリンクのコマンドラインオプションの –icd2 を参照し、ROM アドレス 0 に
NOP を追加してください。
コマンドラインオプション
ブースト C コンパイラと、ブーストリンクのリンカコマンドラインオプションは、実行
時にコマンドラインで指定します。
21
BoostC
重要:ICD2 が特殊機能レジスタにアクセスしていないかどうかを確認できるのは、ユーザのみです。
リ
フ
ァ
レ
ン
ス
BoostC リファレンス
ブースト C コマンドライン
ブースト C のコマンドラインオプションは、以下のものがあります。
書式: boostc.pic16.exe [options] files
Options:コマンドラインオプション
-t name
プロセッサを name で指定した、ターゲットにします。(デフォルト
=PIC16F648A)
-On
最適化レベルの指定(デフォルト n=1)
n=0 - 最適化オフ
n=1 - 最適化オン
n=a - 最大の最適化
n=p - 32 ビット長プロモーションオン
-Wn
警告レベルの設定 (デフォルト n=1)
n=0 - 警告無し
n=1 - 警告あり
n=2 - 全ての警告を出力する
BoostC
リ
フ
ァ
レ
ン
ス
-Werr
警告をエラーとする(デフォルトオフ)
-i
インラインコードデバック(デフォルトオフ)
-Su
初期化されていない変数の初期化を無効にする
-d name
name で指定した名前を定義する
-m
マップファイルを作成する (デフォルトオフ)
-obj
Obj ファイルの出力ディレクトリ
-v
詳細表示モードオン(デフォルトオフ)
-I path1;path2 インクルードディレクトリの追加
-beep
コンパイル完了後にビープ音を出す(デフォルトオフ)
最適化
コードの最適化は、-O コマンドラインオプションと、#pragma で制御します。
最適化フラグ:
-O0
最適化をしません
-O1
一般的な最適化
-O2
グローバル最適化(ほとんどの場合は、この最適化を推奨します)
-Oa
最高度の最適化(コードを最小化し、いくつかの変数を削除します。これはデバ
ッグを難しくしますので、注意してください。)
-Op
結果が 16 ビットになる演算を、32 ビットで演算を行います(場合により、非常
に効果的な結果となります)
22
BoostC リファレンス
ブーストリンク・コマンドライン
ブーストリンクのコマンドラインオプションは、以下のものがあります。
書式:linker.exe [options] files
Options:
コマンドラインオプション
-t name
プ ロ セ ッ サ を name で 指 定 し た 、 タ ー ゲ ッ ト ( デ フ ォ ル ト 名
=PIC16F648A)にします。
-On
最適化レベル 0-1 の設定 (デフォルト n=1)
n=0 - 最適化無し
n=1 - パターン一致とバンクスイッチング最適化を有効にする
-v
詳細表示モード
-d path
プロジェクト出力のディレクトリの指定
-p name
マルチ obj ファイルをリンクする、プロジェクト(出力)名の指定
-ld path
ライブラリ検索ディレクトリの指定
-rb address
ROM ベース (開始)アドレスの指定
-rt address
ROM のトップ (終了)アドレスの指定
-swcs s1 s2 s3
ソフトウェアコールスタックの使用。ハードウェアスタックは、スタ
ックの深さ s1,s2,s3 を指定することにより割り当てられます(オプシ
ョン)
BoostC
s1:=main とタスクルーチンにハードウェアスタックを割り当てる
s2:ISR にハードウェアスタックを割り当てる
s3:PIC18 のロープライオリティ ISR にハードウェアスタックを割り
当てる
-isrnoshadow
ISR でシャドウレジスタを使用しない
-isrnocontext
ISR でコンテクストの保存/復元を行わない(PIC18 のみ)
-icd2
ICD2 を動作させるため、最初の ROM アドレスに NOP を追加する
-hexela
HEX ファイルに、拡張リニアアドレスを常に使用する
-beep
コンパイル完了後にビープ音を出す(デフォルトオフ)
ライブラリ作成用のスイッチ:
-lib
.obj ファイルから、ライブラリファイル.lib を作成する
-p name
プロジェクト名(ライブラリ出力ファイル名)を name にする
-rb
このコマンドラインオプションは、リンカが作成するコードの開始アドレスを指定します。
ブートローダを使用する場合は、ブートローダが ROM の下層のエリアに存在するため、
23
リ
フ
ァ
レ
ン
ス
BoostC リファレンス
開始アドレスを指定する必要があります。
使用例:
-rb 0x800
-swcs s1 s2 s3
このコマンドラインオプションは、リンカにハードウェア・コール・スタックに加えて、
ソフトウェア・コール・スタックを使用することを伝えます。このオプションは、PIC
のハードウェア・コール・スタックよりも深いサブルーチンコールを可能にします。ソ
フトウェア・コール・スタックを使った関数呼び出しは、戻り番地を格納するために、
追加の RAM を使用します。このオプションは、NOVO RTOS を使用する場合に指定する
必要があります。ハードウェアスタックは、深さのオプションを指定することにより、
効果的に利用されます。s1 の場合は、main と NOVO のタスク、s2 は ISR(割り込みサー
ビスルーチン)、s3 はロープライオリティ ISR(PIC18 のみ)で、ソフトウェア・コール・
スタックが、いつハードウェア・コール・スタックの代わりに使われるかを指定します。
ソフトウェア・コール・スタックは、コールツリーで、高い位置にある関数に適用され
ますので、低い位置のコールツリーは、依然ハードウェア・コール・ツリーを使用しま
す。ハードウェアスタックの深さが指定されなかった場合は、ソフトウェア・コール・
スタックは、NOVO RTOS の Sys_Yield()関数を含んでいるか、それを含んだ関数を呼び
出している関数にのみ適用されます。
BoostC
使用例:
リ
フ
ァ
レ
ン
ス
この例では、main 関数は、ハードウェア・コール・スタックの深さ 6 までを使用し、そ
-swcs 6 2
れ以上はソフトウェア・コール・スタックを使用します。割り込みルーチンは、ハード
ウェア・コール・スタックを、深さ 2 まで使用し、それ以降は、ソフトウェア・コール・
スタックとなります。ISR は、割り込みが発生したコードのポインタアドレスを保存す
るため、ハードウェア・コール・スタックの深さ 1 を使用します。そのため、この例で
は、ハードウェア・コール・スタックは、ISR 中のコールのために、残り1だけしか残
っていません。
-isrnoshadow
このコマンドラインスイッチは、リンカに、PIC18 のシャドウレジスタを、割り込みサ
ービスルーチン(ISR)のコンテクスト保存で使用しないことを伝えます。このオプショ
ンは、一部の PIC18 のシリコンバグを回避するために使用します。
24
BoostC リファレンス
-isrnocontext
このオプションは、PIC18 でのみ機能します。これを指定すると、隣家は、コンテキス
トの保存に余分なコードを追加しません。この機能は、プログラマが、独自の小さな ISR
コンテキスト保存コードを作成したり、あるいは使用しない場合に使われます。
使用例:
//コンテキスト保存の使用例
//ISR コードは w と bsr しか操作しないと仮定しています
//コンテキスト保存バッファを固定アドレスに作成します
char context[ 2 ]@0x0000;
void interrupt()
{
asm movff _bsr, _context
asm movwf _context+1
....
asm movwf _context+1
asm movff _bsr, _context
}
-icd2
ます。このオプションは、一部のデバイスで、Microchip ICD2 の動作を修正するために
使用されます。
BoostC
このオプションは、最初の ROM アドレス(通常は、アドレス 0)に NOP 命令を追加し
リ
フ
ァ
レ
ン
ス
-hexela
.HEX ファイルに対し、常に拡張リニアアドレスを使用します。このスイッチを使用しな
い場合は、拡張リニアアドレスは、.HEX ファイルで必要になったときのみ使用されます。
libc ライブラリ
プロジェクトがリンクされた時、ソースブースト IDE は、デフォルトの場所にライブラ
リがあれば、libc.pic16.lib または libc.pic18.lib をリンカのコマンドラインに渡します。
libc ライブラリは、乗算や除算、ダイナミックメモリアロケーションに必要なコードが含
まれています。また、文字列操作のコードも含まれています。
コードのエントリポイント
25
BoostC リファレンス
エントリポイントは、ブーストリンクで使われるコードアドレスの範囲に依存します。デ
フォルトでは、リンカは、使用可能な全てのコードスペースを使用しますが、開始アド
レスと終了アドレスを、コマンドラインから指定することも可能です。
PIC16 の場合:
リセット(main)エントリポイント
<code start>+0x00
割り込みエントリポイント
<code start>+0x04
PIC18 の場合:
リセット(main)エントリポイント
<code start>+0x00
割り込みエントリポイント
<code start>+0x08
低プライオリティ割り込みエントリポイント <code start>+0x18
プリプロセッサ
プリプロセッサ pp.exe はコンパイラにより自動的に起動されます。これは特別な命令を
評価する他、一連のパラメータ化されたテキスト代用と置き換え(マクロ処理)を実行
します。
全てのプリプロセッサ命令は、‟#‟で始まります。非標準の命令は、常に最初に ANS のキ
ーワードである#pragma で始めることにより、ほかのコンパイラへのポーティングや、
高度なソース解析ツール(lint、スタティックチェッカ、コードフォーマッタ、フローア
BoostC
リ
フ
ァ
レ
ン
ス
ナライザなど)でのコンフリクトを避けています。
組み込み定義マクロ
_BOOSTC
常に定義されています
_PIC16
PIC12 と PIC16 で定義されます
_PIC18
PIC18 で定義されます
26
BoostC リファレンス
プリプロセッサ命令
プリプロセッサで使用可能なプリプロセッサ命令には、以下の物が使用可能です。
#include
#define
#undef
#if
#else
#endif
#ifdef
#ifndef
#error
#warning
これらのコンパイラ命令は、以下のページで説明されています。
BoostC
リ
フ
ァ
レ
ン
ス
27
BoostC リファレンス
#include
シンタックス:
#include <filename.,h>
または
#include “filename.h”
エレメント:
filename は有効な PC ファイル名です。ファイルは標準のドライブ名
とパスを含むことができます。パスが与えられなかった場合は、以下
が適用されます:
a)もしファイル名が” ”で囲まれていたら、プロジェクトのファイル
を最初に検索します。
b)もし<>が使用されてたら、IDEのインクルードパスリストのみ
が、ファイルの検索に使用されます。
ファイルが見つからなかった場合、エラーが発生し、コンパイルシェ
ルが停止します。
目的:
filename.h に含まれているテキストは、コンパイル時に、ソース上で
この命令が置かれていた場所に、置換されます。
BoostC
使用例:
#include <system.h>
リ
フ
ァ
レ
ン
ス
28
BoostC リファレンス
#define
シンタックス:
#define id ステートメント
または
#define id (a,b,...) ステートメント
エレメント:
id は有効なプロセッサ識別子です。
ステートメントは、任意の有効なテキストです。
a,b,...はローカルプリプロセッサ識別子で、正規の関数のパラメータの
形式で与えられ、コンマによって区切られます。
目的:
どちらの形式も、id を与えられたテキストで置き換えます。置換は、
プログラム中で#define が記述された場所以降で行われます。
2 番目の形式は、プリプロセッサの仮想関数です。ローカル識別子は、
オリジナルテキストの場所に一致し、どこでそれが使われても、マク
ロに渡されるテキストに置換されます。
使用例:
BoostC
#define LEN 16
#define LOWNIBBLE(x) ((x) & 0x0F)
...
a=69;
le=a+LEN;
//le=a+16
b=LOWNIBBLE(a);
//b=a & 0x0F
リ
フ
ァ
レ
ン
ス
29
BoostC リファレンス
#undef
シンタックス:
#undef
id
エレメント:
id は、以前に#define で定義された、有効なプロセッサ識別子です。
目的:
この命令が現れたら、それ以降、id はプリプロセッサでは無効になり
ます。たとえば、これの後に、#ifdef id があれば、FALSE として評価
されます。
id は、別の値として再利用できることに注意してください。
使用例:
#define LEN 16
#define LOWNIBBLE(x) ((x) & 0x0F)
...
a=69;
le=a+LEN;
//le=a+16
#undef LEN
// LEN を無効にする
...
#define LEN 24
//LEN を再設定(これ以降は、LEN=24 となる)
BoostC
リ
フ
ァ
レ
ン
ス
30
BoostC リファレンス
#if,#else,endif
シンタックス:
#if expr
code
#else
code
#endif
エレメント:
expr は有効な表現式で、定数、標準演算子、プリプロセッサ識別子が
使用できます。
code は 1 つ以上の有効なソースコードの行です。
目的:
プリプロセッサは、定数表現式を評価し、ゼロでなければ、プロセッ
サはオプションの#else または#end の行まで処理をします。ゼロの場
合は、オプションの#else があれば、これ以降を処理します。
※expr には C の変数は使用できません!定数式と演算子のみが使用可能です。
使用例:
BoostC
//RAM 変数の初期化の値を変更する
#if STARDELAY > 20
slow=1;
#else
slow=0;
#endif
リ
フ
ァ
レ
ン
ス
31
BoostC リファレンス
#ifdef
シンタックス:
#ifdef
id
code
#endif
エレメント:
id は、任意の有効なプロセッサ識別子です。
code は 1 行以上の、有効な C のソースコードです。
目的:
この命令が現れたら、id がシンボルテーブルにあるかどうか(即ち、
#define ステートメントで定義されているかどうか)評価します。
id が定義されていた場合は、#ifdef と#endif(あるいは、存在すれば、
オプションの#else)の間のコードが処理されます。
それ以外の場合は、この間のコードは、プリプロセッサによって破棄
されます。
※id には C の変数は使用できません!#define で定義するプリプロセッサの識別
子のみが使用可能です。
BoostC
リ
フ
ァ
レ
ン
ス
使用例:
#define DEBUG
...
#ifdef DEBUG
printf("Reached test point #1");
#endif
32
BoostC リファレンス
#infdef
シンタックス:
#ifndef
id
code
#endif
エレメント:
id は、任意の有効なプロセッサ識別子です。
code は 1 行以上の、有効な C のソースコードです。
目的:
この命令が現れたら、id がシンボルテーブルにあるかどうか(即ち、
#define ステートメントで定義されているかどうか)評価します。
id が定義されていない場合は、#ifdef と#endif(あるいは、存在すれ
ば、オプションの#else)の間のコードが処理されます。
それ以外の場合は、この間のコードは、プリプロセッサによって破棄
されます。
※id には C の変数は使用できません!#define で定義するプリプロセッサの識別
子のみが使用可能です。
BoostC
使用例:
#ifndef DEBUG
printf("Debug disabled!");
#else
printf("Reached test point #1");
#endif
リ
フ
ァ
レ
ン
ス
33
BoostC リファレンス
#error
シンタックス:
#error text
エレメント:
text は、任意の有効なテキストです。
目的:
この命令が現れたら、エラーを発生して、コンパイルを停止します。
ユーザが指定した text は、情報メッセージとして表示されます。
この機能はプリプロセッサの構成の選択の一貫性をチェックするため
に、表現式をチェックする場合に便利です。この定義は、ソースコー
ドでも、インクルードファイルでも、
(あるいはコマンドラインでも)
、
定義することができます。
使用例:
#ifndef PWM_DEFAULT
#error "MUST define a default value for speed!"
#endif
BoostC
リ
フ
ァ
レ
ン
ス
34
BoostC リファレンス
#warning
シンタックス:
#warning text
エレメント:
text は、任意の有効なテキストです。
目的:
この命令が現れたら、プリプロセッサは、強制的に警告を出力します。
ユーザが指定した text は、情報メッセージとして表示されます。
この機能はプリプロセッサの構成の選択の一貫性をチェックするため
に、表現式をチェックする場合に便利です。この定義は、ソースコー
ドでも、インクルードファイルでも、
(あるいはコマンドラインでも)
、
定義することができます。
使用例:
#ifndef NODEADDR
#warning "NODEADDR not defined, will enter dynamic mode."
#endif
BoostC
リ
フ
ァ
レ
ン
ス
35
BoostC リファレンス
プラグマ命令
ブースト C のプリプロセッサ命令は、全て ANSI キーワードの#pragma の後に指定する
ため、ほかのコンパイラへのポーティングや、高度なソース解析ツール(lint、スタティ
ックチェッカ、コードフォーマッタ、フローアナライザなど)でのコンフリクトを避け
ることができます。
以下の命令は、プリプロセッサでサポートされている命令です。
#pragma
#pragma
#pragma
#pragma
DATA
config
CLOCK_FREQ
OPTIMIZE
それぞれの命令については、次ページ以降を参照してください。
BoostC
リ
フ
ァ
レ
ン
ス
36
BoostC リファレンス
#pragma DATA
シンタックス:
#pragma DATA addr,d1,d2,・・・
または
#pragma DATA addr,”abcdefg1”,”abcdefg2”,・・・
エレメント:
addr は、有効なメモリのアドレスです。
d1,d2,・・・は、8 ビットの整数定数です。
“abcdefgX”は、キャラクタ文字列で、キャラクタの ASCII 値が、8 ビ
ットの値として格納されます。
目的:
この命令で、ユーザデータを、特定のアドレスに配置することができ
ます。
典型的な使い方は、ターゲットのコンフィグレーションを指定するか、
ある伽リブレーション/設定データを、チップ上の EEPROM に設定
する使い方です。
使用例:
BoostC
//以下のコードは、バイト 10,11,116,101,115,116,0 を
// アドレス 0x200 番地から配置します
#pragma DATA 0x200, 0xA, 0xB, "test"
// PIC16 に、コンフィグレーションワードを設定します
#pragma DATA 0x2007, _HS_OSC & _WDT_OFF & _LVP_OFF
// EEPROM にデータを格納します
#pragma DATA 0x2100, 0x12, 0x34, 0x56, 0x78, "ABCD"
リ
フ
ァ
レ
ン
ス
37
BoostC リファレンス
#pragma CLOCK_FREQ
シンタックス:
#pragma CLOCK_FREQ Frequency_in_Hz
エレメント:
Frequency_in_Hz は、プロセッサのクロックスピードです。
目的:
CLOCK_FREQ 命令は、コンパイラに、どの周波数でプログラムが動
作しているかを伝えます。
ノート:リンカで生成される遅延関数は、この周波数に基づいていま
す。
使用例:
//20MHz のクロック周波数を設定します
#pragma CLOCK_FREQ 20000000
BoostC
リ
フ
ァ
レ
ン
ス
38
BoostC リファレンス
#pragma OPTIMIZE
シンタックス:
#pragma OPTIMIZE “Flags”
エレメント:
Flags は、コマンドラインでも使用する、最適化フラグです。
目的:
この命令は、新しい最適化を、関数レベルで設定します。
これはグローバルスコープで使用されなければなりません。そしてそ
れ以降の関数に繁栄されます。
プラグマの引数は、クオート( ” )で囲まなければならず、コンパイラの
コマンドラインの –O の引数と同じです。
空のクオートは、最適化レベルを、以前このプラグマで設定した最適
化レベルにリセットします。
以下は、現在設定可能な、最適化フラグです:
0
最適化無し、あるいは最小の最適化
1
通常の最適化(推奨)
a
最高の最適化
p
結果が 16 ビットになる演算を、32 ビットの演算で行なう
BoostC
使用例:
//Use aggressive optimization for function 'foo'
#pragma OPTIMIZE "a"
void foo()
{
...
}
リ
フ
ァ
レ
ン
ス
39
BoostC リファレンス
#pragma config
シンタックス:
#pragma config “option1”=”setting1”,”option2”=”setting2”,・・・
エレメント:
option は、ターゲットデバイスのオプションで、setting はオプション
の設定です。#pragma config では、複数のオプションの設定が可能で
す。
目的:
この命令では、ターゲットデバイ椅子のコンフィグレーション・オプ
ションが設定できます。
使用例:
//ウォッチドッグタイマとプリスケーラの設定
#pragma WDT=ON,WDTPS=128
//スタック・オーバーフロー・リセットを有効にする
#pragma STVR=ON
注意:#pragma config は、指定したコンフィグ・オプション・データを持つデバイスで
BoostC
のみ動作します。コンフィグレーションを行う別の方法として、#pragma DATA を使う
方法があります。詳しくは、#pragma DATA の項目を参照してください。
リ
フ
ァ
レ
ン
ス
40
BoostC リファレンス
デバイスのコンフィグレーション・オプション
ターゲットデバイスを正しく動作するようにプログラムするためには、デバイスのコンフ
ィグレーションを正しく設定する必要があります。たとえば、オシレータのコンフィグ
レーション設定が正しくないと、デバイスにクロックソースが無くなり、コードの実行
が不可能になってしまいます。コンフィグレーションデータは、#plagma DATA を使っ
て、設定することができます。
コンフィグレーション・オプションは、一般には、次の設定を行います。

オシレータの設定

ブラウンアウト・リセット

パワーアップ・リセット・タイマ

ウォッチドッグの設定

ペリフェラルの設定

ピンの設定

低電圧プログラミング

メモリの保護

テーブルリードの保護

スタックオーバーフローの扱い方法
実際のコンフィグレーションの設定は、実際のデバイスによって変わります。
オプションがあります。
リ
フ
ァ
レ
ン
ス
デバイス・コンフィグレーション・メソッド
デバイスのコンフィグレーションには、いくつかの方法があります。
1.
BoostC
PIC18 デバイスは、PIC16/PIC12 デバイスよりも、さらに多くのコンフィグレーション・
#pragma DATA を使って、ソースコードにコンフィグレーションのビットマスクを記
述する
2.
#pragma config を使用して、コンフィグレーションの設定をソースコードに記述する
3.
ソースコード開発環境やプログラマでコンフィグレーションを行う。たとえば、
Microchip 社の MPLAB には、”Configuration Bits”メニューがあり、ここでコンフィ
グレーション・ビットの設定を行うことができます。
設定方法は、
ターゲットデバイスによって異なります。PIC12 と PIC16 デバイスの場合は、
#pragma DATA を使って設定を行います。また、PIC18 デバイスでは、#pragma config
をサポートしていますが、一部の PIC18 ターゲットデバイスの場合は、#pragma DATA も
サポートしています。
推奨のコンフィグレーションの方法は、ソースコードの可読性を考慮して、可能な限り
#pragma config を使用する方法です。
41
BoostC リファレンス
コンフィグレーション・オプションの調べ方
ターゲットデバイス毎のコンフィグレーション・オプションは、ブースト C のターゲッ
トデバイスのヘッダファイル(PIC18xxx.h や PIC16xxxx.h)に記載されています。ヘッ
ダファイルは、ブースト C のインストールディレクトリ
“C:¥Program Files¥SourceBoost¥include”
にあります。
また、Microchip 社のデータシートでは、実際のオプションの詳しい説明を見ることがで
きます。
を使ったコンフィグレーション
コンフィグレーションデータは、あるデバイスでは、コンパイラ指令の#pragma config で
設定することができます。この指令は、一度に複数のオプションを設定することができま
す。
コンフィグレーションの設定例:
// PIC18F8720 Coniguration
// oscillator config
#pragma config OSC = ECIO, OSCS = OFF
BoostC
リ
フ
ァ
レ
ン
ス
// power and brown out config
#pragma config PWRT = OFF, BOR = ON, BORV = 27
#pragma config WDT = ON, WDTPS = 128
// Processor mode config
#pragma config MODE = MC, WAIT = OFF
// Miscellaneous config
#pragma config CCP2MUX = ON
#pragma config STVR = ON
#pragma config LVP = ON
#pragma config DEBUG = OFF
// Code
#pragma
#pragma
#pragma
protection
config CP0
config CP4
config CPB
// Write block
#pragma config
#pragma config
#pragma config
config
= OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF
= OFF, CP5 = OFF, CP6 = OFF, CP7 = OFF
= OFF, CPD = OFF
protection config
WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF
WRT4 = OFF, WRT5 = OFF, WRT6 = OFF, WRT7 = OFF
WRTB = OFF, WRTC = OFF, WRTD = OFF
// Table read block protection config
#pragma config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF
#pragma config EBTR4 = OFF, EBTR5 = OFF, EBTR6 = OFF, EBTR7 = OFF
#pragma config EBTRB = OFF
42
BoostC リファレンス
を使ったコンフィグレーション
デバイスによっては、コンパイラ指令の#pragma DATA を使って、コンフィグレーション
データを設定することができます。
#pragma DATA では、プログラミング・プロセスで実際にターゲットデバイスに書き込ま
れるデータを一般化した方法で記述します。この方法では、適切なアドレスとデータが、
ターゲットのコンフィグレーション・ビットの設定に使用されます。
コンフィグレーションの設定例1:
//PIC16F84A
#pragma DATA _CONFIG, _CP_OFF & _PWRTE_OFF & _WDT_OFF & _HS_OSC & _LVP_OFF
コンフィグレーションの設定例2:
_OSCS_OFF_1H & _HS_OSC_1H
_BOR_ON_2L & _BORV_20_2L & _PWRT_OFF_2L
_WDT_OFF_2H & _WDTPS_128_2H
_CCP2MX_ON_3H
_STVR_ON_4L & _LVP_OFF_4L & _DEBUG_OFF_4L
_CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L &
_CPB_OFF_5H & _CPD_OFF_5H
_WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L &
_WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H
_EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L &
_EBTRB_OFF_7H
BoostC
//PIC18F452
#pragma DATA _CONFIG1H,
#pragma DATA _CONFIG2L,
#pragma DATA _CONFIG2H,
#pragma DATA _CONFIG3H,
#pragma DATA _CONFIG4L,
#pragma DATA _CONFIG5L,
_CP3_OFF_5L
#pragma DATA _CONFIG5H,
#pragma DATA _CONFIG6L,
_WRT3_OFF_6L
#pragma DATA _CONFIG6H,
#pragma DATA _CONFIG7L,
_EBTR3_OFF_7L
#pragma DATA _CONFIG7H,
リ
フ
ァ
レ
ン
ス
EEPROM データのイニシャライズ
PIC のプログラムによっては、PIC の書き込み時に、EEPROM のデータも書き込む必要
がある場合があります。この初期化データは、ソースコードに含めることができます。
EEPROM の初期化データは、#pragma DATA を使って、設定することができます。
設定例:
//EEPROM を 0C 22 34 48 45 4C 4C 0F 00 FE 99 で初期化します。
#pragma DATA _EEPROM,12,34,56,"HELLO",0xFE,0b10011001
43
BoostC リファレンス
C 言語
このセクションでは、ブースト C で使用可能な、C 言語の機能について解説します。
以下の解説は、完全なC言語あるいは ANSI/ISO 仕様のマニュアルに代わるものではあ
りません。
以下の説明は、ブースト C を特定の PIC プラットホームに使用するための参照となるよ
うに書かれています。C 言語の言語仕様については、一般の C 言語の書籍をご参照下さ
い。
プログラム構造
ブースト C では、すべてのソースファイルは、汎用システムヘッダファイルをインクル
ードする必要があります。これはターゲットデバイス毎のヘッダファイル(ターゲット
固有のレジスタマップ変数を含む)に取って代わるもので、一部の内部関数プロトタイプ
は、コード生成と文字列操作関数のプロトタイプに必要になります。
書式:
#include <system.h>
BoostC
リ
フ
ァ
レ
ン
ス
唯一の例外は、ライブラリを作成するプロジェクトの場合です。ライブラリソースは、変
数定義の重複によるエラーを避けるため、どのようなシステムヘッダも含んではいけま
せん。
※デバイスの指定は、ソースブースト IDE の、プロジェクトのプロパティで設定できるので、ソースフ
ァイルでの指定は必要ありません。
44
BoostC リファレンス
データタイプ
ブースト C で使用可能なデータタイプは、データのサイズ(ビット数)で分類すると、
次のようになります。
サイズ
データタイプ
1 ビット
bit, bool
8 ビット
char,unsigned char,signed char
16 ビット
short,unsigned short,signed short
16 ビット
int,unsigned int,signed int
32 ビット
long,unsigned long,signed long
表:サイズ別のデータタイプ一覧
bit と bool データタイプの違いは、1 ビットを、ビットかブール演算に割り当てる長さで
す。ビット演算は、右辺の計算式の下位バイトで、ブール演算は、右辺の計算式の結果
を、bool にキャストします。
使用例:
45
BoostC
bool a;
bit b;
char x;
...
a = x & 2; // 'a'は'x'内のビット#1 が'false'に設定されない限り'true'なります
b = x & 2; // 'b'は式のビット#1 の結果となり、'x'の値にはよらず常に false です。
リ
フ
ァ
レ
ン
ス
BoostC リファレンス
構造体と共用体
構造体と共用体ともにサポートされています。
Typedef
typedef を使用することによって、
データタイプの新しい名前を定義することが可能です。
typedef unsigned char uchar;
Enum
Enum(列挙型)は、列挙されたデータタイプで、自動的に定義された、定数列を扱うこと
ができます。
Enum を宣言すると、リストの最初の定数シンボルに0を設定し、それに続く定数に、連
続した値(自動でインクリメントされる)を設定します。
ユーザはまた、最初の定数や、その他の定数に符号付の数値を設定することもできます。
BoostC
リ
フ
ァ
レ
ン
ス
数値を設定した場合は、それに続く定数の値は、同様にインクリメントされます。
enum タイプあるいは、typedef された定数のデータタイプは、ANSI によって定義され
ています。
enum ETypes { E_NONE=0, E_RED, E_GREEN, E_BLUE };
//これは以下の定義と同じ意味になります。
//#define E_NONE
0
//#define E_RED
1
//#define E_GREEN
2
//#define E_BLUE
3
コードサイズとデータタイプ
プログラムを作成する場合は、使用可能なデータタイプのうち、最小のサイズのデータタ
イプを使用するよう心がけてください。より大きいデータタイプを使用するにつれ、よ
り大きいコードが生成されます。マイクロコントローラは、使用できるメモリが限られ
ているため、この注意は、非常に重要です。また、ブースト C では、マイクロコントロ
ーラの制約上、8 ビット以外の演算は、ライブラリを使用することになります。ライブラ
リを使用する場合は、オーバヘッドが大きくなり、思わぬコードサイズの肥大化を招く
場合があります。また、処理速度にも影響が出ますので、可能な限り 8 ビットの変数を
使用するように心がけるようにしてください。
46
BoostC リファレンス
一般には、以下のようなルールに従ってください:
プログラムを作成する場合、
・ 変数は、標準で、char(8 ビットまたは byte)を使用する
・ 共通で使用する ADC の変換結果、カウンタ、拡張コアなどのデータには、shot また
は int(16 ビットまたは word)を使用する
・ 最終手段として、どうしても必要な場合のみ long を使用する
また、生成コード(より尐ない程度ですが)のサイズにも影響を与えるルールとして符号が
あります。できるだけ符号無しのデータタイプをご使用ください。符号無しの計算は、
符号付の計算より、小さいコードを生成します。
ROM
文字列や配列のデータは、プログラムメモリに配置することができます。このような変数
は、通常のデータタイプの宣言に加え、'rom'というキーワードを付けて宣言します。ROM
変数は、宣言中に初期化されなければなりません。
rom 変数は、次の何れかの方法で初期化されなければなりません。
rom char *text = "Test string"; //ゼロで終わる文字列
rom char *ptr = "¥0x64¥11¥12";
// 4 バイトデータ: 0x64, 0x0B, 0x0C, 0x00
rom char *data = { 0x64, 11, 12 }; //3 バイトデータ: 0x64, 0x0B, 0x0C
・ rom は、char 型のデータ型にのみ使用することができます。
・ rom と通常のデータクラス間では、暗黙のキャストは存在しません。ブースト C で
は、そのようなキャストに対して、明確なエラーは出しませんが、オペランドが、最
終的に元の型に戻されることを期待しています。
・ rom ポインタは、内部の制限により 8 ビットとなっています。そのため、定数配列
は、256 エレメントまでの制限があります。これは、小型のコアでの一般的な制約と
なっています。
・ rom ポインタは、[ ]を使う方法以外では、てアクセスすることはできません。また、
ランタイムの初期化時に、サブストリングで参照することはできません。rom 変数は、
常に宣言中に初期化されなければならない事に注意してください。
次の例は、ランタイムの初期化時の、間違った使用法の例です。
/* 次の例は、間違った使用例です。mystr 配列が ROM に配置される場合、ダイナミックにポ
インタを作成できないため、エラーとなります。*/
rom char *mystr = "Str_one ¥0 Str_two ¥0";
rom char *substr;
//ROM ポインタは宣言時に初期化が必要
substr = &mystr[OFFSET];
//正しくない
cc = substr[0];
//正しくない
cc = mystr[OFFSET];
// 正しい
47
BoostC
rom 変数には、次のようにいくつかの制限事項があることに注意してください。
リ
フ
ァ
レ
ン
ス
BoostC リファレンス
Volatile
Volatile は型修飾子で、変数と共に、次のような場合に使用されます:
a) 通常のプログラムフロー以外の場所から、変数が変更される
b) 演算式の中の過程の値を受け取ってはいけない
たとえば、ポートピンにビット変数が割り当てられている場合、これは volatile を宣言す
るのに、非常に良い条件となります。コードジェネレータは、volatile を含む表現式では、
通常のコードよりも、若干長いコードを生成します:
volatile bit [email protected]; //ポート B の pin1 にマップされたビット変数を宣言します
現時点では、コンパイラは volatile ビット変数に値を指示する式にのみ別のコードを生成
します。また volatile 変数は初期化するためのチェックはされていません。
static
グローバル変数、ローカル変数ともにスタティック変数として宣言可能です。 スコープ
は、カレントモジュール内に制限されています。
BoostC
リ
フ
ァ
レ
ン
ス
定数
定数は2進数、8進数、10進数と16進数が使用可能です。
定数の書式は、次の通りです。
書式
内容
0bXXXX or XXXXb
X が 1 か 0 である2進数
0XXXX
X が 0 から 7 の間の数字である 8 進数
XXXX
X が 0 から 9 の間の数字である 10 進数
0xXXXX
X が 0 から 9 の間または A と F である 16 進数
48
BoostC リファレンス
文字列
文字列は文字に関係なくエスケープシケンスを含める事ができます。
エスケープシケンスの書式は、次の通りです。
書式
内容
¥nn
10 進数 nn で指定された文字
¥xnn
16 進数 nn で指定された文字
¥a
0x7(警告)の値
¥b
0x8(バックスペース)の値
¥t
0x9 (水平タブ)の値
¥r
と 0xA (改行)の値
¥v
0xB (垂直タブタブ)の値
¥f
0xC (フォームフィード)の値
¥n
0xD (キャリッジリターン)の値
¥¥
0x5C (¥ 文字)の値
¥'
0x27 (' 文字)の値
¥"
と 0x22 (" 文字)の値
¥?
0x3F (? 文字)の値
BoostC
変数
変数は一般的な方法で宣言し、ANSI C の仕様に従って使用が可能です。リンカは特定の
アドレスに変数を設置します。リンカが呼び出しを分析し、スコープツリーを計算し、
競合しない変数を、同じアドレスに配置することもあります。これはデータメモリ使用
を最小限にするために、極めて効果的です。
レジスタマップ変数
変数は指定されたアドレスに設置させることが可能です。特定のアドレスに配置すること
で、レジスタマップ変数として使用することができます。この仕様は、C2C のものと同
様です。
char var@<addr>;
<addr>は 16 進または 2 進のアドレスです。このテクニックは、プログラム中から、ター
ゲットデバイスの特定レジスタにアクセスするのに使用されています。システムヘッダ
ファイルは、既にターゲット独自のレジスタの定義を含んでいるため、コード中で定義
49
リ
フ
ァ
レ
ン
ス
BoostC リファレンス
する必要はありません。
ビット変数もまたアドレス設定が可能です。アドレスにはビット位置が記入されます。ビ
ット変数には、次のようなフォームがあります。
bit b;
//変数はリンカが任意の位置に配置
bit [email protected]; //レジスタ 0x40 のビット1に変数を設定
bit b2@0x202;
//レジスタ 0x40(0x40x8+2)のビット 2 に変数を設定
ビットアクセス
ビット変数を除き、変数の独立ビットは、ドット演算子'.'を使用して、ビットアクセスが
可能です。
char var;
var.2 = 1; //変数'var'のビット 2 をセット
PORTB と portb の違いについて
PORTB と portb の違いは、
単なる大文字と小文字の違いではありません。
大文字で PORTB
BoostC
リ
フ
ァ
レ
ン
ス
と記述した場合は、ポート B のアドレスの数値を示しています。また、小文字で portb と
記述した場合は、アドレスにマップされた変数を表します。このため、ポート B にアクセ
スする場合は、小文字で portb と記述する必要があります。
#include <system.h>...
portb = 1; //ポート B に 1 を出力する
PORTB = 1; //コンパイラエラーとなる。PORTB はポート B のアドレスを示している。
//したがって、0x0006 = 1 と記述したことになり、エラーとなる。
配列
配列はどのような要素の番号も指定可能です。ただし、配列は、単一のレジスタバンクに
収まらなければなりません。
ポインタ
ポインタは一般的な方法で使用可能です。 唯一の例外は、rom 記憶領域修飾子が使用さ
れた場合で、この場合は[ ]を使ってのみ、アクセスする事ができます。
50
BoostC リファレンス
関数引数の文字列
関数が char *の引数を持つ場合、この引数を使って、文字列を引き渡すことができます。同じコ
ードブロックで、複数の呼び出しがある場合、コンパイラはその引数のためにアロケートされたメ
モリを再利用します。以下のコードの例では、一時メモリ文字列の"Date"と"Time"には、同じメ
モリが使用されます。
...
foo( "Date" );
foo( "Time" );
...
BoostC
リ
フ
ァ
レ
ン
ス
51
BoostC リファレンス
演算子
もし演算の結果が明示的にキャストされていない場合は、デフォルトで 16 ビットの精度
として計算されます。たとえば、次の例のような場合です:
long
l = a * 100 / b; //'a' と'b'は 16 ビットの long 変数です
乗算の値は 16 ビットの一時的な変数に保存され、b で割られます。そしてこの値は l に
保存されます。
この振る舞いは、-Op コンパイラコマンドラインオプションを使用することで、変更が可
能です。この最適化が同じ式で使われると、32bit の一時変数が使用され、b で割られた
結果は、32 ビットの値として l に保存されます。
算術演算子
+-*/%
BoostC
リ
フ
ァ
レ
ン
ス
++
--
算術演算子の例:
//+はバイナリの演算子で、2つのオペランドの、算術的な加算を生成します
c = a + b;
// または
c = 5 + 7; // 結果は、c = 12
//-はバイナリの演算子で、2つのオペランドの、算術的な減算を生成します
c = a -b;
// または
c = 18-12; // 結果は、c = 6
// ‘/’はバイナリの演算子で、2つのオペランドの、算術的な商を生成します
//すなわち、最初のオペランドの値を、次のオペランドで割ります。
c = a / b;
// または
c = 24 / 8; // 結果は、c = 3
//%はバイナリの演算子で、2つのオペランドの、算術的な剰余を生成します
c = a % b;
c = 25 % 8; //C=1
c = 17 % 3;
52
//C=2
BoostC リファレンス
//++は単項演算子で、オペランドのプリインクリメントもしくはポストインクリメントを
行います
x= 10;
c = x++;
//ポストインクリメント。x=11,c=10 となる
x= 10;
c = ++x; //プリインクリメント。x=11,c=11 となる
// --は単項演算子で、オペランドのプリデクリメントもしくはポストデクリメントを行い
ます
x= 10;
c = x--;
x= 10;
c = --x;
//ポストデクリメント。x=9,c=10 となる
//プリデクリメント。x=9,c=9 となる
BoostC
リ
フ
ァ
レ
ン
ス
53
BoostC リファレンス
代入演算子
=
+=
-=
*=
/=
%=
&=
|=
^=
<<=
>>=
代入演算子の例:
// =は代入演算子で、右辺の計算式の計算結果を、左辺の変数に代入する
x= 3;
// x は 3 に書き換えられる
c = 2+4; //x は 6 に書き換えられる
c = x+y; //x=12,y=16 とすると、c=28 となる
// +=は加算と代入を組み合わせた演算子で、右辺の計算式の計算結果を、左辺の変数に加算
する
x+= 2;
// x が 14 だったとすると、x は 16 となる
c+= x+y; //c=10,x=12,y=16 とすると、c=38 となる
// -=は減算と代入を組み合わせた演算子で、右辺の計算式の計算結果を左辺の変数から減算
する
x-= 2;
// x が 14 だったとすると、x は 12 となる
c-= x+y; //c=38,x=12,y=16 とすると、c=10 となる
// *=は乗算と代入を組み合わせた演算子で、右辺の計算式の計算結果を左辺の変数に乗算す
る
x*= 2;
// x が 14 だったとすると、x は 28 となる
c*= x+y; //c=10,x=12,y=16 とすると、c=280 となる
BoostC
// /=は除算と代入を組み合わせた演算子で、右辺の計算式の計算結果を左辺の変数から除算す
る
x/= 1;
// x が 14 だったとすると、x は 7 となる
c/= x+y; //c=280,x=12,y=16 とすると、c=10 となる
リ
フ
ァ
レ
ン
ス
54
BoostC リファレンス
比較演算子
==
!=
<
<=
>
>=
// ==は二項演算子で、右辺の計算式と左辺の計算式が一致するかを見る
if( x == y )
// c が初期値として 0 をもっており、
{
// x が 8、y が 8 だとすると
c = x+y;
// c の値は 16 になる
}
if( x == y )
// c が初期値として 0 をもっており、
{
// x が 8、y が 5 だとすると
c = x+y; // c の値は 0 のまま
}
// !=は二項演算子で、右辺の計算式と左辺の計算式が一致するかを見る
if( x != y )
// c が初期値として 0 をもっており、
{
// x が 8、y が 5 だとすると
c = x*y;
// c の値は 40 になる
}
if( x != y )
// c が初期値として 0 をもっており、
{
// x が 8、y が 8 だとすると
c = x*y; // c の値は 0 のまま
}
BoostC
// <は二項演算子で、左辺の計算式が右辺の計算式より小さいかどうかを見る
if( x < y )
// c が初期値として 0 をもっており、
{
// x が 40、y が 65 だとすると
c = y-x;
// c の値は 25 になる
}
リ
フ
ァ
レ
ン
ス
if( x < y )
{
// c が初期値として 0 をもっており、x が 65、y が 40 だとすると
c = y-x; // c の値は 0 のまま
}
55
BoostC リファレンス
// <= は二項演算子で、左辺の計算式が右辺の計算式以下かどうかを見る
if( x <= y )
// x が 22、y が 33 のとき
set_bit( PORTA , LED_bit );
// LED を ON
else
clear_bit( PORTA, LED_bit);
// 条件を満たしてないので、この箇所は実行さ
れない
if( x <= y )
// x が 15、y が 8 のとき
set_bit( PORTA , LED_bit );
//条件を満たしてないので、この箇所は実行されずに
else
clear_bit( PORTA, LED_bit);
// LED を OFF
if( x <= y )
// x が 46、y が 46 のとき
set_bit( PORTA , LED_bit );
// LED を ON
else
clear_bit( PORTA, LED_bit);
// 条件を満たしてないので、この箇所は実行
されない
// >は二項演算子で、左辺の計算式が右辺の計算式より大きいかどうかを見る
if( x > y )
// c が初期値として 0 をもっており、
{
// x が 28、y が 14 だとすると
c = y/x;
// c の値は 2 になる
}
if( x > y )
// c が初期値として 0 をもっており、
{
// x が 14、y が 28 だとすると
c = y/x; // c の値は 0 のまま
}
BoostC
リ
フ
ァ
レ
ン
ス
// <= は二項演算子で、左辺の計算式が右辺の計算式以上かどうかを見る
if( x >= y )
// x が 25、y が 10 のとき
set_bit( PORTA , LED_bit );
// LED を ON
else
clear_bit( PORTA, LED_bit);
// 条件を満たしてないので、この箇所は実行さ
れない
if( x >= y )
// x が 8、y が 15 のとき
set_bit( PORTA , LED_bit );
//条件を満たしてないので、この箇所は実行されずに
else
clear_bit( PORTA, LED_bit);
// LED を OFF
// <= は二項演算子で、左辺の計算式が右辺の計算式以下かどうかを見る
if( x >= y )
// x が 34、y が 34 のとき
set_bit( PORTA , LED_bit );
// LED を ON
else
clear_bit( PORTA, LED_bit);
されない
56
// 条件を満たしてないので、この箇所は実行
BoostC リファレンス
論理演算演算子
&&
||
!
// && は二項演算子で、両辺の条件が真(=条件が満たされている)かどうかを見る
if( (temp > 50 ) && (temp < 100) )
// temp が 70 だとすると
clear_bit( PORTA , ALARM_bit );
// アラームを OFF
else
set_bit( PORTA, LED_bit);
// 条件を満たしてないので、この箇所は実行されな
い
if( (temp > 50 ) && (temp < 100) )
// temp が 105 だとすると
clear_bit( PORTA , ALARM_bit ); //条件を満たしてないので、この箇所は実行され
ず
else
set_bit( PORTA, ALARM_bit);
// アラームを ON
if( (temp > 50 ) && (temp < 100) )
// temp が 25 だとすると
clear_bit( PORTA , ALARM_bit ); //条件を満たしてないので、この箇所は実行されず
else
set_bit( PORTA, ALARM_bit);
// アラームを ON
// || は二項演算子で、両辺のどちらかの条件が真かどうかを見るために使う
れない
if( (volt > 50 ) && (volt < 100) ) // volt が 105 だとすると
set_bit( PORTA , LED_bit );
//条件を満たしてないので、この箇所は実行されず
else
clear_bit( PORTA, LED_bit);
// アラームを ON
if( (volt > 50 ) && (volt < 100) ) // volt が 25 のとき
set_bit( PORTA , LED_bit );
//条件を満たしてないので、この箇所は実行されず
else
clear_bit( PORTA, LED_bit);
// アラームを ON
// ! は単項演算子で、評価式の真偽を反転するために使う
if( !( pressure < 120) )
clear_bit( PORTA , ALARM_bit );
else
set_bit( PORTA, ALARM _bit);
// pressure が 75 だとすると
// アラームを OFF
// 条件を満たしてないので、この箇所は実
行されない
if( !( pressure < 120) )
// pressure が 125 だとすると
clear _bit( PORTA , ALARM _bit ); //条件を満たしてないので、この箇所は実行さ
れず
else
set_bit( PORTA, ALARM _bit);
// アラームを ON
57
BoostC
if( (volt > 7 ) || (volt < 5) )
// volt が 8 だとすると
set_bit( PORTA , LED_bit );
// アラームを ON
else
clear_bit( PORTA, LED_bit);
// 条件を満たしてないので、この箇所は実行さ
リ
フ
ァ
レ
ン
ス
BoostC リファレンス
ビット演算子
&
|
^
~
<<
>>
// & は二項演算子で、二項の論理積(=AND)をとるために使う
if( !( pressure < 120) )
clear_bit( PORTA , ALARM_bit );
else
set_bit( PORTA, ALARM _bit);
// pressure が 75 だとすると
// アラームを OFF
// 条件を満たしてないので、この箇所は実行さ
れない
if( !( pressure < 120) )
// pressure が 125 だとすると
clear _bit( PORTA , ALARM _bit ); //条件を満たしてないので、この箇所は実行さ
れず
else
set_bit( PORTA, ALARM _bit);
// アラームを ON
// & は二項演算子で、二項の論理積(=AND)をとるために使う
c = x & y ;
// x が 14、y が 5 だとすると、c は 4 になる
x = y & 0x70;
// y が 0x0E だとすると、x は 0x06 になる
x = y & 0b11110001; // もし y が 0b10001111 だとすると、
// x は 0b10000001 になる
// | は二項演算子で、二項の論理和(=OR)をとるために使う
c = x | y ;
// x が 14、y が 5 だとすると、c は 15 になる
BoostC
リ
フ
ァ
レ
ン
ス
x = y | 0x70;
// y が 0x0E だとすると、x は 0x0F になる
x = y | 0b11110000; // もし y が 0b10001110 だとすると、
// x は 0b11111110 になる
// ^ は二項演算子で、二項の論理排他的論理和(=EXOR)をとるために使う
x = y ^ 0x07;
// y が 0x0E だとすると、x は 0x09 になる
x = y ^ 0b11111000; // もし y が 0b00011110 だとすると、
// x は 0b11100110 になる
// ~ は二項演算子で、二項の論理排他的論理和(=EXOR)をとるために使う
x = ~ y;
x = ~0b01010111;
// y が 0x0E だとすると、x は 0xF1 になる
// x は 0b10101000 になる
// << は二項演算子で、左辺を右辺分だけ左シフトする
c = x << y ;
x = y << 0x01;
// x が 14、y が 2 だとすると、c は 56 になる
// y が 0x0E だとすると、x は 0x1C になる
x = y << 0b00000010; // もし y が 0b00011110 だとすると、
// x は 0b01111000 になる
// >> は二項演算子で、左辺を右辺分だけ右シフトする
58
BoostC リファレンス
c = x >> y ;
x = y >> 0x01;
// x が 14、y が 2 だとすると、c は 3 になる
// y が 0x0E だとすると、x は 0x07 になる
x = y >> 0b00000010; // もし y が 0b00011110 だとすると、
// x は 0b00000111 になる
BoostC
リ
フ
ァ
レ
ン
ス
59
BoostC リファレンス
条件式
C 言語の以下の条件式が使用可能です。
if/else ステートメント
switch/case ステートメント
?: オペレータ
// if / else ステートメントは分岐を処理することができます。
// 式が真と評価されると、第一ステートメントが実行されます。
// 式が偽と評価されると、第二ステートメントが実行されます。
// 例 1:
if( x > y ) // x が 25、y が 10 であるとすると…
set_bit( PORTA, LED_bit ); // LED を ON
else
clear_bit( PORTA, LED_bit ); // LED を OFF
// 上記の例では、 LED は ON になります。
// 例 2:
if( x > y ) // x が 8、 y が 15 であるとすると…
set_bit( PORTA, LED_bit ); // LED を ON
else
clear_bit( PORTA, LED_bit ); // LED を OFF
// 上記の例では、LED は OFF になります。
BoostC
リ
フ
ァ
レ
ン
ス
// switch ステートメントは複数分岐を処理することができます。
// ある変数の値を見て、一致した先のステートメントを実行します。
// 例:
switch( weight )
{
case 5:
set_bit( PORTA, red_LED );
// 赤色 LED を ON
clear_bit( PORTA, green_LED ); // 緑色 LED を OFF
break;
case 10:
set_bit( PORTA, green_LED ); //緑色 LED を ON
clear_bit( PORTA, red_LED ); //赤色 LED を OFF
break;
default:
clear_bit( PORTA, green_LED ); //緑色 LED を OFF
clear_bit( PORTA, red_LED );
//赤色 LED を OFF
}
// 変数 'weight' が 5 ならば 赤色 LED を ON にし、緑色 LED を OFF にします。
// 変数 'weight' が 10 ならば 緑色 LED を ON にし、赤色 LED を OFF にします。
// 変数 'weight' が 5、10 以外ならば 緑色 LED、赤色 LED を両方 OFF にします。
60
BoostC リファレンス
ループ
C 言語の以下のループが使用可能です。
while
do/while
for
break
continue
goto
ループの例
// while はループ制御を行うステートメントです。It controls the execution of
// 評価式が真であり続ける限り、指定ブロック内のステートメントを実行し続けます。
// 評価式はループに入る前に評価され、真であればもう一度実行を行います。
// 評価式が評価時に偽であったなら、実行を停止します。
// 例:
while( number > 0 )
{
factorial *= number; // 変数 'factorial' は、ループ前に 1 に初期化されていると
仮定
--number;
}
// 変数 'number' が 3 ならば、ループの結果'factorial' は 6 になります。
// factorial = 3 x 2 x 1 ;
// 変数 'number' が 0 ならば、ループには入らないため'factorial' は 1 のままです。
// for はループ制御を行うステートメントです。
// ステートメントブロックが実行される回数を制御します。
// 一般的な構成としては、初期値、評価式、ループカウンタのという形をとります。
// 例:
for( volts = 0; volts < 7; volts++ )
{
sum += volts; // 変数 'sum' は 0 に初期化されていると仮定
}
// ループ終了時、 変数 ‘sum’ は 21 となります。
// break はループからの脱出に使用されます。
// 例:
61
BoostC
// do / while はループ制御を行うステートメントです。
// 評価式が真であり続ける限り、指定ブロック内のステートメントを実行し続けます。
// 評価式が末尾にあるため、ブロックは少なくとも 1 回は実行されます。
// 評価式が評価時に偽であったなら、実行を停止します。
// 例:
do
{
factorial *= number; // 変数 'factorial' は、ループ前に 1 に初期化されていると
仮定
--number;
} while( number > 0 );
// 変数が 'number' が 4 ならば、'factorial' は 24 になります。
// factorial = 4 x 3 x 2 x 1 ;
//変数 'number' が 0 ならば、'factorial' は 0 になります。
リ
フ
ァ
レ
ン
ス
BoostC リファレンス
for( volts = 0; volts < 7; volts++ )
{
if( volts == 5 )
break;
sum += volts; // 変数 'sum' は 0 に初期化されていると仮定
}.
// ループ終了時、 変数 ‘sum’ は 10 となります。
// continue は、 ループ中のステートメントから、
//for や while 中の評価式へジャンプするために使用されます。
// 例:
for( volts = 0; volts < 7; volts++ )
{
if( volts == 5 )
continue;
sum += volts; // 変数 'sum' は 0 に初期化されていると仮定
} .
// ループ終了時、 変数 ‘sum’ は 16 となります。
//変数 ‘sum’ が 0, 1, 2, 3, 4, & 6 のみ加算されるためです。
goto 文は、C 言語の場合、あまり推奨されていません。このオペレーションが有効な場合
は、ネストされたループから抜けだす時のみです。
BoostC
while( ... ){
while(...) {
while(...) {
goto exit;
}
}
}
exit:
リ
フ
ァ
レ
ン
ス
62
BoostC リファレンス
インラインアセンブラ
C 言語のソース中に、アセンブリ言語を使用するために、asm または_asm オペレータが
使用可能です。asm と_asm の違いは最適化を行わないか、行うかです。
特別な場合を除き、バンク切り替え/コードページ切り替えを行うコードはインラインア
センブラのコード内に加えないでください。リンカが適切なバンク切り替え/コードペー
ジ切り替えコードを追加するためです。以下に、asm オペレータと_asm オペレータが行
うコード変更の内容を示します。
asm
コードに以下のような影響を与えます
バンク切り替えが自動追加されます。
コードページ切り替えが自動的に追加されます。
_asm
コードに以下のような影響を与えます
バンク切り替えが自動追加されます。
コードページ切り替えが自動的に追加されます。
デッドコード(決して使われないコード)の除去を含めた、様々な最適化がおこな
アセンブラのオペレータは、単一行もしくは複数行モードで使用可能です。単一行モード
では、アセンブラ命令は asm または_asm と同じ行に記述します。
asm
nop
asm
{
nop
nop
nop
}
63
BoostC
れます。
リ
フ
ァ
レ
ン
ス
BoostC リファレンス
asm 内からの変数参照
インラインアセンブラから C 言語の変数を参照する場合は、アンダースコア('_')を変数
の先頭に付ける必要があります。C 言語の変数名が、アセンブリの'movlw'命令で使用さ
れている場合、この変数のアドレスは W にコピーされます。
また、ラベルには':'を後に付けてください。.
asm 内での定数表記
インラインアセンブラでは、10 進法と 16 進法のみがサポートされています。
XXXX
10 進表記。X は 0-9 の数字
0xXXXX
16 進表記。X は 0-9 の数字、または A-F のアルファベット
0bXXXX
2 進表記。X は 0 か 1
インラインアセンブリの例:
BoostC
リ
フ
ァ
レ
ン
ス
インラインアセンブリ内でビットテストとラベルを使用する例
#include <system.h>
void foo()
{
unsigned char i, b;
i = 0;
b = 12;
asm
{
start:
btfsc _i, 4
goto end
btfss _b, 0
goto iter
iter:
movlw 0
movwf _b
end:
}
}
64
BoostC リファレンス
// PIC18F8720 をターゲットデバイスとしたときの
// 整数型引数のバイト列にアクセスする方法を示す例
#include <system.h>
int GetTmr1Val()
{
int x;
asm
{
movf _tmr1h, W
movwf _x+1 ; write to high byte of variable x
movf _tmr1l, W
movwf _x ; write to low byte of variable x
}
return x;
}
BoostC
// インラインアセンブラ内から構造体のメンバにアクセスする方法を示す例
// データ構造体が更新された場合、メンバ count2 のオフセットが違う値になる
// ことがあります。これが生じると、本コードはうまく動かない可能性があります。
struct Stats {
unsigned int count0; // stored in bytes 0 & 1
unsigned char count1;// stored in byte 2
unsigned int count2; // stored in bytes 3 & 4
};
struct Stats myStats;
void AddCount2()
{
int x;
asm
{
movf _myStats+3, W
addlw 0x01
movwf _myStats+3
btfsc _status, C
incf _myStats+4,F
}
}
リ
フ
ァ
レ
ン
ス
ユーザデータ
ユーザデータは、アセンブラの'data'命令に続けて、コンマによって区切られた数値か文
字列を、現在の場所に配置することができます。
例:
//以下のコードはバイト 10,11,116,101,115,116,0 を現在のコードの場所に設置します
asm data 0xA, 0xB, "test"
65
BoostC リファレンス
関数
インライン関数
インライン関数として定義された関数は、呼び出しの度にコードに埋め込まれます。イン
ライン関数のボディは、そのような関数が呼び出される前に定義されていなくてはなり
ません。
ルーチン(返り値を持たず、引数 0 個以上持つ関数)は、インライン関数として使用する
のに最も適した関数といえます。ただし、引数として参照型を持つ場合は例外です。そ
ういった関数では、引数として渡された変数がオーバーロードされず、直接操作される
ためです:
inline void foo( char &port )
{
port = 0xFF; // a ポートの全てのピンをセット
}
※頻繁にインライン関数を使用すると、コードサイズが増大します。
特別な関数
BoostC
リ
フ
ァ
レ
ン
ス
ブースト C には、いくつかの特別な関数が使用されます。特別な関数には、次の物があ
ります。
void main( void )
main 関数は、プログラムのエントリポイントです。
void interrupt( void )
割り込みハンドラ (PIC18 の場合は、優先度の高い割り込みハンドラ)
void interrupt_low( void )
優先度の低い、割り込みハンドラ(PIC18 のみ)
66
BoostC リファレンス
関数と割り込み
一般的な関数は、スレッドセーフではありません。例えば、ある関数を実行中に、割り込
み内から、その関数が呼び出されると、関数内のローカル変数は保存されません。この
問題によるバグは発見/修正が非常に困難です。この問題を防ぐため、リンカは、同じ関
数をメイン関数と割り込みスレッドから呼び出すことを許可していません。もし同じ関
数を、両方のスレッドから使用したい場合は、関数のコピーを作り、違う名前を使用し
てください。
例)
//この関数はメインスレッドから呼び出されます
void foo()
{
...
}
//'foo'のコピーは割り込みスレッドから呼び出されます
void foo_interrupt()
{
...
}
BoostC
//割り込みスレッド
void interrupt( void )
{
...
foo_interrupt();
...
}
リ
フ
ァ
レ
ン
ス
//メインスレッド
void main( void ){
...
foo();
...
}
67
BoostC リファレンス
関数ポインタ
関数ポインタは、以下のような制限の下サポートされています:
関数ポインタの配列はサポートされません。
void foo1()
{
...
}
void foo2()
{
...
}
// 関数へのポインタ
void (*foo)();
// プログラムのエントリポイント
void main( void )
{
...
foo = foo1;
foo(); // foo1 が呼び出される
foo = foo2;
foo(); // foo2 が呼び出される
...
}
BoostC
リ
フ
ァ
レ
ン
ス
メモリマップ関数
変数として宣言される関数は、特定のアドレスに配置することができます。書式は、C2C
コンパイラと同様です。
void foo() @<addr>;
//ここで<addr>は、10 進または 16 進のアドレスです
この関数は、0x100 番地に配置されます
void foo1() @0x100
{
...
}
68
BoostC リファレンス
ダイナミックメモリマネジメント 動的メモリ管理
ダイナミックメモリマネジメントは、プログラム実行中に、オブジェクトを動的に生成、
削除することを可能にする機能です。この機能は、例えば、プログラム中に、いくつか
のデータパケットが必要な場合等に、大変有効です。これらのパケットのメモリは、コ
ンパイル時に確保することもできますが、確保されたメモリは、使用する/しないにか
かわらず、他の変数には使用されません。このような場合に有効なのが、ダイナミック
メモリアロケートの使用です。保存データのためのオブジェクトは、メモリが必要にな
った場合に生成され、データ処理が完了次第、削除されます。この方法を使うと、ター
ゲットデバイスのデータメモリを効率的に利用することができます。
アロケート可能なオブジェクトの量は、アプリケーションに依存します。アプリケーショ
ンがビルトされると、リンカは残ったメモリを、グローバル変数とローカル変数のヒー
プ領域に割り当てます。alloc 関数コールを利用し、メモリがランタイム中に確保される
場合、このヒープ領域を使用します。ヒープが大きければ大きいほど、一度に確保でき
るメモリの量が多くなります。
ダイナミックメモリマネジメントに使用できる関数は、次の物があります。
void* alloc( unsigned char size )
ダイナミックに'size'バイト分のメモリを確保します。最大のサイズは 127 バイトです。メ
BoostC
モリが確保できない場合、NULL を返します。
void free( void *ptr )
'alloc'によって確保されたメモリを解放します。
リ
フ
ァ
レ
ン
ス
言語スーパーセット
ブースト C コンパイラには、C++言語から流用した、次のような、いくつかの拡張仕様
があります。これらの機能により、柔軟で有用なコードを開発することができますが、
もちろん、この機能を使用しなくても、問題はありません。
69
BoostC リファレンス
関数の参照引数
関数の引数は、ある変数の参照として渡すことができます。参照変数が、呼び出し関数内
で変更された場合、呼び出し元の関数の変数も変化します。これは生成されたコードを
破壊せずに、データフローを作り変えるのに大変有効です。
例)
void foo( char &n) //'n'は参照変数{
n = 100;
}
void main( void )
{
char a = 0;
foo( a );
//呼び出しから戻ると、'a'は 100 の値を持つことになります
...
}
参照型を関数の引数として使用する場合の注意
参照型を用いて変数を渡すのに使用されているメカニズムは、以下の通りです。
・ 関数呼び出し時に変数データのコピーデータを作成
・ 呼び出し関数の処理が終わったら、コピーデータの内容をオリジナル変数に書き戻す
参照型を用いて大きな構造体を渡す場合、変数データのコピーを書き戻すために、大量の
BoostC
リ
フ
ァ
レ
ン
ス
コードが生成されます。また、volatile 型で宣言されている変数を参照型を用いて渡すと、
思わぬ挙動をする場合があります。volatile 型で宣言されているのにも関わらず、その変数
は関数の終了後にしか更新されないからです。
以上のことから、参照型を用いるさいの注意事項を示します:
・
大きなデータ構造体を参照型で渡さないでください。
・
volatile 型のデータを参照型で渡さないでください。
関数のオーバーロード
同一のアプリケーション内において、同じ名前をもつ関数を複数定義できます。
同じ名前を持つ関数は、引数の型や数が異なる必要があります:
例)
void foo( void )
{
...
}
void foo( char *ptr )
{
...
}
//'foo' その 1
//'foo' その 2
void foo( char a, char b )
70
//'foo' その 3
BoostC リファレンス
{
...
}
void main( void )
{
foo();
//'foo' その 1 が呼ばれます
foo( "test" ); //'foo' その 2 が呼ばれます
foo( 10, 20 ); //'foo' その 3 が呼ばれます
...
}
コンパイラは、名前衝突の防止のために、関数への内部参照を生成します。そして、引数
の数と型からどの関数を呼び出すのかを選択します。
関数テンプレート
関数テンプレートは、関数を、データタイププレースホルダを使用して宣言し、定義する
ことが可能です。この機能は、特定のデータタイプに依存しない、極めて一般的なコー
ド (例えばリンクリストなど)の記述を可能にします。またより重要な応用として、ヘッ
ダファイル形式の、ライブラリの作成が挙げられます。
書式)
template <class T>
void main( void )
{
short s;
foo<char>( "test" );
foo<short>( &s );
...
}
BoostC
void foo( T *t )
{
...
}
リ
フ
ァ
レ
ン
ス
//'foo( char* )' が呼ばれます
//'foo( short* )' が呼ばれます
パラメトリックタイミング関数
タイミング関数を使用しているソフトウェアの挙動は、クロック速度により内部処理が変
わります。クロック速度はハードウェアデザインと実装に依存するため、通常リンク時に
検知されます。一旦 CLOCK_FREQ プラグマにより正しい周波数が割り当てられると、こ
れをもとにタイミング関数が生成されます。
パラメトリックタイミング関数は BoostC でプログラミングを行う上で標準的に使用され
ます。
(ディレイに関する注意)
実際に供給されるディレイは、おおよそ指定した値ですが、若干大きくなる可能性があり
71
BoostC リファレンス
ます。例えば、遅延ルーチン実行中割り込みが入った場合、ディレイが指定値よりも大き
くなります。
ユーザが指定したクロック周波数では実際のディレイが大きく変わってしまいディレイオ
ーバーヘッドが大きくなる場合、単位遅延と遅延分解能がリンク時に表示されます。
ディレイオーバーヘッド
タイミング関数の呼び出しやリターン時に生じる遅延。
単位遅延
ディレイの合計が 1 だけが増えること。
遅延分解能
実際のディレイ増加が生じる前に増える遅延の量。遅延分解能が 4 の場合、ディレイ中
の増加を確認するために、ディレイ値が最大で 4 増える。
BoostC
リ
フ
ァ
レ
ン
ス
72
BoostC リファレンス
delay_us
書式:void delay_us( unsigned char t )
引数:
unsigned char t:遅延時間
戻り値:
なし
機能:
実行を、t マイクロ秒だけ遅らせます。boostc.h で宣言されています。 この関数はプロ
ジェクトがリンクされ、 CLOCK_FREQ プラグマにコントロールされる度に生成されま
す。 クロック振動数が低すぎて生成が物理学的に不可能な場合もあります。このような
場合はリンカが警告を発します。
BoostC
リ
フ
ァ
レ
ン
ス
73
BoostC リファレンス
delay_10us
書式:void delay_10us( unsigned char t )
引数:
unsigned char t :遅延時間
戻り値:
なし
機能:
実行を、t×10 マイクロ秒だけ遅らせます。boostc.h で宣言されています。 この関数は
プロジェクトがリンクされ、 CLOCK_FREQ プラグマにコントロールされる度に生成さ
れます。 クロック振動数が低すぎて生成が物理学的に不可能な場合もあります。このよ
うな場合は、リンカが警告を発します。
BoostC
リ
フ
ァ
レ
ン
ス
74
BoostC リファレンス
delay_100us
書式:void delay_100us( unsigned char t )
引数:
unsigned char t :遅延時間
戻り値:
なし
機能:
実行を、t×100 マイクロ秒だけ遅らせます。 boostc.h で宣言されています。 この関数
はプロジェクトがリンクされ、 CLOCK_FREQ プラグマにコントロールされる度に生成
されます。 クロック振動数が低すぎて生成が物理学的に不可能な場合もあります。この
ような場合は、リンカが警告を発します。
BoostC
リ
フ
ァ
レ
ン
ス
75
BoostC リファレンス
delay_ms
書式:void delay_ms( unsigned char t )
引数:
unsigned char t :遅延時間
戻り値:
なし
機能:
実行を、t ミリ秒だけ遅らせます。boostc.h で宣言されています。 この関数はプロジェ
クトがリンクされ、CLOCK_FREQ プラグマにコントロールされる度に生成されます。
BoostC
リ
フ
ァ
レ
ン
ス
76
BoostC リファレンス
delay_s
書式:void delay_s( unsigned char t )
引数:
unsigned char t :遅延時間
戻り値:
なし
機能:
実行を、t 秒だけ遅らせます。boostc.h で宣言されています。 この関数はプロジェクト
がリンクされ、CLOCK_FREQ プラグマにコントロールされる度に生成されます。
BoostC
リ
フ
ァ
レ
ン
ス
77
BoostC リファレンス
システムライブラリ
ブースト C のインストールには、いくつかの基本的な関数も含まれています。関数の数
は定まっていません。リリースごとに新しい関数が加えられ、増加する場合があります。
これらの関数のほとんどは、boostc.h に宣言されています。
※
を直接コードに含めてしまわないように、注意してください。
を含んでいる、
をイ
ンクルードすることを推奨します。
以下のページには、現在のリリースに含まれる、システム関数のリファレンスを示します。
これらの関数は、system.h をインクルードすることで、使用する事が可能です。
BoostC
リ
フ
ァ
レ
ン
ス
78
BoostC リファレンス
clear_bit
書式:clear_bit( var, num )
引数:
var:対象となる変数
num:ビット番号
戻り値:
なし
機能:
変数 'var'のビット'num' をクリアします。boostc.h で宣言されています。
この関数は、マクロで定義されています。
BoostC
リ
フ
ァ
レ
ン
ス
79
BoostC リファレンス
set_bit
書式:set_bit( var, num )
引数:
var:対象となる変数
num:ビット番号
戻り値:
なし
機能:
変数 'var'のビット'num' をセットします。boostc.h で宣言されています。
この関数は、マクロで定義されています。
BoostC
リ
フ
ァ
レ
ン
ス
80
BoostC リファレンス
test_bit
書式:test_bit( var, num )
var:対象となる変数
num:ビット番号
戻り値:
0:対象変数の対象ビットはセットされていない
1:対象変数の対象ビットがセットされている
機能:
変数'var'内のビット'num'が設定されているかテストします。boostc.h で宣言されていま
す。
この関数は、マクロで定義されています。
BoostC
リ
フ
ァ
レ
ン
ス
81
BoostC リファレンス
MAKESHORT
書式:MAKESHORT( dst, lobyte, hibyte )
引数:
dst:結果の保存先
lobyte:下位バイトの値
hibyte:上位バイトの値
戻り値:
なし
機能:
二つの 8 ビットの値(下位バイト'lobyte'と上位バイト'hibyte')から 16 ビットの値 ('dst'に
保存)を作ります。'dst'は 16 ビットの値の変数でなければなりません。boostc.h で宣言さ
れています。
この関数は、マクロで定義されています。
BoostC
リ
フ
ァ
レ
ン
ス
例:
unsigned short res;
MAKESHORT( res, adresl, adresh );
// adresh と adresh レジスタから 16 ビット値を生成
// res に保存
82
BoostC リファレンス
LOBYTE
書式:LOBYTE( dst, src )
引数:
dst:結果の保存先
src :ソースデータ
戻り値:
なし
機能:
'src'の下位バイトを取得し、'dst'に書き込みます。boostc.h で宣言されています。
この関数は、マクロで定義されています。
BoostC
リ
フ
ァ
レ
ン
ス
83
BoostC リファレンス
HIBYTE
書式:HIBYTE( dst, src )
引数:
dst:結果の保存先
src :ソースデータ
戻り値:
機能:
'src'から上位バイトを取得し、'dst'に書き込みます。'src'は 16 ビットの変数でなければな
りません。boostc.h で宣言されています。
この関数は、マクロで定義されています。
BoostC
リ
フ
ァ
レ
ン
ス
84
BoostC リファレンス
nop
書式:void nop( void )
引数:
なし
戻り値:
なし
機能:
nop 命令を生成します。boostc.h で宣言されています。
この関数は、インライン関数です。
BoostC
リ
フ
ァ
レ
ン
ス
85
BoostC リファレンス
clear_wdt
書式:void clear_wdt( void )
引数:
なし
戻り値:
なし
機能:
clrwdt 命令を生成します。boostc.h で宣言されています。
この関数は、インライン関数です。
BoostC
リ
フ
ァ
レ
ン
ス
86
BoostC リファレンス
sleep
書式:void sleep( void )
引数:
なし
戻り値:
なし
機能:
'sleep 命令を生成します。boostc.h で宣言されています。
この関数は、インライン関数です。
BoostC
リ
フ
ァ
レ
ン
ス
87
BoostC リファレンス
reset
書式:void sleep( void )
引数:
なし
戻り値:
なし
機能:
ソフトウェア・リセットを行うインライン関数です。ハードウェア・リセットとは、レジ
スタの初期値が異なる点に注意してください。boostc.h で宣言されています。
BoostC
リ
フ
ァ
レ
ン
ス
88
BoostC リファレンス
文字列操作関数
strcpy、strncpy
書式:
void strcpy( char *dst, const char *src )
void strcpy( char *dst,rom char *src )
void strncpy( char *dst, const char *src, char len)
void strncpy( char *dst,rom char *src, char len)
引数:
char *dst:コピー先バッファ
rom char *src:コピー元の文字列
len コピー元から読み込む文字列の長さ
戻り値:
なし
0 でターミネイトされている文字列 src を、格納先バッファ dst にコピーします。格納先
バッファは、文字列が入る大きさがなければなりません。string.h で宣言されています。
89
BoostC
機能:
リ
フ
ァ
レ
ン
ス
BoostC リファレンス
strlen
書式:
unsigned char strlen(const char *src )
unsigned char strlen(rom char *src )
引数:
rom char *src:文字列のポインタ
戻り値:
なし
機能:
文字列の長さを返します。string.h で宣言されています。
BoostC
リ
フ
ァ
レ
ン
ス
90
BoostC リファレンス
strcmp/stricmp
書式:
signed char strcmp( rom char *src1, rom char *src2 )
signed char strcmp( const char *src1,const char *src2 )
signed char strcmp( rom char *src1, const char *src2 )
signed char strcmp( const char *src1, rom char *src2 )
signed char stricmp( const char *src1, const char *src2 )
signed char stricmp( rom char *src1, const char *src2 )
signed char stricmp( const char *src1, rom char *src2 )
signed char stricmp( rom char *src1, rom char *src2 )
引数:
rom char *src1, rom char *src2 :文字列のポインタ
戻り値:
BoostC
-1:src1<src2
0:src1==src2
1:src1>src2
機能:
文字列を比較します。もし文字列#1 が文字列#2 より小さい場合は-1 を返し、文字列 #1
より文字列#2 が大きい場合は1を、
文字列#1 が文字列#2 と同じの場合は 0 を返します。
stricmp 関数は、文字列の比較を行う前に文字列を全て小文字に変換します。 string.h
で宣言されています。
91
リ
フ
ァ
レ
ン
ス
BoostC リファレンス
strncmp
書式:
signed char strncmp( char *src1, char *src2, unsigned char len )
signed char strncmp( rom char *src1, char *src2, unsigned char len )
signed char strncmp( char *src1, rom char *src2, unsigned char len )
signed char strncmp( rom char *src1, rom char *src2, unsigned char len )
signed char strnicmp( char *src1, char *src2, unsigned char len )
signed char strnicmp( rom char *src1, char *src2, unsigned char len )
signed char strnicmp( char *src1, rom char *src2, unsigned char len )
signed char strnicmp( rom char *src1, rom char *src2, unsigned char len )
引数:
rom char *src1, rom char *src2:文字列のポインタ
unsigned char len :比較する長さ
戻り値:
-1:src1<src2
BoostC
リ
フ
ァ
レ
ン
ス
0:src1==src2
1:src1>src2
機能:
文字列の、最初の len 文字分だけ比較します。もし文字列#1 が文字列#2 より小さかった
とき-1 を返し、文字列 #1 より文字列#2 が大きかった場合は、1を返します。文字列#1
が文字列#2 と同じの場合 0 を返します。strnicmp 関数は、文字列の比較を行う前に文字
列を全て小文字に変換します。
string.h で宣言されています。
92
BoostC リファレンス
strcat/strncat
書式:
void strcat( char *dst, const char *src )
void strcat( char *dst, rom char *src )
void strncat( char *dst, const char *src, unsigned char len )
void strncat( char *dst, rom char *src, unsigned char len )
引数:
char *dst:ターゲットの文字列
rom char *src:追加する文字列
len : 追加する文字列の長さ
戻り値:
なし
機能:
0 でターミネイトされている文字列 src を、格納先文字列 dst に付加します。格納先バッ
len 文字分のみを dst に追加します。string.h で宣言されています。
BoostC
ファは、文字列が入りきる大きさでなければなりません。strncat の場合は、src の先頭
リ
フ
ァ
レ
ン
ス
93
BoostC リファレンス
strpbrk
書式:
char* strpbrk( const char *src1, const char *src2 )
char* strpbrk( const char *src1, rom char *src2 )
引数:
rom/const char *src1:ターゲットの文字列
rom/const char *src2:検索文字郡
戻り値:
文字郡 src2 に含まれる src1 中の文字が最初に現れる char 型ポインタ。
存在しないならば NULL
機能:
文字列 src1 を先頭から検索し、
文字群 src2 に含まれるいずれかの文字が存在するならば、
その文字が見つかった最初のポインタを返します。文字群 src2 中の文字が src1 に存在し
ないならば、NULL を返します。string.h で宣言されています。
BoostC
リ
フ
ァ
レ
ン
ス
94
BoostC リファレンス
strcspn
書式:
unsigned char strcspn( const char *src1, const char *src2 )
unsigned char strcspn( rom char *src1, const char *src2 )
unsigned char strcspn( const char *src1, rom char *src2 )
unsigned char strcspn( rom char *src1, rom char *src2 )
引数:
rom/const char *src1:ターゲットの文字列
rom/const char *src2:検索文字群
戻り値:
文字群 src2 のいずれかが見つかるまでの、文字列 src1 の長さ
機能:
文字列 src1 を先頭から検索し、文字群 src2 のいずれかが見つかるまでの長さを返します。
格納先文字列 dst に付加します。格納先バッファは、文字列が入りきる大きさでなければな
りません。string.h で宣言されています。
BoostC
リ
フ
ァ
レ
ン
ス
95
BoostC リファレンス
strspn
書式:
unsigned char strspn( const char *src1, const char *src2 )
unsigned char strspn( rom char *src1, const char *src2 )
unsigned char strspn( const char *src1, rom char *src2 )
unsigned char strspn( rom char *src1, rom char *src2 )
引数:
rom/const char *src1:ターゲットの文字列
rom/const char *src2:検索文字群
戻り値:
文字群 src2 のいずれかが連続する文字列 src1 の長さ
機能:
文字列 src1 を先頭から検索し、文字群 src2 のいずれかが連続する長さを返します。文字
群 src2 に含まれない文字が出てきた時点で長さのカウントは終了します。string.h で宣
BoostC
言されています。
リ
フ
ァ
レ
ン
ス
96
BoostC リファレンス
strtok
書式:
char* strtok( const char *src1, const char *src2 )
char* strtok( const char *src1, rom char *src2 )
引数:
rom/const char *src1:ターゲットの文字列
rom/const char *src2:区切り文字群
戻り値:
区切り文字群 src2 に含まれるいずれかの文字によりターゲット文字列 src1 を分解したト
ークン
機能:
区切り文字群 src2 のいずれかの文字により、ターゲット文字列 src1 を分解したトークン
を返します。
2 つ目以降のトークンを読み込むには、第 1 引数 src1 を NULL にして引き続き strtok 関
るためです。string.h で宣言されています。
BoostC
数を呼び出してください。Strtok 関数の内部記憶に src1 分解後の文字列が格納されてい
リ
フ
ァ
レ
ン
ス
97
BoostC リファレンス
strchr
書式:
char* strchr( const char *src, char ch )
引数:
const *src:ターゲットの文字列
char ch:検索文字
戻り値:
文字列 src 先頭から検索し、文字 ch が初めて見つかった位置のアドレス
NULL:文字 ch が見つからなかったとき
機能:
文字列 src を先頭から検索し、文字 ch が初めて見つかった位置のポインタを返します。
文字 ch が文字列 src に含まれない場合は、NULL を返します。string.h で宣言されてい
ます。
BoostC
リ
フ
ァ
レ
ン
ス
98
BoostC リファレンス
strrchr
書式:
char* strrchr( const char *src, char ch )
引数:
const *src:ターゲットの文字列
char ch:検索文字
戻り値:
文字列 src 先頭から検索し、文字 ch が最後に見つかった位置のアドレス
NULL:文字 ch が見つからなかったとき
機能:
文字列を src 先頭から検索し、文字 ch が最後に見つかった位置のポインタを返します。
文字 ch が文字列 src に含まれない場合は、NULL を返します。string.h で宣言されてい
ます。
BoostC
リ
フ
ァ
レ
ン
ス
99
BoostC リファレンス
strstr
書式:
char* strstr( const char *src1, const char *src2 )
char* strstr( const char *src1, rom char *src2 )
引数:
const/rom char *src1:ターゲットの文字列
const/rom char *src2:検索文字列
戻り値:
文字列 src 先頭から検索し、文字列 src1 が最初に見つかった位置のアドレス
NULL:文字列 src2 が見つからなかったとき
機能:
文字列 src1 を先頭から検索し、文字列 src2 が最初に見つかった位置のポインタを返しま
す。文字列 src2 が文字列 src1 に含まれない場合は、NULL を返します。string.h で宣言
BoostC
されています。
リ
フ
ァ
レ
ン
ス
100
BoostC リファレンス
入出力関数
処理の結果 ASCII コード列をバッファ内に記憶する入出力関数を使うときは、十分なバッ
ファサイズが確保されているかを確認してください。最悪の場合、他のメモリ領域を上書
きしてしまう恐れがあります。バッファとして必要なのは、処理結果として生成される文
字列と NULL 文字を格納できるサイズのものです。
BoostC
リ
フ
ァ
レ
ン
ス
101
BoostC リファレンス
sprintf
書式
unsigned char sprintf( char* buffer, const char *format, unsigned val )
引数
char * buffer : 生成した文字列の格納先
char * format: フォーマット文字列
int val: フォーマット文字列に変換したい数値
返り値
成功時:buffer に格納した文字数
失敗時:EOF
説明
数値 val を指定されたフォーマット文字列として出力します。バッファは処理結果として
生成される文字列よりも長い必要があります。数値の出力は spirnf 関数の実行 1 回につき、
1 つしか行えません。この関数は、stdio.h で宣言されています。フォーマット文字列中の
形式は以下のようになっています:
%[フラグ][幅][機能指定文字]
BoostC
フラグ
リ
フ
ァ
レ
ン
ス
-
左詰めで表示。デフォルトは右詰め
+
出力を符号付きで表示。+または-が表示される
フラグ
スペース
0
説明
正の数の時、頭にスペースを入れる
数値を 0 詰めで表示する
幅
フラグ
102
説明
o
符号なしの 8 進数で表示
d
符号付きの 10 進数で表示
u
符号なしの 10 進数で表示
x
符号なしの 16 進数で表示
b
符号なしの 2 進数で表示
BoostC リファレンス
使用例
機能指定文字
出力例
説明
“%d”
“-120”
符号付 10 進整数
“%u”
“150”
符号なし 10 進整数
“%o”
“773”
符号なし 8 進整数
“%X”
“ABF1”
符号なし 16 進整数
“%b”
“101101”
符号なし 2 進整数
行端揃え
“%8d”
出力例
説明
”
“231
左詰め出力で、後ろを 8 文字の長さをもつように
スペースで埋める
“%016u”
“%-8b”
“0000000000045102”
“
10
16 文字の長さをもつように 0 で埋めて左詰め出力
8 文字の長さを持つように右詰め出力
BoostC
リ
フ
ァ
レ
ン
ス
103
BoostC リファレンス
表記
“%+8d”
出力例
“+972
説明
”
左詰め出力で、後ろを 8 文字の長さをもつように
スペースで埋める。符号が常に表示される
“% 8d”
“ 765
” 左詰め出力で、後ろを 8 文字の長さをもつように
スペースで埋める。符号は表示されず、スペースとして出力
符号付表示は 10 進数にのみ適応されます。
フィールド幅の実装は、標準的なものと異なっています。 行端の揃え幅が指定されると、
実際の出力幅は埋められるか切り捨てられるかして指定された出力幅に変更されます。こ
のとき、一番大きな桁や、符号が切り捨てられる可能性があります。標準的な実装では、
出力を切り捨てたりはしませんが、その代わりに予期せぬバッファオーバーランを生じさ
せる可能性があります。
BoostC
リ
フ
ァ
レ
ン
ス
104
BoostC リファレンス
sprintf32
書式:
unsigned char sprintf32( char* buffer, const char *format, unsigned long val )
引数:
char * buffer : 生成した文字列の格納先
char * format: フォーマット文字列
int val: フォーマット文字列に変換したい数値
戻り値:
成功時:buffer に格納した文字数
失敗時:EOF
機能:
数値 val を指定されたフォーマット文字列として出力します。バッファは処理結果として
生成される文字列よりも長い必要があります。数値の出力は spirnf 関数の実行 1 回につき、
1 つしか行えません。この関数は、stdio.h で宣言されています。
この関数は sprintf と同様の使い方ですが、32bit 値を扱います。また、”%i” 基数指定子
BoostC
をサポートしています。これは “%d” と同様に動作します。
リ
フ
ァ
レ
ン
ス
105
BoostC リファレンス
strtoi/strtol
書式:
int strtoi( const char* buffer, char** endPtr, unsigned char radix )
long strtol( const char* buffer, char** endPtr, unsigned char radix );
引数:
const char *buffer:ターゲットの文字列
const char **endPtr:変換終了時のアドレス
unsigned char radix : 変換に使用する基数 (2 -26)
戻り値:
buffer を数値に変換した値
機能:
入力文字列 buffer を、指定した基数 radix の整数列とみなし、数値に変換して返します。
endPtr には最後に変換が行われたアドレスが格納されます。変換終了時のアドレスが必要
ないときには、endPtr を NULL に指定しても構いません。strtoi は変換後の数値が 16bit
BoostC
に、strtol は変換後の数値が 32bit になります。stdlib.h で宣言されています。
リ
フ
ァ
レ
ン
ス
106
BoostC リファレンス
atoi/atol
書式:
int atoi( const char* buffer )
long atol( const char* buffer )
引数:
const char *buffer:ターゲットの文字列
戻り値:
buffer を数値に変換した値
機能:
入力文字列 buffer を、10 進数の整数列とみなし、数値に変換して返します。atoi は変換後
の数値が 16bit に、
atol は変換後の数値が 32bit になります。
stdlib.h で宣言されています。
BoostC
リ
フ
ァ
レ
ン
ス
107
BoostC リファレンス
itoa/ltoa
書式:
char* itoa( int val, char* buffer, unsigned char radix )
char* ltoa( long val, char* buffer, unsigned char radix )
引数:
int/long val : ターゲットの数値
const char *buffer:格納先文字列
unsigned char radix : 変換に使用する基数 (2 -26)
戻り値:
成功時:buffer に格納した文字列
失敗時:EOF
機能:
入力数値 val を、指定した基数 radix の整数列とみなし、文字列 buffer に変換、格納しま
す。返り値は buffer に格納された文字列と同様のものです。itoa は入力数値を 16bit とし
て、ltoi は入力数値が 32bit として変換されます。stdlib.h で宣言されています。
BoostC
リ
フ
ァ
レ
ン
ス
108
BoostC リファレンス
sqrt
書式:
unsigned char sqrt( unsigned short val )
引数:
unsigned short val:ターゲット数値
戻り値:
ターゲット数値 val のルートを取った整数。
機能:
数値 val の平方根を計算し、整数として返します。stdlib.h で宣言されています。
BoostC
リ
フ
ァ
レ
ン
ス
109
BoostC リファレンス
簡易入出力関数
標準入出力関数は、ROM、RAM、実行時間を犠牲にして非常に柔軟に実装されています。
小さな RAM や ROM しか持たない場合や、より速く実行したい場合には、以下に示す簡易
入出力関数が有用かもしれません。
BoostC
リ
フ
ァ
レ
ン
ス
110
BoostC リファレンス
uitoa_hex
書式:
void uitoa_hex( char* buffer, unsigned int val, unsigned char digits )
引数:
unsigned int val : ターゲット数値
const char *buffer:格納先文字列
unsigned char digits : 変換後の桁数
戻り値:
なし
機能:
符号無し 16bit 整数 val を、桁数が digit で指定された ASCII コードの 16 進文字列に変換、
格納します。stdlib.h で宣言されています。
BoostC
リ
フ
ァ
レ
ン
ス
111
BoostC リファレンス
uitoa_bin
書式:
void uitoa_bin( char* buffer, unsigned int val, unsigned char digits )
引数:
unsigned int val : ターゲット数値
const char *buffer:格納先文字列
unsigned char digits : 変換後の桁数
戻り値:
なし
機能:
符号無し 16bit 整数 val を、桁数が digit で指定された ASCII コードの 2 進文字列に変換、
格納します。stdlib.h で宣言されています。
BoostC
リ
フ
ァ
レ
ン
ス
112
BoostC リファレンス
uitoa_dec
書式:
void uitoa_dec( char* buffer, unsigned int val, unsigned char digits )
引数:
unsigned int val : ターゲット数値
const char *buffer:格納先文字列
unsigned char digits : 変換後の桁数
戻り値:
なし
機能:
符号無し 16bit 整数 val を、
桁数が digit で指定された ASCII コードの 10 進文字列に変換、
格納します。stdlib.h で宣言されています。
BoostC
リ
フ
ァ
レ
ン
ス
113
BoostC リファレンス
atoui_hex
書式:
unsigned int atoui_hex( const char* buffer )
引数:
const char *buffer:ターゲットの文字列
戻り値:
buffer を数値に変換した値
機能:
入力文字列 buffer を、16 進数の整数列とみなし、数値に変換して返します。atoi は変換後
の数値は符号無し 16bit 整数となります。stdlib.h で宣言されています。
BoostC
リ
フ
ァ
レ
ン
ス
114
BoostC リファレンス
atoui_bin
書式:
unsigned int atoui_bin( const char* buffer )
引数:
const char *buffer:ターゲットの文字列
戻り値:
buffer を数値に変換した値
機能:
入力文字列 buffer を、2 進数の整数列とみなし、数値に変換して返します。atoi は変換後
の数値は符号無し 16bit 整数となります。stdlib.h で宣言されています。
BoostC
リ
フ
ァ
レ
ン
ス
115
BoostC リファレンス
atoui_dec
書式:
unsigned int atoui_dec( const char* buffer)
引数:
const char *buffer:ターゲットの文字列
戻り値:
buffer を数値に変換した値
機能:
入力文字列 buffer を、10 進数の整数列とみなし、数値に変換して返します。atoi は変換後
の数値は符号無し 16bit 整数となります。stdlib.h で宣言されています。
BoostC
リ
フ
ァ
レ
ン
ス
116
BoostC リファレンス
sqrt1
書式:
unsigned char sqrt1( unsigned short val )
引数:
unsigned short val:ターゲット数値
戻り値:
ターゲット数値 val のルートを取った整数。
機能:
数値 val の平方根を計算し、符号無し 16bit 整数として返します。stdlib.h で宣言されてい
ます。
BoostC
リ
フ
ァ
レ
ン
ス
117
BoostC リファレンス
文字操作関数
toupper
書式:
char toupper( char ch )
引数:
char ch:入力文字
戻り値:
入力文字を、大文字に変換した文字
機能:
小文字を大文字に変更します。ctype.h で宣言されています。
BoostC
リ
フ
ァ
レ
ン
ス
118
BoostC リファレンス
tolower
書式:
char tolower( char ch )
引数:
char ch:入力文字
戻り値:
入力文字を、小文字に変換した文字
機能:
大文字を小文字に変更します。ctype.h で宣言されています。
BoostC
リ
フ
ァ
レ
ン
ス
119
BoostC リファレンス
isdigit
書式:
char isdigit( char ch )
引数:
char ch:入力文字
戻り値:
判定結果
機能:
キャラクタ変数 ch が数値であるかを判定します。数値であった場合 O でない値を返しま
す。ctype.h で宣言されています。
BoostC
リ
フ
ァ
レ
ン
ス
120
BoostC リファレンス
isalpha
書式:
char isalpha( char ch )
引数:
char ch:入力文字
戻り値:
判定結果
機能:
キャラクタ変数 ch が、文字であるかをチェックします。これが文字であった場合 O でな
い値を返します。ctype.h で宣言されています。
BoostC
リ
フ
ァ
レ
ン
ス
121
BoostC リファレンス
isalnum
書式:
char isalnum( char ch )
引数:
char ch:入力文字
戻り値:
判定結果
機能:
キャラクタ変数 ch が、数字または文字であるかを判定します。数字または文字であった
場合 O でない値を返します。ctype.h で宣言されています。
BoostC
リ
フ
ァ
レ
ン
ス
122
BoostC リファレンス
isblank
書式:
char isblank( char ch )
引数:
char ch:入力文字
戻り値:
判定結果
機能:
キャラクタ変数 ch が、
標準スペース文字であるか否かを判定します。
そうであれば 1 を、
それ以外であれば 0 を返します。標準スペース文字とは、‟ „(スペース)または‟¥t‟(水平タ
ブ)のことを指します。ctype.h で宣言されています。
BoostC
リ
フ
ァ
レ
ン
ス
123
BoostC リファレンス
isacntrl
書式:
char iscntrl( char ch )
引数:
char ch:入力文字
戻り値:
判定結果
機能:
キャラクタ変数 ch が、正しい制御文字であるか否かを判定します。そうであれば 1 を、
それ以外であれば 0 を返します。ctype.h で宣言されています。
BoostC
リ
フ
ァ
レ
ン
ス
124
BoostC リファレンス
isgraph
書式:
char isgraph( char ch )
引数:
char ch:入力文字
戻り値:
判定結果
機能:
キャラクタ変数 ch が、表示可能な正しい ASCII 文字であるか否かを判定します。そうで
あれば 1 を、それ以外であれば 0 を返します。ctype.h で宣言されています。
BoostC
リ
フ
ァ
レ
ン
ス
125
BoostC リファレンス
islower
書式:
char islower( char ch )
引数:
char ch:入力文字
戻り値:
判定結果
機能:
キャラクタ変数 ch が、小文字の ASCII 文字であるか否かを判定します。そうであれば 1
を、それ以外であれば 0 を返します。ctype.h で宣言されています。
BoostC
リ
フ
ァ
レ
ン
ス
126
BoostC リファレンス
isprint
書式:
char isprint( char ch )
引数:
char ch:入力文字
戻り値:
判定結果
機能:
キャラクタ変数 ch が、出力可能な ASCII 文字であるか否かを判定します。そうであれば
1 を、それ以外であれば 0 を返します。ctype.h で宣言されています。
BoostC
リ
フ
ァ
レ
ン
ス
127
BoostC リファレンス
ispunct
書式:
char ispunct( char ch )
引数:
char ch:入力文字
戻り値:
判定結果
機能:
キャラクタ変数 ch が、句読文字であるか否かを判定します。そうであれば 1 を、それ以
外であれば 0 を返します。句読文字とは、次の示す文字のことを指します:
!"#$%&'()*+,-./:;<=>?@[¥]^_`{|}~
ctype.h で宣言されています。
BoostC
リ
フ
ァ
レ
ン
ス
128
BoostC リファレンス
isspace
書式:
char isspace( char ch )
引数:
char ch:入力文字
戻り値:
判定結果
機能:
キャラクタ変数 ch が、数字または文字であるかを判定します。数字または文字であった
場合 O でない値を返します。ctype.h で宣言されています。
ASCII 文字コード
エスケープシーケンス
スペース
0x20
„'
水平タブ
0x09
„¥t'
垂直タブ
0x0B
„¥v'
改行
0x0A
„¥n'
復帰文字
0x0D
„¥r'
改ページ
0x0C
„¥f'
BoostC
文字の記述
リ
フ
ァ
レ
ン
ス
129
BoostC リファレンス
isxdigit
書式:
char isxdigit( char ch )
引数:
char ch:入力文字
戻り値:
判定結果
機能:
キャラクタ変数 ch が、正しい 16 進文字であるか否かを判定します。そうであれば 1 を、
それ以外であれば 0 を返します。ctype.h で宣言されています。
BoostC
リ
フ
ァ
レ
ン
ス
130
BoostC リファレンス
memchr
書式:
void* memchr( const void *ptr, char ch, unsigned char len )
引数:
const void *ptr:検索ターゲットとなるメモリブロックの先頭アドレス
int ch : 検索文字
unsigned char len : 検索文字数
戻り値:
文字 ch があるアドレス
機能:
ptr の先頭から len 文字分だけ検索を行い、文字 ch が見つかった位置をポインタで返し
ます。memory.h で宣言されています。
BoostC
リ
フ
ァ
レ
ン
ス
131
BoostC リファレンス
memcmp
書式:
signed char memcmp( const void *ptr1, const void *ptr2, unsigned char len )
引数:
const void *ptr1:比較ターゲットとなるメモリブロックの先頭アドレスその 1
const void *ptr2:比較ターゲットとなるメモリブロックの先頭アドレスその 2
unsigned char len : 比較文字数
戻り値:
判定結果
正: ptr1 > ptr2
0 : ptr1 = ptr2
負: ptr1 < ptr2
機能:
ptr1 を先頭とするメモリブロックとと ptr2 を先頭とするメモリブロックを len 文字分比
BoostC
較し、その結果を返します。ptr1>ptr2 ならば正の値を、ptr1=ptr2 ならば 0 を、ptr1<ptr2
ならば負の値を返します。memory.h で宣言されています。
リ
フ
ァ
レ
ン
ス
132
BoostC リファレンス
memmove
書式:
void* memmove( void *dst, const void *src, unsigned char len )
引数:
void *dst:コピー先のメモリブロックの先頭アドレス
const void *src:コピー元となるメモリブロックの先頭アドレス
unsigned char len : コピーするメモリブロックの長さ
戻り値:
なし
機能:
src から dst に len 文字分コピーを行います。memory.h で宣言されています。
BoostC
リ
フ
ァ
レ
ン
ス
133
BoostC リファレンス
memset
書式:
void* memset( void *ptr, char ch, unsigned char len )
引数:
const void *ptr:ch で埋めたいメモリブロックの先頭アドレス
char ch:メモリブロックにコピーする値
unsigned char len : ch で埋めたいメモリブロックの長さ
戻り値:
判定結果
機能:
ptr を先頭とするメモリブロックを len 文字分だけ ch で埋めます。memory.h で宣言され
ています。
BoostC
リ
フ
ァ
レ
ン
ス
134
BoostC リファレンス
その他の関数
rand
書式:
unsigned short rand( void )
引数:
なし
戻り値:
乱数値
機能:
擬似乱数を生成します。rand.h で宣言され、rand.lib で定義されています。
BoostC
リ
フ
ァ
レ
ン
ス
135
BoostC リファレンス
srand
書式:
void srand( unsigned short seed )
引数:
unsigned short seed:初期値
戻り値:
なし
機能:
擬似乱数ジェネレータの初期値を設定します。rand.h で宣言され、rand.lib で定義され
ています。
BoostC
リ
フ
ァ
レ
ン
ス
136
BoostC リファレンス
max
書式:
max( a, b )
引数:
a:比較対象その 1
b:比較対象その 2
戻り値:
引数のうちの最大値
機能:
引数の最大値を返します。 stdlib.h 内で、マクロとして定義されています。
BoostC
リ
フ
ァ
レ
ン
ス
137
BoostC リファレンス
min
書式:
min( a, b )
引数:
a:比較対象その 1
b:比較対象その 2
戻り値:
引数のうちの最小値
機能:
引数の最大値を返します。 stdlib.h 内で、マクロとして定義されています。
BoostC
リ
フ
ァ
レ
ン
ス
138
BoostC リファレンス
abs
書式:
abs( a )
引数:
a:元の数値
戻り値:
元の数値の絶対値
機能:
引数の絶対値を返します。 stdlib.h 内で、マクロとして定義されています。
BoostC
リ
フ
ァ
レ
ン
ス
139
BoostC リファレンス
startCRC16
書式:
void startCRC16( void )
引数:
なし
戻り値:
なし
機能:
crc16 変換を行うごとに、この関数で crc16 コードの初期化を行ってください。
使用する場合は、“crc16.h”をインクルードし、”crc16.lib”をリンクしてください。
BoostC
リ
フ
ァ
レ
ン
ス
140
BoostC リファレンス
CRC16
書式:
1)unsigned short CRC16( unsigned char *mem, size_type len )
2)signed short CRC16( unsigned char mem )
引数:
1) mem:データのポインタ、len:データのサイズ
2) mem:CRC16 を計算するデータ
戻り値:
計算結果
機能:
crc16 変換を行います。1)の形式の場合は、データのポインタとサイズを指定します。
また、2)の形式では、データそのものを引数に持ちます。
使用する場合は、“crc16.h”をインクルードし、”crc16.lib”をリンクしてください。
BoostC
リ
フ
ァ
レ
ン
ス
141
BoostC リファレンス
サポート関数
I2C サポート関数には、次の関数があります。
i2c_init
i2c_start
i2c_restart
i2c_stop
i2c_read
i2c_write
これらの関数の詳細に関しては、i2c_driver.h と i2c_test.c を参照ください。
BoostC
リ
フ
ァ
レ
ン
ス
142
BoostC リファレンス
ドライバ
ソースブースト UART(RS232)ドライバは、UART ハードウェアで動作する、テンプレ
ート・ライブラリとなっています。このドライバは、非同期の割り込み駆動プログラムで、
ユーザが提供する、リングバッファ・メモリの上で動作します。
すべてのドライバ・コールは、ノン・ブロッキングとなっています。この UART ドライバ
は、rs232_driver.h で提供されていた旧型式の RS232 ドライバを置き換えるものです。
rs232_driver.h は下位互換のために、ソースブーストのインストール・フォルダに格納され
ていますが、新しい開発では、uart_driver.h で提供される、新しい UART ドライバを使用
してください。
ドライバの機能
・ すべての UART ビットが個別に設定可能な、柔軟な UI
・ 非同期の送信と受信
・ 同じアプリケーションで、複数の UART が使用可能
・ すべてのコードはヘッダーファイル・ベースで、専用のライブラリをプロジェクトに
BoostC
追加する必要がない
・ 割り込み駆動
・ すべての呼び出しは、ノン・ブロッキング
リ
フ
ァ
レ
ン
ス
・ ユーザ指定のメモリを使用する
・ データをリングバッファに格納する
ドライバの詳細
ソースブースト UART ドライバは、関数テンプレートを使用しています。この方法は、一
般的なライブラリ・ベースのアプローチと比較して、いくつかのアドバンテージがありま
す。
テンプレートの引数は、コンパイル時に、ドライバ・コードに情報が渡されます。このた
めコンパイラは、非常に効率的なコードを生成することができます。
テンプレートの引数は、コードを非常に高度な構成を可能にし、ハードウェア UART の機
能全てがカスタマイズ可能になります。送受信のレジスタから始まり、フレーム・エラー
やデータ・オーバーフローを示すビットまでカスタマイズ可能です。
143
BoostC リファレンス
UART ドライバの導入方法
シリアルドライバを導入するには、uart_driver.h をインクルードするだけです。
#include "uart_driver.h"
コンフィグレーション
ドライバは、シングルまたはマルチポート・モードで使用することができます。ユーザー
アプリケーションが、1つのシリアルポートのみ使用する場合は、シングルポート・モー
ドになります。シングルポート・モードを有効にするには、コンパイラのコマンドライン
で、SINGLE_PORT_MODE を定義するか、ソースコードのシリアルドライバのインクル
ードの前に、SINGLE_PORT_MODE を定義します。SINGLE_PORT_MODE が定義され
ていない場合は、ドライバは、マルチポート・モードで動作します。
#define SINGLE_PORT_MODE
#include "uart_driver.h"
BoostC
リ
フ
ァ
レ
ン
ス
※1 つの UART しか使わない場合でも、必ずシングルポート・モードにしなければならないわけではあ
りません。マルチポート・モードでも、アプリケーションは、1つの UART に対して使用することがで
きますが、シングルポート・モードと比較して、わずかに多くのコードとメモリを使用します。
144
BoostC リファレンス
ドライバのメモリ
UART ドライバは、シリアル・データのためのメモリを確保しませんが、その代わりにア
プリケーションが提供するメモリを使用します。アプリケーション・コードは、送信と受
信のバッファと、いくつかのユーティリティ変数を提供しなければなりません。
シングルポート・モードでは、これらの変数は、次の表に示す、あらかじめ決められた変
数名を使って、変数を定義する必要があります。マルチポート・モードでは、どのような
名前も使用可能です。これらのドライバが内部で使用する内部変数は、rxCnt を除いて、ユ
ーザのコードから、アクセスしたり変更したりすることはできません。
変数名と定義
機能
送信用リングバッファです。サイズは任意ですが、2 の
txBuffer[TX_BUFFER_SIZE]
n 乗の値にするとコードがコンパクトになります。
unsigned char txHead
送信バッファの送信位置を格納します。.
unsigned char txTail
送信バッファの次の送信位置を格納します。
unsigned char
受信用のリングバッファです。サイズは任意ですが、2
rxBuffer[RX_BUFFER_SIZE]
の n 乗の値にするとコードがコンパクトになります。
unsigned char rxHead
受信バッファの受信位置を格納します。.
unsigned char rxTail
受信バッファのデータの読み出し位置を格納します。.
unsigned char rxCnt
受信バッファの受信データ数を格納します。ユーザのコ
ードから、データの受信を確認するために使用すること
ができます。
BoostC
unsigned char
リ
フ
ァ
レ
ン
ス
表:シングルポート・モードで使用する内部変数
145
BoostC リファレンス
ヘルパー・マクロ
UART ドライバは、ヘッダ・ベースの関数テンプレートのため、すべての API ファンクシ
ョンは、いくつかのテンプレート変数を使用します。テンプレート変数は、コンパイル時
にドライバに情報を渡すため、コンパイラは非常に効率的なコードを生成することができ
ます。またこの機能により、ドライバは高度にカスタマイズ可能になります。ソースコー
ドの可読性を上げるためには、#define を使用して、テンプレートを寄り判りやすい識別子
に置き換える方法があります。
次の定義は、PIC18 の UART1 に関する定義です。
#define uart1Init ¥
rs232Init<PIE1,TX1IE,PIE1,RC1IE,RCSTA,CREN,RCSTA,SPEN>
#define uart1TxInterruptHandler ¥
rs232TxInterruptHandler<PIR1,TX1IF,TXREG1,sizeof(txBuffer),
¥
TXSTA,TXEN,TXSTA,TRMT>
#define uart1RxInterruptHandler ¥
rs232RxInterruptHandler<PIR1,RC1IF,RCREG1,sizeof(rxBuffer), ¥
RCSTA,CREN,RCSTA,OERR,RCSTA,FERR>
#define uart1Rx ¥
rs232Rx<sizeof(rxBuffer)>
#define uart1Tx ¥
rs232Tx<sizeof(txBuffer),TXSTA,TXEN>
BoostC
リ
フ
ァ
レ
ン
ス
次の定義は、PIC18 の UART2 に関する定義です。
#define uart2Init ¥
rs232Init<PIE3,TX2IE,PIE3,RC2IE,RCSTA2,CREN,RCSTA2,SPEN>
#define uart2TxInterruptHandler ¥
rs232TxInterruptHandler<PIR3,TX2IF,TXREG2,sizeof(txBuffer), ¥
TXSTA2,TXEN,TXSTA2,TRMT>
#define uart2RxInterruptHandler ¥
rs232RxInterruptHandler<PIR3,RC2IF,RCREG2,sizeof(rxBuffer), ¥
RCSTA2,CREN,RCSTA2,OERR,RCSTA2,FERR>
#define uart2Rx ¥
rs232Rx<sizeof(rxBuffer)>
#define uart2Tx ¥
rs232Tx<sizeof(txBuffer),TXSTA2,TXEN>
次の定義は、PIC16 の UART に関する定義です。
#define uart2Init ¥
rs232Init<PIE1,TXIE,PIE1,RCIE,RCSTA,CREN,RCSTA,SPEN>
#define uart2TxInterruptHandler ¥
rs232TxInterruptHandler<PIR1,TXIF,TXREG,sizeof(txBuffer), ¥
TXSTA,TXEN,TXSTA,TRMT>
#define uart2RxInterruptHandler ¥
rs232RxInterruptHandler<PIR1,RCIF,RCREG,sizeof(rxBuffer), ¥
RCSTA,CREN,RCSTA,OERR,RCSTA,FERR>
#define uart2Rx ¥
rs232Rx<sizeof(rxBuffer)>
#define uart2Tx ¥
rs232Tx<sizeof(txBuffer),TXSTA,TXEN>
146
BoostC リファレンス
初期化
UART を使用するためには、ポートのボーレートを設定し、UART の送受信の割り込みを
設定する必要があります。この設定後、ユーザコードは、ドライバ関数の rs232Init を呼び
出す必要があります。PIC18 の場合のサンプルソースは、次のようになります。
//Configure serial port speed and interrupt
ipr1.TXIP = 0; ipr1.RCIP = 0;
txsta.BRGH = 1;
spbrg = 64;
//use low priority interrupt
//high speed
//9600kbps/10Mhz
//Configure UART pins
trisc.7 = 1;
trisc.6 = 0;
//Init uart driver
uart1Init();
BoostC
割り込みハンドラ
UART ドライバは、データの送信と受信に割り込みを使用します。割り込みハンドラは、
関連する割り込みコードから呼び出されなければなりません。シングルポートのコードで
は、呼び出しに引数はありませんが、マルチポートのコードでは、バッファとヘルパー変
数が引数として渡されなければならないことに注意してください。
シングルポートのサンプルコードは、次のようになります。
... other interrupt code ...
uart1TxInterruptHandler();
if( uart1RxInterruptHandler() )
{
... new data just arrived ...
}
... other interrupt code ...
マルチポート・モードの場合は、次のようになります。
... other interrupt code ...
uart1TxInterruptHandler(txBuffer, txTail, txHead);
if( uart1RxInterruptHandler(rxBuffer, rxHead, rxCnt) )
{
... new data just arrived ...
147
リ
フ
ァ
レ
ン
ス
BoostC リファレンス
}
... other interrupt code
...
データの受信
バッファにデータが受信されたかどうかを確認するには、rxCnt 変数を参照することができ
ます。この変数は、受信バッファにある、有効な受信データ数が格納されています。
シングルポート・モードでの、受信データの確認と読み出しは、次のようになります。
if( rxCnt )
{
unsigned char data = uart1Rx();
... code that handles incoming data ...
}
また、マルチポート・モードでは、次のようなコードになります。
if( rxCnt )
{
unsigned char data = uart1Rx( rxBuffer, rxTail, rxCnt );
... code that handles incoming data ...
}
次の例は、別のメカニズムを使って、受信データを割り込みハンドラから通知する方法で
す。
BoostC
リ
フ
ァ
レ
ン
ス
void interrupt( void )
{
...
if( uart1RxInterruptHandler() )
{
// Signal rx semaphore
SysSignalSemaphoreIsr( hRxSem );
}
...
}
...
unsigned char Rx( void )
{
//Wait for serial data to come
Sys_WaitSemaphore( hRxSem, EVENT_NO_TIMEOUT );
//Read one byte from rx queue
SysCriticalSectionBegin();
unsigned char data = uart1Rx();
SysCriticalSectionEnd();
return data;
}
148
BoostC リファレンス
データ送信
データの送信には、uart1Tx を呼び出します。シングルポート・モードでは、次のように
なります。
uart1Tx( data );
また、マルチポート・モードでは、次のようになります。
uart1Tx( data, txBuffer, txHead );
UART ドライバ API
次の表は、プログラマのための、ドライバテンプレート引数の詳細説明です。
rs232Init
ドライバ初期化コード
説明
unsigned short
TxIrqEnableRegisterAddr
unsigned char TxIrqEnableBit
送信割り込み有効フラグレジスタのアド
レス
ゼロベースの送信割り込み有効ビットの
ビット番号
受信割り込み有効フラグレジスタのアド
レス
ゼロベースの受信割り込み有効ビットの
ビット番号
受信有効フラグレジスタのアドレス
unsigned short
RxIrqEnableRegisterAddr
unsigned char RxIrqEnableBit
unsigned short RxEnableRegisterAddr
unsigned char
RxEnableBit
unsigned short
UartEnableRegisterAddr
unsigned char UartEnableBit
ゼロベースの受信有効ビットのビット番
号
UART 有効フラグレジスタのアドレス
ゼロベースの UART 有効ビットのビット
番号
関数引数
説明
void
なし
戻り値
説明
void
なし
rs232TxInterruptHandler
送信割り込みハンドラ
テンプレート引数
説明
unsigned short
TxIrqFlagRegisterAddr
unsigned char TxIrqFlagBit
送信割り込み有効フラグレジスタのアド
レス
ゼロベースの送信割り込み有効ビットの
ビット番号
データ送信レジスタのアドレス
送信バッファのサイズ
送信有効レジスタのアドレス
unsigned short TxDataRegisterAddr
unsigned char TxBufferSize
unsigned short TxEnableRegisterAddr
149
BoostC
テンプレート引数
リ
フ
ァ
レ
ン
ス
BoostC リファレンス
unsigned char
TxEnableBit
unsigned short
TxFinishedRegisterAddr
unsigned char TxFinishedBit
ゼロベースの送信有効ビットのビット番
号
送信完了フラグレジスタのアドレス
ゼロベースの送信完了ビットのビット番
号
関数引数
説明
void
unsigned char *txBuffer
シングルポート・モードでは引数なし
送信バッファのアドレス
(マルチポート・モード)
txTail 変数への参照
(マルチポート・モード)
txHead 変数への参照
(マルチポート・モード)
unsigned char &txTail
unsigned char &txHead
戻り値
説明
void
なし
rs232RxInterruptHandler
受信割り込みハンドラ
BoostC
リ
フ
ァ
レ
ン
ス
テンプレート引数
説明
unsigned short
RxIrqFlagRegisterAddr
unsigned char RxIrqFlagBit
受信割り込みフラグレジスタのアドレス
unsigned short RxDataRegisterAddr
unsigned char RxBufferSize
unsigned short RxEnableRegisterAddr
unsigned char
RxEnableBit
unsigned short
RxOverflowRegisterAddr
unsigned char RxOverflowBit
unsigned short RxFrameRegisterAddr
unsigned char
RxFrameBit
ゼロベースの受信割り込みフラグのビッ
ト番号
データ受信レジスタのアドレス
受信バッファのサイズ
受信割り込み有効フラグレジスタのアド
レス
ゼロベースの受信割り込み有効ビットの
ビット番号
受信オーバーフロー・エラー・フラグ・
レジスタのアドレス
ゼロベースの受信オーバーフロー・エラ
ー・ビットのビット番号
フレームエラー・フラグ・レジスタのア
ドレス
ゼロベースのフレームエラー・ビットの
ビット番号
関数引数
説明
void
unsigned char *rxBuffer
シングルポート・モードでは引数なし
受信バッファのアドレス
(マルチポート・モード)
rxHead 変数への参照
(マルチポート・モード)
rxCnt 変数への参照
(マルチポート・モード)
unsigned char &rxHead
unsigned char &rxCnt
戻り値
説明
bool
true:新しいデータを受信した
false:受信データなし
rs232Rx
150
BoostC リファレンス
1 バイトデータの受信
テンプレート引数
説明
unsigned char RxBufferSize
受信バッファのサイズ
関数引数
説明
void
unsigned char *rxBuffer
シングルポート・モードでは引数なし
受信バッファのアドレス
(マルチポート・モード)
rxTail 変数への参照
(マルチポート・モード)
rxCnt 変数への参照
(マルチポート・モード)
unsigned char &rxTail
unsigned char &rxCnt
戻り値
説明
unsigned char
UART から受信したデータ
rs232Tx
1 バイトの送信
説明
unsigned char TxBufferSize
unsigned short TxEnableRegisterAddr
unsigned char TxEnableBit
送信バッファのサイズ
送信有効フラグレジスタのアドレス
ゼロベースの送信有効ビットのビット番
号
関数引数
説明
unsigned char data
unsigned char *txBuffer
送信データ
受信バッファのアドレス
(マルチポート・モード)
rxHead 変数への参照
(マルチポート・モード)
unsigned char &txHead
戻り値
説明
void
なし
BoostC
テンプレート引数
リ
フ
ァ
レ
ン
ス
151
BoostC リファレンス
サポート関数
LCD サポート関数には、次の物があります。
lcd_setup
lprintf
lcd_clear
lcd_write
lcd_funcmode
lcd_datamode
LCD サポート詳細に関しては、lcd_driver.h と lcd.c を参照ください。
BoostC
リ
フ
ァ
レ
ン
ス
152
BoostC リファレンス
フラッシュ関数
flash_read
書式:
short flash_read(short addr)
引数:
short addr:読出しアドレス
戻り値:
読出しデータ
機能:
フラッシュメモリのアドレス addr の内容を、読み出します。この関数は、PIC16F87X
で機能します。flash.h 内で宣言され、flash.pic16.lib で定義されています。
BoostC
リ
フ
ァ
レ
ン
ス
153
BoostC リファレンス
flash_loadbuffer
書式:
void flash_loadbuffer(short data)
引数:
short data:設定データ
戻り値:
なし
機能:
short 型 4 つ分の大きさの内部バッファに、short 型変数 data を書き込みます。内部バッ
ファを全て埋めるために、4 回の呼び出しが必要です。バッファ内のデータは、フラッシ
ュメモリに、でデータを保存するために使用されます。この関数は、PIC16F87X で機能
します。flash.h 内で宣言され、 flash.pic16.lib で定義されています。
BoostC
リ
フ
ァ
レ
ン
ス
154
BoostC リファレンス
flash_write
書式:
void flash_write(short addr)
引数:
short addr:書き込みアドレス
戻り値:
なし
機能:
アドレス addr に、フラッシュ内の内部バッファのデータを書き込みます。short 型 4 つ
分の大きさの内部バッファは、flash_loadbuffer を 4 回呼び出して書き込まれている必要
があります。この関数は、PIC16F87X で機能します。flash.h で宣言され、flash.pic16.lib
で定義されています。
BoostC
リ
フ
ァ
レ
ン
ス
155
BoostC リファレンス
関数
eeprom_read
書式:
char eeprom_read(char addr)
引数:
char addr:アドレス
戻り値:
読出しデータ
機能:
アドレス addr の EEPROM の内容を、読み込みます。
この関数は、PIC16F87X で機能します。eeprom.h で宣言され、eeprom.pic16.lib で定義
されています。
BoostC
リ
フ
ァ
レ
ン
ス
156
BoostC リファレンス
eeprom_write
書式:void eeprom_write(char addr, char data)
引数:
char addr:書き込みアドレス
char data:書き込みデータ
戻り値:
なし
機能:
EEPROM のアドレス addr に、data を書き込みます。
この関数は、PIC16F87X で機能します。eeprom.h で宣言され、eeprom.pic16.lib で定義
されています。
BoostC
リ
フ
ァ
レ
ン
ス
157
BoostC リファレンス
関数
adc_measure
書式:
short adc_measure(char ch)
引数:
char ch:チャンネル番号
戻り値:
計測値
機能:
ADC チャンネル ch の計測地を読み込みます。この機能を使用する前に、ADC を初期化
する必要があります。この関数は、ADC ユニットを持つ PIC16F で機能し、adc.h で宣
言され、adc.pic16.lib で定義されています。
BoostC
リ
フ
ァ
レ
ン
ス
ADC の初期化は以下のように行います。
volatile bit adc_on @ ADCON0 . ADON; //AC アクティブフラグ
set_bit(adcon1, ADFM); // AD 結果は右詰めです
set_bit(adcon1, PCFG0); // 全てのアナログを入力
set_bit(adcon1, PCFG1); // Vref+ = Vdd
set_bit(adcon1, PCFG2); // Vref- = Vss
// Tad を選択 = 32 * Tosc (
X-tal 次第です。ここでは 10 MHz ですが, 20 MHz まで上
げて下さい)
set_bit(adcon0, ADCS1);
clear_bit(adcon0, CHS0); // Channel 0
clear_bit(adcon0, CHS1); //
clear_bit(adcon0, CHS2); //
adc_on = 1; // AD モジュールを開始
158
BoostC リファレンス
ワンワイヤバス関数
oo_busreset
書式:
char oo_busreset()
引数:
なし
戻り値:
リセット結果
機能:
1- Wire バスをリセットします。oo.h で宣言され、oo.pic16.lib と oo.pic18.lib で定義さ
れています。
代表的な 1-Wire ライブラリの使用方法は、以下の通りです。
// 1-Wire ライブラリの2グローバルビット変数を使用するにはコード内で宣言が必要で
す
// 1-Wire コミュニケーションのコントロールピンの変数です。
// 1-Wire インターフェースがポート B の6ピンに接続している場合、宣言は以下のよう
になります
#define OO_PORT PORTB
#define OO_TRIS TRISB
#define OO_PIN 6
volatile bit oo_bus @ OO_PORT . OO_PIN;
volatile bit oo_bus_tris @ OO_TRIS . OO_PIN;
// 1-Wire バスのリセット
oo_busreset();
// 変換をスタート(ノンブロッキング関数)
oo_start_conversion();
// 終了を待ちます, 他のスタッフも出来ます
// しかし、この関数がゼロに戻ることを確認して下さい
// スクラッチパッドを読み込んでいます
if( oo_wait_for_completion() ){
159
BoostC
例:
リ
フ
ァ
レ
ン
ス
BoostC リファレンス
//ハンドル変換 time out
}
// スクラッチパッドを読み込む
if( oo_read_scratchpad() ){
//ハンドル変換エラー
}
// 温度の情報を引き出す
short data = oo_get_data();
BoostC
リ
フ
ァ
レ
ン
ス
160
BoostC リファレンス
oo_get_data
書式:short oo_get_data()
引数:
なし
戻り値:
読み込みデータ
機能:
1- Wire バスからデータを読み込みます。
oo.h で宣言され、oo.pic16.lib と oo.pic18.lib で定義されています。
BoostC
リ
フ
ァ
レ
ン
ス
161
BoostC リファレンス
oo_read_scratchpad
書式:char oo_read_scratchpad()
引数:
なし
戻り値:
スクラッチパッドの値
機能:
スクラッチパットを読み込みます。
oo.h で宣言され、oo.pic16.lib と oo.pic18.lib で定義されています。
BoostC
リ
フ
ァ
レ
ン
ス
162
BoostC リファレンス
oo_start_conversion
書式:void oo_start_conversion()
引数:
なし
戻り値:
なし
機能:
変換を開始します。
oo.h で宣言され、oo.pic16.lib と oo.pic18.lib で定義されています。
BoostC
リ
フ
ァ
レ
ン
ス
163
BoostC リファレンス
oo_conversion_busy
書式:char oo_conversion_busy()
引数:
なし
戻り値:
確認結果
機能:
変換が実行中かどうかを確認します。変換が実行されていない場合は、0 を返します。
oo.h で宣言され、oo.pic16.lib と oo.pic18.lib で定義されています。
BoostC
リ
フ
ァ
レ
ン
ス
164
BoostC リファレンス
oo_wait_for_completion
書式:char oo_wait_for_completion()
引数:
なし
戻り値:
1 秒以内に終了する場合は、0となる。
機能:
変換が終了するのを待ちます。1秒以内に終了する場合は 0 を返します。
oo.h で宣言され、oo.pic16.lib と oo.pic18.lib で定義されています。
BoostC
リ
フ
ァ
レ
ン
ス
165
BoostC リファレンス
動作環境
コンパイラ/ソースブースト統合環境をインストール、起動するには、以下の動作環境が必
要です。
必要環境
Microsoft Windows 95/98/ME/NT/2000/XP
Adobe Reader 、ウェブブラウザ (ヘルプファイル、マニュアル閲覧用)
Pentium プロセッサかそれ同等のもの,
128MB の RAM
CD ROM ドライブ
80MB のディスク空き容量
16Bit カラーディスプレイ、800x600 の解像度
推奨環境
(必要環境に加えて)
2.0GHz 以上のプロセッサ
512MB の RAM
BoostC
16Bit カラーディスプレイ、1024x768 以上の解像度
リ
フ
ァ
レ
ン
ス
Microchip, PIC, PICmicro and MPLAB are registered trademarks of Microchip Technology
Inc.
Other trademarks and registered trademarks used in this document are the property of
their respective owners
Copyright© 2004-2007 Pavel Baranov, David Hobday
166
Fly UP