BASIC compiler/interpreter for PIC32MX/MZ-80K
リビジョン | 5c100a6ec2988c0dafc8ad068e3bee6593419ee0 (tree) |
---|---|
日時 | 2019-05-14 06:03:43 |
作者 | Katsumi <kmorimatsu@sour...> |
コミッター | Katsumi |
Add clib.txt
@@ -0,0 +1,108 @@ | ||
1 | +<Cライブラリーの利用方法> | |
2 | + | |
3 | +まず、Cライブラリーの使い方について述べます。作成方法については、下の方を参照して | |
4 | +下さい。 | |
5 | + | |
6 | +Cライブラリーの本体は、「*.HEX」ファイルです。拡張子が「HEX」のファイルが、BASIC | |
7 | +プログラムが置かれているのと同じディレクトリーか、LIBディレクトリーの所定の場所に | |
8 | +ある事を確認して下さい。 | |
9 | + | |
10 | +BASICプログラム中では、まず冒頭でUSECLIBステートメントを記述して下さい。 | |
11 | + | |
12 | +USECLIB x[,y[,z[, ... ]]] | |
13 | + Cライブラリーの利用を宣言する。x,y,z等は、ライブラリー名を6文字以内の英数字 | |
14 | + で指定。 | |
15 | + | |
16 | +ここでは、「*.HEX」ファイルのファイル名を、指定します。「TCLIB.HEX」なら | |
17 | +「USECLIB TCLIB」と記述します。 | |
18 | + | |
19 | +Cライブラリー内の関数を呼び出すには、以下のいずれかの方法を取ります。それぞれの | |
20 | +関数の詳しい使用方法については、Cライブラリーに付属のドキュメントを参照して下さ | |
21 | +い。 | |
22 | + | |
23 | +CLIB xxx::yyy[,z1[,z2 ...]] | |
24 | + Cライブラリー内の関数を呼び出す。xxxはライブラリー名、yyyは関数名。z1, z2等 | |
25 | + は引数(オプション)。 | |
26 | +CLIB(xxx::yyy[,z1[,z2 ... ]]) | |
27 | + Cライブラリー内の関数を呼び出し、整数を返す。xxxはライブラリー名、yyyは関数 | |
28 | + 名。z1, z2等は引数(オプション)。xxx::yyy([z1[,z2 ... ]])と書いても同じ。 | |
29 | +CLIB$(xxx::yyy[,z1[,z2 ... ]]) | |
30 | + Cライブラリー内の関数を呼び出し、文字列を返す。xxxはライブラリー名、yyyは関 | |
31 | + 数名。z1, z2等は引数(オプション)。xxx::yyy$([z1[,z2 ... ]])と書いても同じ。 | |
32 | +CLIB#(xxx::yyy[,z1[,z2 ... ]]) | |
33 | + Cライブラリー内の関数を呼び出し、実数を返す。xxxはライブラリー名、yyyは関 | |
34 | + 数名。z1, z2等は引数(オプション)。xxx::yyy#([z1[,z2 ... ]])と書いても同じ。 | |
35 | + | |
36 | +<使用例> | |
37 | + | |
38 | +USECLIB TCLIB | |
39 | +PRINT TCLIB::TEST$(0) | |
40 | +PRINT TCLIB::TEST$(1) | |
41 | + | |
42 | +<Cライブラリーの作成方法> | |
43 | + | |
44 | +Cライブラリーを作製する場合には、MPLAB X IDEとXC32コンパイラーのver 1.42以降が | |
45 | +必要です。 | |
46 | + | |
47 | +まず、ライブラリー作成用のテンプレートをダウンロードして下さい。少なくとも、次の | |
48 | +ファイルが含まれているはずです。 | |
49 | + | |
50 | +clib.c | |
51 | +clib.h | |
52 | +clib_p32MX370F512H.ld | |
53 | +example.c | |
54 | + | |
55 | +「File->Project Properties」を選択します。次の設定を確認し、異なっていれば値を | |
56 | +変更してください。 | |
57 | + Categories: Conf | |
58 | + Compiler Toochains: XC32 (v1.42以降) | |
59 | + Categories: xc32-gcc | |
60 | + Additinal options: -mgen-pie-static | |
61 | + Option categories: Optimization | |
62 | + optimization-level: 1 | |
63 | + Generated Command Line: -g -O1 | |
64 | + Categories: xc32-ld | |
65 | + Additional options: --no-data-init | |
66 | + Option categories: General | |
67 | + Remove unused sections: チェックを入れる | |
68 | + Option categories: Libraries | |
69 | + Exclude Standard Libraries: チェックを入れる | |
70 | + Generated Command Line: --gc-sections --no-code-in-dinit --no-dinit-in-serial-mem -nostdlib -Map="${DISTDIR}/${PROJECTNAME}.${IMAGE_TYPE}.map" | |
71 | + | |
72 | +clib.c, clib.h, clib_p32MX370F512H.ldの3つは、通常は編集せずにそのまま使います。 | |
73 | +example.cを編集(必要ならばファイル名を変更)する事で、Cライブラリーを作製して下さ | |
74 | +い。コンパイルして出来たHEXファイルが、完成した本体です。 | |
75 | + | |
76 | +<Cライブラリーの仕様> | |
77 | + | |
78 | +Cライブラリーを作成するにあたり、以下の規約に従って下さい。 | |
79 | + | |
80 | +1.グローバル変数・スタティック変数領域の容量は、128バイト。 | |
81 | + ・50個ほどのグローバル変数・スタティック変数が使用可能。 | |
82 | + ・大きなメモリー領域が必要な場合は、malloc(), calloc(), free()を使用する。 | |
83 | + ・グローバル変数の初期化は、init()関数で行なわなければならない。 | |
84 | + ・スタティック変数は実行前の初期化はできない(常に0で初期化される)。 | |
85 | + | |
86 | +2.パブリック関数を、その呼び出し名と共にリストアップする事。 | |
87 | + ・functions[]グローバル変数に指定する。 | |
88 | + ・フォーマットについては、example.cを参照。 | |
89 | + | |
90 | +3.パブリック関数の引数は、4つまで。 | |
91 | + | |
92 | +4.割り込みは使用出来ない。 | |
93 | + | |
94 | +<グローバル変数領域のサイズ変更> | |
95 | + | |
96 | +より大きな変数領域が必要な場合は、calloc()で領域を割り当てる事が推奨されます。 | |
97 | +それでも、グローバル変数領域が足りない場合は、以下の方法でサイズ変更出来ます。 | |
98 | + | |
99 | +1.clib_p[32MC370F512H.ldを編集する。 | |
100 | + ・「kseg1_data_mem」の設定の所、「-0x080」と「LENGTH = 0x080」となっている所 | |
101 | + を適当なサイズに変更する。 | |
102 | + | |
103 | +2.clib.hを編集する。 | |
104 | + ・「#define CLIB_DATA_MEM_SIZE 0x0080」の所、上記で変更した値と同じになるよう | |
105 | + に、編集する。 | |
106 | + | |
107 | +<バージョン履歴> | |
108 | +・KM-1209/KM1304 2019年?月公開。 |
@@ -38,6 +38,7 @@ var filearray=[ | ||
38 | 38 | 'reservednames.js', |
39 | 39 | 'sharedfiles.js', |
40 | 40 | 'class.txt', |
41 | + 'clib.txt', | |
41 | 42 | ]; |
42 | 43 | |
43 | 44 | var WshShell = WScript.CreateObject("WScript.Shell"); |