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)メモ (3) 【const修飾子】(2015.05.10)
- PIC18用Cコンパイラ(PCH)メモ (2) 【関数ポインタ】(2015.05.10)
- PIC18用Cコンパイラ(PCH)メモ (1)(2015.05.06)
- PIC用Cコンパイラを開発元から直接購入(2015.05.04)
- オライリー「JavaScript」(2014.01.16)
« PIC18用Cコンパイラ(PCH)メモ (1) | トップページ | PIC18用Cコンパイラ(PCH)メモ (3) 【const修飾子】 »
コメント