about
H24 system software では実行ファイル(h2e)向けにメモリーカードアクセス用の関数を用意しています。ファイルシステムミドルウェアとして Petit FAT File System Module に手を加えたものを利用しております。変更点とともに本家のリファレンスも確認をしてください。
Petit FAT File System Module: http://elm-chan.org/fsw/ff/00index_p.html
呼び出し規約
内部割り込み
各関数は内部割り込みの TRAP 命令を経由します。 h2e ロード時に TRAP 用のベクタアドレスには jump 命令が書き込まれています。このため h2e のプログラム側で該当部分を書き換えると、正常動作しなくなりますので注意してください。
TRAP の呼び出しは h2e_api.h, h2e_api.s を利用してください。
TRAP 番号一覧
# name ----------- 1 pf_mount 2 pf_open 3 pf_lseek 4 pf_read 5 pf_write 6 pf_opendir 7 pf_readdir
変数名、列挙子名
整数名
stdint.h に応じた名称に変更してあります。
変更前|変更後 ------+------ BYTE |uint8_t WORD |uint16_t DWORD |uint32_t
FRESULT 型
FR_WRITEPROTECTED を追加しています。既存の列挙子の値に変更はありません。
関数リファレンス
第1引数
全ての関数の第1引数に、 struct _FATFS_ のポインタを渡す様に変更しました。 struct _FATFS_ の構造定義は意図的に参照できないようにしてあります。
pf_mount
FRESULT pf_mount(struct _FATFS_ *fs);
- 第1引数以外の変更点はありません。
pf_open
FRESULT pf_open(struct _FATFS_ *fs, const char *file);
- 第1引数以外の変更点はありません。
pf_lseek
FRESULT pf_lseek(struct _FATFS_ *fs, uint32_t offset);
- 第1引数以外の変更点はありません。
pf_read
FRESULT pf_read(struct _FATFS_ *fs, void *buf, uint32_t length, uint32_t *read_byte);
- 第1引数に fs を追加しました。
- length, read_byte の型をそれぞれ下記に変更しました。
名称 |変更前|変更後 ---------+------+------ length |WORD |uint32_t read_byte|WORD* |uint32_t *
- 一度に読み込める最大長を 0xffff から 0xffffffff に変更しました。
pf_write
FRESULT pf_write(struct _FATFS_ *fs, const void *buff, uint32_t length, uint32_t *written_byte);
pf_write は変更点が多いので注意してください。pf_write ではファイルの上書きのみを行いますので、元のファイルサイズを超える書き込みはできません。また、タイムスタンプの変更はありません。
length の変更
- 第1引数に fs を追加しました。
- length, written_byte の型をそれぞれ下記に変更しました。
名称 |変更前|変更後 ------------+------+------ length |WORD |uint32_t written_byte|WORD* |uint32_t *
- 一度に書き込める最大長を 0xffff から 0xffffffff に変更しました。
戻り値の変更
メモリーカードのライトプロテクトを参照し書き込み禁止の状態であれば、 FR_WRITEPROCTED を返し、書き込み処理を行いません。
書き込み時の制限
書き込みの処理速度をあげるために、下記の制限を設けました。
- pf_write を一度呼び出すと、他のAPI関数を呼び出しても正常に動作しない。
- 他のAPI関数を使用する場合は buff = NULL, length = 0 とし、書き込み終了指示を出す。
- 書き込み終了指示が呼び出されたときに、書き込み長が 0x200 の倍数ではない場合は規定位置に達するまで 0 でデータが埋められる。
pf_opendir
FRESULT pf_opendir(struct _FATFS_ *fs, DIR*, const char*);
- 第1引数以外の変更点はありません。
pf_readdir
FRESULT pf_readdir(struct _FATFS_ *fs, DIR*, FILINFO*);
- 第1引数以外の変更点はありません。