| -ソース作成時- |
|
・グローバル変数を定義時に、初期値を設定すると変数がROM上に置かれる(つまり書き換えが不可能になる)。 例)int a; /* RAM上 */  int a=100; /* ROM上 */ ・関数内に大きな配列を作るときは、staticをつけたほうがいい ・計算で小数を使おうとすると、コンパイルできない 例)a = b / 2.4; ・char型の配列にうまくアクセスできない 回避策として私はいったんlongの変数に入れてから、and 255と8bit左shiftを繰り返して取り出しています 例)char a[4], n; long b; b=(long *)a; /* いったん32bit単位で取り出す */ n=b&255; /* n=a[0]と同じ */ n=(b>>8)&255; /* n=a[1]と同じ */ n=(b>>16)&255; /* n=a[2]と同じ */ n=(b>>24)&255; /* n=a[3]と同じ */ ・//のコメントで全角を使うときは、一番最後の文字の2バイト目が0x5cで終わらないようにする 2バイトコードのことを考慮されていないため、一番最後の文字が'\'であると解釈されて、次の行もコメントとして扱われてしまいます 例)//ソ  a=100; 2行目のa=100はコメントとして扱われるのでコンパイルされません |
| -エミュレータと実機の違い- |
|
・実行速度が100%よりも速い(マシンの性能によって違うかも?) ・フラッシュメモリーの領域も書き込みが出来る(RAM状態) ・メモリー空間のどこでもアクセスが出来る。実機ではメモリのないとこでは例外が発生する?(固まる) ・Timer2が実装されていない。 |
| -その他調べてわかったこと- |
|
・PCMに読ませるデータについて Windowsの8bitWAVファイルの場合、最低が0、真中が128、最高が255です(つまりunsigned char) ポケステの場合(10bitのうち上位8bitを使った場合)、最低が-128、真中が0、最高が127です(つまりsigned char) ということは、最上位bitが符号ビットなので、音量が小でデータをシフトするときは算術シフトしないといけません 初めはWindowsのWAVファイルのデータ部分をそのまま使って、音が悪いなーと思っていたんですがよくよく調べてみたら上記のような違いが有りました |