 |
|
≪クロックの分周≫ |
| RX111のクロック発生回路のレジスタSCKCRによる分周で、指定した分周に設定されない順番がある。 具体的には、PCLD→PCKB→ICK→FCKと順番に2分周に設定して行った場合、PCKDとPCKBが指定どおりに設定されない。
データシートには、
「注2.ICLK:FCLKPCLKBPCLKD=1:N(N は整数)の分周比関係になるように設定してください。」
とある。
要するにICKから設定して行かないと、1:Nの関係が崩れるため、設定が反映されなかったということ。 順番の問題だった。
|
|
 |
|
≪Frequency error≫ |
| E10A-USBでH8S2212とH8S2218のデバッグをすると、 「Frequency error」が出てデバッグできなくなる。 エミュレータソフトウェアV.1.04.00で確認していますが、以降のバージョンでは修正されるはず。 HEW3のフォルダの奥深く、H8S2218のフォルダの中に「Heuh8s.cnf」という名前のファイルがある。 この中に定義されているレジスタアドレス
REGADDR SCKCR=00FFFED6
にミスがある。正しくは、
REGADDR SCKCR=00FFFDE6
となる。定義箇所は、2212の分と2218の分で2箇所。 |
|
 |
|
≪HEW 生成ファイル補足説明≫ |
| HEW 生成ファイル補足説明(H8S、H8/300)なんての前からあったの? HEW生成ファイル補足説明(SH-1、SH-2、SH-2E、SH-DSP)ってのも。 |
|
≪標準ライブラリのソース≫ |
| マイコン用のコンパイラって普通 標準ライブラリのソース付いてると思ってたのに、日立のって無いんですよ。で、日立に問い合わせたら、「非公開情報です」だって。なんだよそれ。MSよりヒドイぞ!まぁ、MSで何やら判らない物を信じる事にはなれてるけどね。でもマイコンの場合そこから学び取る情報も結構あるですけど。何より標準ライブラリにバグあったらどうしてくれるんでしょう? ファイル操作の実装ってどうなってるの?って訊いたらら、「私は、ファイル実装は推奨しません」との事。あんたの見解を訊いてるんじゃないっての! |
|
≪read()とwrite()≫ |
| 高水準インターフェースのfprintf()などから、最終的に呼び出される低水準インターフェース。 バッファリング処理が行われているので、その度必ず呼び出される訳ではない。fflush()、fclose()などによりまとめて呼び出される事もあり。 |
|
≪ファイルのバッファリング≫ |
| 高水準インターフェースのfputs()などからの呼び出しは原則バッファリングが行われる。 |
|
≪バッファリング解除≫ |
| ファイルのバッファリングの解除を行うには、低水準のopen()などで_IOUNBUFのフラグをセットする事で解除できる。 この時、fseek()でSEEK_SETを呼び出しても高水準インターフェース内でSEEK_CURに変換され低水準のseek()に来る。 すなわち、バッファリングなしに設定すると、ファイル先頭や終端からのシーク動作は不可能になる。 |
|
≪ファイルバッファのサイズ≫ |
| ファイルバッファはデフォルトで512バイトとなっているため、それよりクラスタサイズが小さいデバイスを扱う場合、大きな無駄になる。 |
|
≪バッファのユーザー設定≫ |
| setvbuf()などのライブラリ関数により、バッファの位置及びサイズが変更可能。 しかしこれは、次の様に使われることが前提。 FILE* fp = fopen(); setvbuf(fp....); fclose(fp); 高水準インターフェースの呼び出し側がsetvbuf()を呼び出す。 組み込みの場合、通常こうゆうデバイスに依存するものは、隠蔽したいもの。 で、内部的なバッファアドレス(_iobuf[]のメンバ)を低水準のopen()内で設定してみるが、open()は高水準のfopen()から呼ばれるので、open()からfopen()内で戻った後、_iobuf[]のメンバは初期化される。 結論的には、低水準内で設定する方法はなし。 |
|
≪charput()、charget()≫ |
| lowlvl.src 内にあるcharput()とcharget()は通常のコーディングでは無視してよい。これはシミュレータで使用されるもののよう。最初これも低水準インターフェースの部品かと思ってた。 |