(仮)釣りと電子工作 MikroCのコツ 忍者ブログ
趣味の電子工作と釣りについて。電子工作は、おもに変換器作成。釣りはおもにトラウトの管釣り。
[51] [50] [49] [48] [47] [46] [45] [44] [42] [41] [40]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

MikroCでPS/2-ADB変換器のロジックを追加しているときのメモリ使用率は、つねに99%。100%超えたらメモリ節約のためにプログラムを書き換え、空いたらまたロジックを追加する、の繰り返し。メモリ節約のためのロジック書き換えにかかる時間が10で、機能追加や改良のためのロジック追加にかかる時間は1くらい。2Kワードのメモリサイズは、Cで多機能変換器を作成するには非常に厳しい。

あと、コツかどうかわからないけど。。。。
これが正しいかどうかわからないけど。。。。

① 配列変数に絶対アドレスを指定するとバイナリのサイズがすごく小さくなることが多い
ちょっとロジックを追加しただけなのに、理不尽にメモリ使用量が増えた場合などに有効。
  例:unsigned short keybuf_fn_flg[32] absolute 0xA0;

② Delay_us(n)はメモリを大量に消費する。
これはDelay_us関数を呼び出すのではなくnの値に応じて動的にバイナリを生成しているから。
ということで、同じnの値でDelay_us(n)を呼び出すのなら、引数なしの関数化すべき。
またはアセンブラでDelay_us互換の関数を作るのもよし。

③ グローバル変数を多用すること
Cの教科書とは逆だが、関数は void  function(); が基本。
スマートに書こうとするとすぐメモリが足りなくなる。
可読性とメモリ使用量にはトレードオフの関係がある。
メモリに収まる範囲で戻り値や引数を使うこと。

④ アセンブラ内で使用できる変数はグローバル変数のみ。
     ちなみに下記は、(指定した引数+1) x 5us + 関数呼び出しの10us?程度遅延する関数の例
unsigned short g_delay1=0 ;
void Delay_us5(unsigned short i) {
  g_delay1 = i;
  asm {
  L_Delay_us5_0001:
    nop
    nop
    decfsz _g_delay1,F
    goto L_Delay_us5_0001
  }
}
PR
この記事にコメントする
お名前
タイトル
文字色
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
カレンダー
04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
リンク
最新TB
バーコード
ブログ内検索
カウンター
Powered by ニンジャブログ  Designed by 穂高
Copyright © (仮)釣りと電子工作 All Rights Reserved
忍者ブログ / [PR]