« 2014年3月 | トップページ | 2016年5月 »

2015年5月10日 (日)

PIC18用Cコンパイラ(PCH)メモ (3) 【const修飾子】

(1) 関数引数の const DWORD X[] のような記述はコンパイルエラーになる。 例:FatFsのf_fdisk関数

(2) f_fdiskを使わなくてもコンパイルエラーになってしまうので次のような対処をした。

#if defined(__PCH__)
FRESULT f_fdisk (FFBYTE pdrv, DWORD szt[], void* work);     /* Divide a physical drive into some partitions */
#else
FRESULT f_fdisk (FFBYTE pdrv, const DWORD szt[], void* work);   /* Divide a physical drive into some partitions (PCH compiles error) */
#endif

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) 試してみたところ関数ポインタは機能しているようだ。

2015年5月 6日 (水)

PIC18用Cコンパイラ(PCH)メモ (1)

・#device ansi を指定しないとCの常識から離れる。指定したとしてもいろいろ思いがけないことがある。
・intは 8ビット
・shortは 1ビット(つまりBOOL用)
・分割コンパイルが出来ない (CCS C Compiler Manual に Multiple Compilation Units are only supported in the IDE compilers, PCW, PCWH, PCHWD and PCDIDE. とある。 つまりCCS社製のIDEならできるらしい。)
・関数の再帰呼び出しができない。これは仕方ないかもしれない。しかしマイコン用ファイルシステムFatFsのputc_bfd関数(ff.c)は再帰を利用していて、他のマイコンでは再帰が使えることは普通なのだろうか。
・外部変数であっても static指定しない限り 0 で初期化されない。

コンパイラとしての動作ではないが
・MPLAB X IDE v1.95 で使用中、"Parsing ソースファイル名" の表示が出たままフリーズしたことが何回かあり (XC8では記憶にない)

2015年5月 4日 (月)

PIC用Cコンパイラを開発元から直接購入

PIC用Cコンパイラを開発元(CCS Inc.)から直接購入した。

(1) 製品は「PCH Command-line C Compiler」
オプションとして
Programming/ Debugging Tool ... なし
Software Updates ... 30日
Software CD-rom and Manual ... なし(つまりダウンロード版)
で、計$200.00である。

(2) 購入手続きでは「ショッピング用アカウント」を作らされたりするが、面倒は無かった様に思う。支払い手段はクレジットカードである。

(3) 他の方のレポートにもあるとおりダウンロード販売といえど完全に自動化されていない。日本時間で日曜日の午前に注文したが、ダウンロードの案内メールが来たのは月曜日の22時40分過ぎであった。

(4) ここで問題が発生。
ダウンロードしたファイルをインストールする際に、メールに添付されているファイル(registrationファイル)を使え、とのことだが、ファイルが添付されていない!?

(5) CCSのサポートに「添付ファイルが無いよ」と英語で書いてメールした(日本時間で深夜1時30分ごろ)。

(6) それに対する回答が来たのは約2時間後(日本時間で3時20分ごろ)であった。
それによると「もう一度送ったけど、それでもだめならメールのセキュリティ設定を確認して欲しい。 あるいは代わりのメールアドレスを送って欲しい」とのことである。
しかし再送されてきたメールにも添付ファイルが無い。

(7) 原因はこちらにあった。
メールソフトとしてジャストシステムのShuriken 2014を使っているのだが、これが添付ファイルの存在を認識していないのである。
プロバイダのサイトからメールの送受信をするサービスを使ってメールボックスを確認するとちゃんと添付ファイルが付いているのだ(最初のメールにも、再送されてきたメールにも)。そこからregistrationファイルをダウンロードできた。

(8) 以上、CCS社側には問題はないと思われます。
添付ファイルは拡張子CRGの小さなテキストファイルがZIP圧縮されているだけだが、これをなぜShurikenが認識しないのかが謎である。

以下、加筆2015/05/21
(9) クレジットカード会社からの利用明細に上がっていた。 換算レート121.22円で、金額は24,244円である。 
国内代理店から買うと税別30,000円(税込みだと32,400円)なので、約8000円のお得になります。

以下、加筆2015/05/27
(10) ダウンロード期限がまもなく来る、ということで最新版をダウンロードした。 1ヶ月前のCCS社からのメールにあったリンクからダウンロードできる。
V5.045からV5.046への超マイナーバージョンアップである。

« 2014年3月 | トップページ | 2016年5月 »