« PIC18用Cコンパイラ(PCH)メモ (1) | トップページ | PIC18用Cコンパイラ(PCH)メモ (3) 【const修飾子】 »

2015年5月10日 (日)

PIC18用Cコンパイラ(PCH)メモ (2) 【関数ポインタ】

(1) 日本代理店のサイトにはCCSのコンパイラは関数ポインタを使えない、という情報がある。

(2) しかし、本家CCSのFAQはこの件に関してサンプルEX_QSORTを見よ、と言っている。関数qsortに比較関数を渡す例である。

(3) このサンプルもそうだが、関数ポインタを他の関数に渡す場合の記述法が要注意である。

(4) たとえばFatFsのf_forward関数。FatFsのオリジナルの記述は、

FRESULT f_forward (FIL* fp, UINT (*func)(const FFBYTE*,UINT), UINT btf, UINT* bf); /* Forward data to the stream */

だが、これだとコンパイルエラーになる。

(5) EX_QSORTの例に倣ってたとえば次の様に記述する。

#if defined(__PCH__)
typedef UINT (*_Fwdfun)(const FFBYTE * buff, UINT btf);    /* f_forward callback function */
#endif

#if defined(__PCH__)
FRESULT f_forward (FIL* fp, _Fwdfun func, UINT btf, UINT* bf);  /* Forward data to the stream */
#else
FRESULT f_forward (FIL* fp, UINT (*func)(const FFBYTE*,UINT), UINT btf, UINT* bf); /* Forward data to the stream (PCH compiles error) */
#endif

(6) 試してみたところ関数ポインタは機能しているようだ。

« PIC18用Cコンパイラ(PCH)メモ (1) | トップページ | PIC18用Cコンパイラ(PCH)メモ (3) 【const修飾子】 »

ソフトウエア」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: PIC18用Cコンパイラ(PCH)メモ (2) 【関数ポインタ】:

« PIC18用Cコンパイラ(PCH)メモ (1) | トップページ | PIC18用Cコンパイラ(PCH)メモ (3) 【const修飾子】 »